如何修改采购订单上Create Prepayment操作按钮的逻辑?
定制Acumatica采购订单「Create Prepayment」操作的方案
不需要直接修改CodeRepository.xml文件,Acumatica支持通过**图扩展(Graph Extension)**实现该操作的定制,完全无需改动系统原生XML文件,这也是符合Acumatica开发最佳实践的方式。
具体实现步骤
- 第一步:创建
POOrderEntry的图扩展,重写CreatePrepayment方法
在自定义项目中创建继承自PXGraphExtension<POOrderEntry>的类,利用PXOverride特性覆盖原有操作逻辑。示例代码如下:public class POOrderEntryExt : PXGraphExtension<POOrderEntry> { [PXOverride] public void CreatePrepayment(Action baseMethod) { // 执行原方法的前置必要操作,比如保存当前采购订单 Base.Save.Press(); // 初始化预付款页面图实例 var target = PXGraph.CreateInstance<APInvoiceEntry>(); var prepaymentExt = target.GetExtension<APInvoiceEntryExt.Prepayments>(); // 插入你的定制逻辑,比如修改预付款字段、添加自定义校验、调整关联规则等 // 示例:给预付款添加定制化描述 prepaymentExt.AddPOOrderProc(Base.Document.Current, true); if (target.Document.Current != null) { target.Document.Current.Description = $"定制预付款:关联采购订单 {Base.Document.Current.OrderNbr}"; } // 弹窗打开定制后的预付款页面 throw new PXPopupRedirectException(target, "New Prepayment", true); } } - 第二步:部署并激活扩展
将该扩展类部署到Acumatica环境,系统会自动识别并替换原生的CreatePrepayment操作逻辑。
关键说明
- 避免修改系统原生文件:
CodeRepository.xml是Acumatica自动生成的元数据文件,直接修改会导致后续版本升级时定制内容丢失,且违反系统开发规范。 PXOverride特性的作用:该特性允许在扩展类中重写原图的方法,无需改动原生代码。你可以选择完全替换原逻辑,也可以在原逻辑的前后插入自定义处理逻辑。
内容的提问来源于stack exchange,提问作者George Arce
相关产品推荐
相关产品推荐

