如何在Acumatica中重写Prepare Payment[AP503000]的Create Payment方法
解决方案:在Acumatica 2022 R1中设置ExtRefNbr
1. 重写Prepare Payment(AP503000)的Process方法后设置ExtRefNbr
AP503000对应的Graph是APPaymentEntry,其中的Process方法虽为普通业务方法,但可通过创建GraphExtension结合PXOverride特性重写,在原方法执行完成后添加自定义逻辑设置ExtRefNbr。
示例代码:
public class APPaymentEntryExt : PXGraphExtension<APPaymentEntry> { public delegate void ProcessDelegate(List<APPayment> list); [PXOverride] public void Process(List<APPayment> list, ProcessDelegate baseMethod) { // 先执行原Process方法 baseMethod(list); // Process完成后批量设置ExtRefNbr foreach (APPayment payment in list) { APPayment updatedPayment = Base.Payments.SelectSingle(payment.BAccountID, payment.RefNbr); if (updatedPayment != null) { updatedPayment.ExtRefNbr = "自定义外部参考号"; // 替换为实际业务逻辑 Base.Payments.Update(updatedPayment); } } Base.Actions.PressSave(); } }
2. 在Release Payments(AP505200)的Process方法前设置ExtRefNbr
AP505200对应的Graph是APPaymentRelease,同样可通过GraphExtension重写Process方法,在原方法执行前插入ExtRefNbr的设置逻辑。
示例代码:
public class APPaymentReleaseExt : PXGraphExtension<APPaymentRelease> { public delegate void ProcessDelegate(List<APPayment> list); [PXOverride] public void Process(List<APPayment> list, ProcessDelegate baseMethod) { // Process执行前批量设置ExtRefNbr foreach (APPayment payment in list) { APPayment updatedPayment = Base.Payments.SelectSingle(payment.BAccountID, payment.RefNbr); if (updatedPayment != null) { updatedPayment.ExtRefNbr = "自定义外部参考号"; // 替换为实际业务逻辑 Base.Payments.Update(updatedPayment); } } Base.Actions.PressSave(); // 执行原Process方法 baseMethod(list); } }
关键说明
PXOverride是Acumatica扩展普通业务方法的标准方式,无需修改系统原生代码,完全兼容版本升级。- 更新ExtRefNbr后必须调用
Base.Actions.PressSave(),确保修改持久化,避免后续流程无法读取到更新后的值。 - 可根据业务需求替换示例中的固定值,比如关联单据字段、生成自动流水号等动态逻辑。
内容的提问来源于stack exchange,提问作者George Arce
相关产品推荐
相关产品推荐

