Acumatica 如何在网格视图代理中覆盖账单和调整屏幕AddPOReceipt按钮
我们要求在账单类型的AddPoReceipt按钮的网格中仅显示收据类型Ponbrs,因为我尝试覆盖网格视图委托,如下图所示,但未能加载屏幕,也无法为此创建扩展图,请查看下面的代码,也可帮助我解决此问题 提前感谢,Acumatica 如何在网格视图代理中覆盖账单和调整屏幕AddPOReceipt按钮,acumatica,Acumatica,我们要求在账单类型的AddPoReceipt按钮的网格中仅显示收据类型Ponbrs,因为我尝试覆盖网格视图委托,如下图所示,但未能加载屏幕,也无法为此创建扩展图,请查看下面的代码,也可帮助我解决此问题 提前感谢, public class AddPOReceiptExtensionExt : AddPOReceiptExtension { [PXOverride] public IEnumerable pOreceiptslist() {
public class AddPOReceiptExtensionExt : AddPOReceiptExtension
{
[PXOverride]
public IEnumerable pOreceiptslist()
{
APInvoice doc = Base.Document.Current;
if (doc?.VendorID == null
|| doc.VendorLocationID == null
|| doc.DocType != APDocType.Invoice
&& doc.DocType != APDocType.DebitAdj)
{
yield break;
}
string poReceiptType = doc.DocType == APDocType.Invoice
? POReceiptType.POReceipt
: POReceiptType.POReturn;
Dictionary<APTran, int> usedReceipt = new Dictionary<APTran, int>(new POReceiptComparer());
int count;
foreach (APTran aPTran in Base.Transactions.Cache.Inserted)
{
if (aPTran.ReceiptNbr != null)
{
usedReceipt.TryGetValue(aPTran, out count);
usedReceipt[aPTran] = count + 1;
}
}
foreach (APTran aPTran in Base.Transactions.Cache.Deleted)
{
if (aPTran.ReceiptNbr != null && Base.Transactions.Cache.GetStatus(aPTran) != PXEntryStatus.InsertedDeleted)
{
usedReceipt.TryGetValue(aPTran, out count);
usedReceipt[aPTran] = count - 1;
}
}
foreach (APTran aPTran in Base.Transactions.Cache.Updated)
{
string originalValue = (string)Base.Transactions.Cache.GetValueOriginal<APTran.receiptNbr>(aPTran);
if (aPTran.ReceiptNbr != originalValue)
{
if (originalValue != null)
{
APTran originTran = new APTran { ReceiptNbr = originalValue };
usedReceipt.TryGetValue(originTran, out count);
usedReceipt[originTran] = count - 1;
}
if (aPTran.ReceiptNbr != null)
{
usedReceipt.TryGetValue(aPTran, out count);
usedReceipt[aPTran] = count + 1;
}
}
}
PXSelectBase<POReceipt> cmd = new PXSelectJoinGroupBy<
POReceipt,
InnerJoin<POReceiptLineS, On<POReceiptLineS.receiptNbr, Equal<POReceipt.receiptNbr>>,
LeftJoin<APTran, On<APTran.released, Equal<False>,
And<Where<POReceiptLineS.pOAccrualType, Equal<POAccrualType.receipt>,
And<APTran.receiptNbr, Equal<POReceiptLineS.receiptNbr>,
And<APTran.receiptType, Equal<POReceiptLineS.receiptType>,
And<APTran.receiptLineNbr, Equal<POReceiptLineS.lineNbr>,
Or<POReceiptLineS.pOAccrualType, Equal<POAccrualType.order>,
And<APTran.pOOrderType, Equal<POReceiptLineS.pOType>,
And<APTran.pONbr, Equal<POReceiptLineS.pONbr>,
And<APTran.pOLineNbr, Equal<POReceiptLineS.pOLineNbr>>>>>>>>>>>>>,
Where<POReceipt.hold, Equal<False>,
And<POReceipt.released, Equal<True>,
And<POReceipt.receiptType, Equal<Required<POReceipt.receiptType>>,
And<APTran.refNbr, IsNull,
And<POReceiptLineS.unbilledQty, Greater<decimal0>,
And<Where<POReceiptLineS.pONbr, Equal<Current<POReceiptFilter.orderNbr>>,
Or<Current<POReceiptFilter.orderNbr>, IsNull>>>>>>>>,
Aggregate<
GroupBy<POReceipt.receiptType,
GroupBy<POReceipt.receiptNbr,
Sum<POReceiptLineS.receiptQty,
Sum<POReceiptLineS.unbilledQty,
Count<POReceiptLineS.lineNbr>>>>>>>(Base);
if (Base.APSetup.Current.RequireSingleProjectPerDocument == true)
{
cmd.WhereAnd<Where<POReceipt.projectID, Equal<Current<APInvoice.projectID>>>>();
}
if (PXAccess.FeatureInstalled<FeaturesSet.vendorRelations>())
{
cmd.Join<LeftJoin<POOrder, On<POOrder.orderType, Equal<POReceiptLineS.pOType>, And<POOrder.orderNbr, Equal<POReceiptLineS.pONbr>>>>>();
cmd.WhereAnd<Where<POReceipt.vendorID, Equal<Current<APInvoice.suppliedByVendorID>>,
And<POReceipt.vendorLocationID, Equal<Current<APInvoice.suppliedByVendorLocationID>>,
And<Where<POOrder.payToVendorID, IsNull, Or<POOrder.payToVendorID, Equal<Current<APInvoice.vendorID>>>>>>>>();
}
else
{
cmd.WhereAnd<Where<POReceipt.vendorID, Equal<Current<APInvoice.vendorID>>,
And<POReceipt.vendorLocationID, Equal<Current<APInvoice.vendorLocationID>>>>>();
}
if (doc.DocType == "INV")
{
cmd.WhereAnd<Where<POReceiptExt.usrKWIsVirtualReceipt, IsNull, Or<POReceiptExt.usrKWIsVirtualReceipt, Equal<False>>>>();
foreach (PXResult<POReceipt, POReceiptLineS, APTran> result in cmd.View.SelectMultiBound(new object[] { doc }, POReceiptType.POReceipt))
{
POReceipt receipt = result;
APTran aPTran = new APTran { ReceiptNbr = receipt.ReceiptNbr };
if (usedReceipt.TryGetValue(aPTran, out count))
{
usedReceipt.Remove(aPTran);
if (count < result.RowCount)
{
yield return receipt;
}
}
else
{
yield return receipt;
}
}
}
else
{
foreach (PXResult<POReceipt, POReceiptLineS, APTran> result in cmd.View.SelectMultiBound(new object[] { doc }, poReceiptType))
{
POReceipt receipt = result;
APTran aPTran = new APTran { ReceiptNbr = receipt.ReceiptNbr };
if (usedReceipt.TryGetValue(aPTran, out count))
{
usedReceipt.Remove(aPTran);
if (count < result.RowCount)
{
yield return receipt;
}
}
else
{
yield return receipt;
}
}
}
foreach (APTran deletedTran in usedReceipt.Where(_ => _.Value < 0).Select(_ => _.Key))
{
yield return PXSelect<POReceipt, Where<POReceipt.receiptNbr, Equal<Required<APTran.receiptNbr>>>>
.SelectSingleBound(Base, new object[] { }, deletedTran.ReceiptNbr)
.RowCast<POReceipt>()
.First();
}
}
}
您需要扩展AddPoreCeipExtension图形扩展:
class MyExtension : PXGraphExtension<AddPOReceiptExtension, APInvoiceEntry>
您需要扩展AddPoreCeipExtension图形扩展:
class MyExtension : PXGraphExtension<AddPOReceiptExtension, APInvoiceEntry>