acumatica
Ändringar av basdatavisningar
Sök…
Introduktion
Detta ämne är avsett att demonstrera olika mönster och praxis som är tillgängliga för att modifiera basdatavisningar i Acumatica.
APInvoiceEntry BLC: lägg till ytterligare begränsningar i poReceiptLinesSelection-datavyn
För att lägga till ytterligare begränsningar i poReceiptLinesSelection-datavyn , bör du åberopa Select
metod i PXResultSet
och inspektera varje objekt i returnerad PXResultSet
oberoende för att bestämma om den uppfyller ytterligare begränsningar:
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;
}
}
}
}
Detta tillvägagångssätt fungerar perfekt med poReceiptLinesSelection-datavyn på grund av brist på sökning och aggregering vid implementeringen av basvyn. För att komponera resultatuppsättning begär poReceiptLinesSelection- visning nödvändiga data från databasen och utför alla beräkningar på applikationssidan.
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);
}
}
...
}
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow