acumatica
基本データビューの変更
サーチ…
前書き
このトピックは、Acumaticaの基本データビューを変更するためのさまざまなパターンとプラクティスを示すためのものです。
APInvoiceEntry BLC:poReceiptLinesSelectionデータビューに追加の制限を追加する
poReceiptLinesSelectionデータビューに追加の制限を追加するには、ベースビューでSelect
メソッドを呼び出し、返されたPXResultSet
各アイテムを個別に調べて、追加の制限に準拠しているかどうかを判断する必要があります。
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;
}
}
}
}
このアプローチは、ベースビューの実装におけるページングと集約の欠如のために、 poReceiptLinesSelectionデータビューで完全に機能します。結果セットを構成するために、 poReceiptLinesSelectionビューはデータベースから必要なデータを要求し、アプリケーション側ですべての計算を実行します。
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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow