Acumatica 如何在网格视图代理中覆盖账单和调整屏幕AddPOReceipt按钮

Acumatica 如何在网格视图代理中覆盖账单和调整屏幕AddPOReceipt按钮,acumatica,Acumatica,我们要求在账单类型的AddPoReceipt按钮的网格中仅显示收据类型Ponbrs,因为我尝试覆盖网格视图委托,如下图所示,但未能加载屏幕,也无法为此创建扩展图,请查看下面的代码,也可帮助我解决此问题 提前感谢, public class AddPOReceiptExtensionExt : AddPOReceiptExtension { [PXOverride] public IEnumerable pOreceiptslist() {

我们要求在账单类型的AddPoReceipt按钮的网格中仅显示收据类型Ponbrs,因为我尝试覆盖网格视图委托,如下图所示,但未能加载屏幕,也无法为此创建扩展图,请查看下面的代码,也可帮助我解决此问题

提前感谢,

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>