ARInvoices行选中事件下Invoices界面按钮Enable/Disable失效咨询
我来帮你排查下这个问题,在Acumatica里处理toolbar按钮的启用/禁用逻辑,尤其是关联Header自定义字段的场景,常见的几个关键点需要逐一验证:
确认按钮的AutoCallBack与字段回发配置
首先检查你新增的toolbar按钮是否开启了AutoCallBack,同时确保Header的自定义字段设置了AutoPostBack=True。因为如果自定义字段值变化时不触发页面回发,服务器端的状态判断逻辑就不会执行。另外,按钮的AutoCallBack需要指定正确的CommandName和Target(比如设为页面整体或目标Grid),保证回发后能刷新按钮状态。调整事件绑定的时机与上下文
你提到在ARInvoices行选中事件中添加逻辑,但这个事件仅在行选中时触发,无法响应Header字段的主动修改。建议改用ARInvoice DAC的RowSelected事件来控制按钮状态,这个事件会在页面加载、字段变化回发时触发,能实时获取Header的最新值:protected virtual void ARInvoice_RowSelected(PXCache cache, PXRowSelectedEventArgs e) { ARInvoice invoice = e.Row as ARInvoice; if (invoice == null) return; // 替换为你的自定义字段判断逻辑 bool shouldEnable = invoice.UsrYourCustomField != null && invoice.UsrYourCustomField == "特定值"; // 找到目标toolbar按钮(替换为你的按钮ID) PXToolBarButton customBtn = Base.Toolbar.FindButton("btnYourCustomAction"); if (customBtn != null) { customBtn.Enabled = shouldEnable; } }注意要确保这段逻辑绑定到**ARInvoice(Header层DAC)**的事件上,而非ARTran(明细层DAC)。
验证缓存与字段绑定的正确性
确认你的自定义字段已经正确添加到ARInvoice DAC的缓存中,界面上字段的DataField属性也准确指向自定义字段的名称(比如UsrYourCustomField)。如果字段注册或绑定有误,RowSelected事件中获取到的字段值可能为null或旧值,导致状态判断失效。排查权限与系统默认逻辑的干扰
有时候按钮的启用状态会被Acumatica的权限系统覆盖,检查当前用户所属角色是否拥有该按钮的访问权限。另外,某些系统默认的toolbar逻辑可能会重置按钮状态,你可以在事件中添加cache.SetValueExt或者直接强制设置按钮的Enabled属性来覆盖默认行为。
内容的提问来源于stack exchange,提问作者Naveen B

