尝试在SO Line复选框字段上覆盖基本处理程序

时间:2019-04-11 15:55:55

标签: acumatica

我想覆盖“销售订单”表单上的“免费项目”逻辑。我有一个可以根据多个条件计算最终价格的函数,因此,我希望避免将其清除“单价”字段。

我创建了以下代码:

protected void SOLine_IsFree_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e, PXFieldUpdated InvokeBaseHandler)
{
  if(InvokeBaseHandler != null) InvokeBaseHandler(cache, e);

  SOLine row = e.Row as SOLine;
  // My Price calculation formula goes here.
}

这有效,但是当然,以下行运行默认代码:

if(InvokeBaseHandler != null) InvokeBaseHandler(cache, e);

但是,如果我消除了它,我可以选中该复选框(并且它可以工作),但是我永远都不能取消选中它。尝试取消选中它似乎无济于事。我尝试在代码中设置其值,认为可能是问题所在。还尝试复制默认运行的代码,什么也没做。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果在UI中禁用了IsFree字段,则要在RowSelected处理函数上检查该字段的SetEnable <>,并查看是否需要更改其行为。

请参见以下示例:

protected virtual void SOLine_RowSelected(PXCache sender, PXRowSelectedEventArgs e, PXRowSelected baseMethod)
{
   //Calling Base method
   if(basemethod != null)
        basemethod(sender, e);
   ................................................
   PXUIFieldAttribute.SetEnabled<SOLine.isFree>(sender, e.Row, !autoFreeItem && row.InventoryID != null);                                                    
}