Acumatica 2021R2下OpportunityMaint无CreateSalesOrder动作问题咨询
适配Acumatica 2021R2商机转销售订单自定义逻辑方案
问题原因
Acumatica 2021R2对商机模块的通用逻辑做了抽象重构,原来OpportunityMaint图中定义的CreateSalesOrder方法被迁移到了抽象扩展类PX.Objects.CR.Extensions.CRCreateSalesOrder中,OpportunityMaint对应的具体业务实现由该抽象类的派生扩展完成,因此直接在OpportunityMaint的图扩展中重写该方法会提示不存在。
解决方案
你需要针对CRCreateSalesOrder针对OpportunityMaint的具体实现扩展做重写,示例代码如下:
// 扩展类需要继承自 PXGraphExtension<目标扩展类, 主图类型> public class CRCreateSalesOrderExt : PXGraphExtension<CRCreateSalesOrder<OpportunityMaint, CROpportunity, CRCreateSalesOrderFilter>, OpportunityMaint> { public delegate IEnumerable createSalesOrderDelegate(PXAdapter adapter); [PXOverride] public virtual IEnumerable CreateSalesOrder(PXAdapter adapter, createSalesOrderDelegate baseMethod) { PXTrace.WriteInformation("商机转销售订单自定义逻辑触发"); PXGraph.InstanceCreated.AddHandler<SOOrderEntry>((graph) => { // 自定义SOOrder头字段赋值逻辑 graph.RowInserted.AddHandler<SOOrder>((sender, e) => { SOOrder order = (SOOrder)e.Row; SOOrderExt orderExt = PXCache<SOOrder>.GetExtension<SOOrderExt>(order); orderExt.UsrCustomOne = "Howdy"; }); // 新增SOLine行默认值填充逻辑(适配你需要的商机Products字段同步需求) graph.RowInserted.AddHandler<SOLine>((sender, e) => { SOLine line = (SOLine)e.Row; // 此处可从Base.CurrentCROpportunity获取当前商机关联的Products数据,赋值给SOLine对应字段即可 // SOLineExt lineExt = PXCache<SOLine>.GetExtension<SOLineExt>(line); // lineExt.UsrCustomField = 对应商机产品值; }); }); return baseMethod(adapter); } }
注意事项
- 扩展类的泛型顺序不能错,第一个泛型参数是要扩展的
CRCreateSalesOrder实例,第二个是主图OpportunityMaint类型 - 可通过
Base直接访问当前OpportunityMaint图的上下文数据,通过Base1访问CRCreateSalesOrder扩展的内置属性和方法
内容的提问来源于stack exchange,提问作者TuDictador
相关产品推荐
相关产品推荐

