我正在尝试根据现有字段的可编辑状态启用和禁用新的自定义字段。我不知道启用或不启用其他字段的确切规则。我试图检测不同事件中其他字段的启用状态(例如RowSelecting,RowSelected),但其Enabled属性似乎始终为true,即使字段显示在网格中,也不能通过双击来编辑。有任何想法吗?我决定启用字段状态的方法是使用此代码...
protected bool? IsFieldEnabled(PXCache cache, object row, string fieldName)
{
var attr = cache.GetAttributesOfType<PXUIFieldAttribute>(row, fieldName).FirstOrDefault();
bool? isEnabled = null;
if (attr != null)
{
isEnabled = ((PXUIFieldAttribute)attr).Enabled;
}
return isEnabled;
}
仅供参考,我试图模仿的字段启用状态是用于SOShipLine和SOShipLineSplit的LotSerialNbr,它出现在“货件详细信息”选项卡和“分配”对话框中。
答案 0 :(得分:0)
啊哈,我终于能够通过在FieldSelecting处理程序中处理自定义字段的可编辑状态来影响它。当我在FieldSelecting中检查另一个字段的Enabled状态并设置我的新字段的Enabled状态时,它现在模仿我原来想要的;并且还有初始页面加载。以下是任何感兴趣的人的代码......
protected void SOShipLine_UsrMACID_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e, PXFieldSelecting InvokeBaseHandler)
{
if (InvokeBaseHandler != null)
{
InvokeBaseHandler(cache, e);
}
var row = (SOShipLine)e.Row;
bool? isSerialNumberEditable = IsFieldEditable(cache, row, "LotSerialNbr");
if (isSerialNumberEditable != null)
{
PXUIFieldAttribute.SetEnabled<SOShipLineExtension.usrMACID>(cache, row, isSerialNumberEditable.Value);
}
}
protected bool? IsFieldEditable(PXCache cache, object row, string fieldName)
{
var attr = cache.GetAttributesOfType<PXUIFieldAttribute>(row, fieldName).FirstOrDefault();
bool? isEnabled = null;
if (attr != null)
{
isEnabled = cache.AllowUpdate && ((PXUIFieldAttribute)attr).Enabled;
}
return isEnabled;
}