Acumatica销售订单相关项对话框业务逻辑定制可行性咨询
解决方案:Acumatica销售订单「相关项」对话框定制
针对你提出的两个定制需求,以及直接修改字段属性未生效的问题,以下是具体实现方案:
1. 强制将相关项价格设为0
直接修改字段UI属性(如默认值)无法生效,因为Acumatica加载相关项时会通过内置价格逻辑(从价格列表、库存默认价格取值)自动填充价格,后台逻辑优先级高于UI设置。需通过事件处理强制覆盖值:
public class SOLineRelatedItemsExtension : PXGraphExtension<SOLineRelatedItems> { protected void SOLineRelatedItem_RowInserting(PXCache cache, PXRowInsertingEventArgs e) { SOLineRelatedItem relatedItem = e.Row as SOLineRelatedItem; if (relatedItem != null) { // 强制覆盖本位币和原币价格为0 cache.SetValueExt<SOLineRelatedItem.curyUnitPrice>(relatedItem, 0m); cache.SetValueExt<SOLineRelatedItem.unitPrice>(relatedItem, 0m); } } protected void SOLineRelatedItem_RowSelected(PXCache cache, PXRowSelectedEventArgs e) { SOLineRelatedItem relatedItem = e.Row as SOLineRelatedItem; if (relatedItem != null) { // 确保选中行价格保持为0 cache.SetValueExt<SOLineRelatedItem.curyUnitPrice>(relatedItem, 0m); cache.SetValueExt<SOLineRelatedItem.unitPrice>(relatedItem, 0m); } } }
2. 根据当前SoLine分支预筛选仓库网格
在对话框初始化时,获取父SOLine的分支ID,给仓库字段添加筛选条件,仅展示对应分支的仓库:
public class SOLineRelatedItemsExtension : PXGraphExtension<SOLineRelatedItems> { public override void Initialize() { base.Initialize(); SOLine parentLine = Base.ParentDocument.Current as SOLine; if (parentLine != null && parentLine.BranchID != null) { // 给仓库选择器添加分支筛选条件 PXSelectorAttribute.SetFilter<SOLineRelatedItem.siteID>( Base.SOLineRelatedItem.Cache, typeof(InventorySite.branchID).IsEqual(parentLine.BranchID) ); } } }
关于字段属性修改无效的说明
Acumatica的字段值填充逻辑优先级为:后台业务事件(如价格引擎、数据插入事件)> 数据绑定公式 > UI属性设置。你直接修改字段默认值或显示属性,无法覆盖系统内置的价格计算逻辑,因此必须通过C#事件处理在数据加载/插入阶段强制干预字段值。
内容的提问来源于stack exchange,提问作者Lionel PARIS
相关产品推荐
相关产品推荐

