acumatica
Änderungen an Basisdatenansichten
Suche…
Einführung
In diesem Thema werden verschiedene Muster und Vorgehensweisen veranschaulicht, die zum Ändern der Basisdatensichten in Acumatica verfügbar sind.
APInvoiceEntry BLC: Fügen Sie der Datenansicht poReceiptLinesSelection eine zusätzliche Einschränkung hinzu
Um der Datenansicht poReceiptLinesSelection eine zusätzliche Einschränkung hinzuzufügen, müssen Sie die Select
Methode in der Basisansicht aufrufen und jedes Element in dem zurückgegebenen PXResultSet
unabhängig voneinander untersuchen, um zu entscheiden, ob es zusätzliche Einschränkungen erfüllt:
public class APInvoiceEntryExt : PXGraphExtension<APInvoiceEntry>
{
[PXCopyPasteHiddenView]
public PXSelect<APInvoiceEntry.POReceiptLineAdd> poReceiptLinesSelection;
public virtual IEnumerable POReceiptLinesSelection()
{
foreach (var record in Base.poReceiptLinesSelection.Select())
{
// Additional restriction goes here
if (true == true)
{
yield return record;
}
}
}
}
Dieser Ansatz funktioniert perfekt mit der Datensicht poReceiptLinesSelection , da bei der Implementierung der Basissicht Paging und Aggregation fehlen. Um die Ergebnismenge zu erstellen , fordert die Ansicht poReceiptLinesSelection die erforderlichen Daten aus der Datenbank an und führt alle Berechnungen auf der Anwendungsseite aus.
public class APInvoiceEntry : APDataEntryGraph<APInvoiceEntry, APInvoice>, PXImportAttribute.IPXPrepareItems
{
...
[PXCopyPasteHiddenView]
public PXSelect<POReceiptLineAdd> poReceiptLinesSelection;
public virtual IEnumerable POReceiptLinesSelection()
{
APInvoice doc = this.Document.Current;
if (doc == null || doc.VendorID == null || doc.VendorLocationID == null) yield break;
if (doc.DocType != APDocType.Invoice && doc.DocType != APDocType.DebitAdj)
yield break;
string poReceiptType = (doc.DocType == APDocType.Invoice) ? POReceiptType.POReceipt : POReceiptType.POReturn;
HashSet<APTran> usedRecceiptLine = new HashSet<APTran>(new POReceiptLineComparer());
HashSet<APTran> unusedReceiptLine = new HashSet<APTran>(new POReceiptLineComparer());
foreach (APTran aPTran in Transactions.Cache.Inserted)
{
if (aPTran.ReceiptNbr != null && aPTran.ReceiptType != null && aPTran.ReceiptLineNbr != null)
usedRecceiptLine.Add(aPTran);
}
foreach (APTran aPTran in Transactions.Cache.Deleted)
{
if (aPTran.ReceiptNbr != null && aPTran.ReceiptType != null && aPTran.ReceiptLineNbr != null && Transactions.Cache.GetStatus(aPTran) != PXEntryStatus.InsertedDeleted)
if (!usedRecceiptLine.Remove(aPTran))
unusedReceiptLine.Add(aPTran);
}
foreach (APTran aPTran in Transactions.Cache.Updated)
{
APTran originAPTran = new APTran();
originAPTran.ReceiptNbr = (String)Transactions.Cache.GetValueOriginal<APTran.receiptNbr>(aPTran);
originAPTran.ReceiptType = (String)Transactions.Cache.GetValueOriginal<APTran.receiptType>(aPTran);
originAPTran.ReceiptLineNbr = (Int32?)Transactions.Cache.GetValueOriginal<APTran.receiptLineNbr>(aPTran);
if (originAPTran.ReceiptNbr != null && originAPTran.ReceiptType != null && originAPTran.ReceiptLineNbr != null)
{
if (!usedRecceiptLine.Remove(originAPTran))
unusedReceiptLine.Add(originAPTran);
}
if (aPTran.ReceiptNbr != null && aPTran.ReceiptType != null && aPTran.ReceiptLineNbr != null)
{
if (!unusedReceiptLine.Remove(aPTran))
usedRecceiptLine.Add(aPTran);
}
}
foreach (LinkLineReceipt item in PXSelect<LinkLineReceipt,
Where<LinkLineReceipt.vendorID, Equal<Current<APInvoice.vendorID>>,
And<LinkLineReceipt.vendorLocationID, Equal<Current<APInvoice.vendorLocationID>>,
And<LinkLineReceipt.receiptCuryID, Equal<Current<APInvoice.curyID>>,
And<LinkLineReceipt.receiptType, Equal<Required<POReceipt.receiptType>>,
And<Where<LinkLineReceipt.orderNbr, Equal<Current<POReceiptFilter.orderNbr>>, Or<Current<POReceiptFilter.orderNbr>, IsNull>>>
>>>>>.SelectMultiBound(this, new object[] { doc }, poReceiptType))
{
APTran aPTran = new APTran();
aPTran.ReceiptType = item.ReceiptType;
aPTran.ReceiptNbr = item.ReceiptNbr;
aPTran.ReceiptLineNbr = item.ReceiptLineNbr;
if (!usedRecceiptLine.Contains(aPTran))
yield return (PXResult<POReceiptLineAdd, POReceipt>)ReceipLineAdd.Select(item.ReceiptNbr, item.ReceiptType, item.ReceiptLineNbr);
}
foreach (APTran item in unusedReceiptLine)
{
yield return (PXResult<POReceiptLineAdd, POReceipt>)ReceipLineAdd.Select(item.ReceiptNbr, item.ReceiptType, item.ReceiptLineNbr);
}
}
...
}