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



我想覆盖销售订单窗体上的"免费项目"逻辑。我有一个函数,它根据许多标准计算最终价格,因此我想避免让它清除"单价"字段。

我创建了以下代码:

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);

但是如果我消除它,我可以选中复选框(并且它有效),但我永远无法取消选中它。尝试取消选中它似乎无济于事。我尝试在代码中设置它的值,认为这可能是问题所在。还尝试复制默认情况下运行的代码,但什么都没有。

提前谢谢。

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

请参阅下面的示例:

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);                                                    
}

最新更新