如何在Acumatica中按条件阻止销售订单添加新SOLines
在Acumatica中阻止销售订单添加新行的正确实现方法
你的代码无法生效的核心问题是:在SOLine_RowInserting事件中调用Base.Transaction.Delete(row)没有意义——此时行还未被插入到缓存或数据库中,Delete操作无法作用于不存在的行。
正确的做法是在RowInserting事件中取消插入操作,并给用户明确的错误提示,具体实现如下:
protected void SOLine_RowInserting(PXCache cache, PXRowInsertingEventArgs e) { var row = (SOLine)e.Row; if (row == null) return; // 替换为你的实际业务判断条件 bool condition = /* 示例:Base.Document.Current.OrderType == "SO" && Base.Document.Current.Status == "C" */; if (condition) { // 取消新行的插入操作 e.Cancel = true; // 在界面上显示错误提示,告知用户阻止原因 cache.SetError(row, "无法添加新行:订单已关闭,不允许新增行"); } }
关键说明
e.Cancel = true:直接终止当前行的插入流程,彻底阻止行被添加到缓存和数据库cache.SetError():给当前行添加错误标记,界面会显示红色提示信息,让用户清楚操作被拦截的原因- 条件逻辑需根据实际需求编写,比如检查订单状态、已添加行的数量、特定商品限制等
内容的提问来源于stack exchange,提问作者AcumaticaZ
相关产品推荐
相关产品推荐

