我在“销售订单”表单上有自定义代码,无法编辑SOLine说明,除非它是特定的SOLINE代码。我看到我的自定义代码已经到达,但似乎其他东西覆盖了我的逻辑,在禁用它后启用了对字段的编辑。我想知道是否有预定义的自动化可能会在销售订单屏幕上执行此操作,或者是否有其他地方我应该寻求阻止此行为。
//我有调试代码验证RowSelected和SetEnabled是否开始调用
public class SOOrderEntry_Extension:PXGraphExtension {
#region Event Handlers
protected void SOLine_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected InvokeBaseHandler)
{
if(InvokeBaseHandler != null)
InvokeBaseHandler(cache, e);
var row = (SOLine)e.Row;
if(row != null && row.InventoryID.HasValue) {
//Only allow editing of parts description if the partno is 'NOTE'
InventoryItem inventoryItem = PXSelect<InventoryItem, Where<InventoryItem.inventoryID, Equal<Required<InventoryItem.inventoryID>>>>.Select(this.Base, row.InventoryID);
if(inventoryItem.InventoryCD == "NOTE") {
PXUIFieldAttribute.SetEnabled<SOLine.tranDesc>(cache, row, true);
} else {
PXUIFieldAttribute.SetEnabled<SOLine.tranDesc>(cache, row, false);
}
}
}
}
答案 0 :(得分:1)
不幸的是,由于为销售订单屏幕配置了自动化步骤, RowSelected 处理程序对“行描述”列没有任何影响:
为了使行描述保持打开状态以进行编辑,您应该更改许多自动化步骤,禁用销售订单上的整个文档详细信息网格,并订阅 SOOrder的 RowSelected 处理程序 DAC允许编辑 SOOrder 和 SOLine DAC的缓存级别。以下是为 已完成 销售订单启用行描述所需的更改(如有必要,应对为销售订单屏幕定义的其他自动化步骤进行类似更改):
订阅 SOOrder_RowSelected 处理程序,允许编辑 SOOrder 和 SOLine DAC的缓存级别:
public class SOOrderEntryExt : PXGraphExtension<SOOrderEntry>
{
public void SOOrder_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
{
SOOrder order = e.Row as SOOrder;
if (order != null && order.Status == SOOrderStatus.Completed)
{
sender.AllowUpdate = true;
Base.Transactions.Cache.AllowUpdate = true;
}
}
}
修改销售订单&#39; SO已完成自动化步骤以打开行说明进行编辑。除了启用了行描述之外,还需要启用至少一个SOOrder字段,否则保存按钮将永远不会对已完成的销售订单启用: