Acumatica 如何在处理表单中传递用户定义字段

问题描述 投票:0回答:1

我想在标记为 PO(采购到订单)的销售订单中填写采购订单中的 2 个字段(一个来自 SOOrderExt,第二个来自 SOLineExt)。 如何使用处理表格“创建采购订单”(PO.50.50.00) 来执行此操作

acumatica user-defined
1个回答
0
投票

您需要覆盖

FindOrCreatePOOrder
图表上的
FindOrCreatePOLine
POCreate
。 在
FindOrCreatePOOrder
中,新的poOrder还没有在缓存中,它只是一个简单的对象,所以你无法获取它的扩展名。您必须在
FindOrCreatePOLine
中为您的新采购订单设置代理。

using PX.Data;
using PX.Objects.CS;
using PX.Objects.PO;
using PX.Objects.SO;

namespace PX.Objects.PO 
{
    // Acuminator disable once PX1016 ExtensionDoesNotDeclareIsActiveMethod extension should be constantly active
    public class POCreateExt : PXGraphExtension<POCreate>
    {
        private int? AgenceFromSO;
    
        public delegate POOrder FindOrCreatePOOrderDelegate(DocumentList<POOrder> created, POOrder previousOrder,
            POFixedDemand demand, SOOrder soorder, POOrderEntry.SOLineSplit3 soline, bool requireSingleProject);

        [PXOverride]
        public virtual POOrder FindOrCreatePOOrder(DocumentList<POOrder> created, POOrder previousOrder,
            POFixedDemand demand, SOOrder soorder, POOrderEntry.SOLineSplit3 soline, bool requireSingleProject,
            FindOrCreatePOOrderDelegate baseMethod)
        {
            var poOrder = baseMethod.Invoke(created, previousOrder, demand, soorder, soline, requireSingleProject);
                    
            // Save UsrAgence for FindOrCreatePOLine
            var soOrderExt = soorder?.GetExtension<SOOrderExt>();
            AgenceFromSO = soOrderExt?.UsrAgence;
        
            return poOrder;
        }

        public delegate POLine FindOrCreatePOLineDelegate(POOrderEntry docgraph, DocumentList<POLine> ordered,
            string orderType,
            POFixedDemand demand, POOrderEntry.SOLineSplit3 soline);

        [PXOverride]
        public virtual POLine FindOrCreatePOLine(POOrderEntry docgraph, DocumentList<POLine> ordered, string orderType,
            POFixedDemand demand, POOrderEntry.SOLineSplit3 soline, FindOrCreatePOLineDelegate baseMethod)
        {
            // Set Agence on header here
            var poOrderExt = docgraph.Document.Current.GetExtension<POOrderExt>();
            poOrderExt.UsrAgence = AgenceFromSO;
        
            POLine poLine = baseMethod.Invoke(docgraph, ordered, orderType, demand, soline);
            SOLine soLineActual = SOLine.PK.Find(docgraph, soline.OrderType, soline.OrderNbr, soline.LineNbr);
            SOLineExt soLineExt = soLineActual.GetExtension<SOLineExt>();

            if (poLine != null)
            {
                decimal? price = soLineExt.UsrVendorPrice;
                docgraph.Transactions.SetValueExt<POLine.curyUnitCost>(poLine, price);
            }

            return poLine;
       }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.