销售订单 SOLines 有条件禁用的 tranDesc 被覆盖
Sales Order SOLines Conditionally Disabled tranDesc being overridden
我在销售订单表单上有自定义代码,除非它是特定的 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);
}
}
}
}
不幸的是,您的 RowSelected 处理程序将不会对行描述列产生影响,因为为销售订单屏幕配置自动化步骤的方式:
为了保持行描述打开以供编辑,您应该更改一些自动化步骤以禁用销售订单上的整个文档详细信息网格并订阅 RowSelected 处理程序 SOOrder DAC 允许编辑 SOOrder 和 SOLine DAC 的缓存级别。以下是为 completed 销售订单启用行描述所需的更改(如有必要,应对为销售定义的其他自动化步骤进行类似更改订单屏幕):
订阅 SOOrder_RowSelected 处理程序以允许在缓存级别编辑 SOOrder 和 SOLine DACs:
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;
}
}
}
修改销售订单' SO 已完成 自动化步骤打开行描述进行编辑。除了启用 Line Description 之外,还需要至少启用一个 SOOrder 字段,否则 Save 按钮将永远不会为已完成的销售订单启用:
我在销售订单表单上有自定义代码,除非它是特定的 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);
}
}
}
}
不幸的是,您的 RowSelected 处理程序将不会对行描述列产生影响,因为为销售订单屏幕配置自动化步骤的方式:
为了保持行描述打开以供编辑,您应该更改一些自动化步骤以禁用销售订单上的整个文档详细信息网格并订阅 RowSelected 处理程序 SOOrder DAC 允许编辑 SOOrder 和 SOLine DAC 的缓存级别。以下是为 completed 销售订单启用行描述所需的更改(如有必要,应对为销售定义的其他自动化步骤进行类似更改订单屏幕):
订阅 SOOrder_RowSelected 处理程序以允许在缓存级别编辑 SOOrder 和 SOLine DACs:
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; } } }
修改销售订单' SO 已完成 自动化步骤打开行描述进行编辑。除了启用 Line Description 之外,还需要至少启用一个 SOOrder 字段,否则 Save 按钮将永远不会为已完成的销售订单启用: