Acumatica版本升级后在Process Invoice and Memos(SO505000)页面释放单据时获取CustomerID与CuryOrigDocAmt的方法咨询
解决Acumatica批量释放发票时获取单据信息的问题
在Acumatica Build 21.201.0086版本中,当使用**Process Invoice and Memos(SO505000)**页面批量释放发票时,Base.Document.Current为空是预期的设计行为——因为批量处理场景下系统不会将当前处理的单据赋值给Document.Current(这一属性仅在单个单据页面如SO303000中生效)。
要获取批量处理中每个单据的CustomerID和CuryOrigDocAmt,你需要从PXAdapter的Records集合中提取当前待处理的发票记录,具体修改代码如下:
namespace JVDnamespace { public class JVDSOInvoiceEntry_Extension : PXGraphExtension<SOInvoiceEntry> { public static bool IsActive() => true; #region Event Handlers public delegate IEnumerable ReleaseDelegate(PXAdapter adapter); [PXOverride] public IEnumerable Release(PXAdapter adapter, ReleaseDelegate baseMethod) { // 遍历所有待释放的发票记录 foreach (ARInvoice invoice in adapter.Get<ARInvoice>()) { if (invoice.CustomerID != null && invoice.CuryOrigDocAmt != null) { setCreditLimit(invoice.CustomerID.Value, invoice.CuryOrigDocAmt.Value); } } return baseMethod(adapter); } } }
关键说明:
adapter.Get<ARInvoice>()会返回SO505000页面中选中的所有待释放发票记录,遍历集合即可逐个处理每个单据的信息。- 这种方式同时兼容单个单据释放(SO303000)和批量释放场景,因为在单个页面时,adapter的Records集合只会包含当前打开的那一条记录。
这样修改后,无论你是从SO303000单独释放,还是从SO505000批量处理,都能正确获取到单据的CustomerID和CuryOrigDocAmt来执行你的setCreditLimit逻辑。
内容的提问来源于stack exchange,提问作者JvD
相关产品推荐
相关产品推荐

