根据Acumatica

时间:2017-09-21 15:47:12

标签: acumatica

我正在尝试根据现有字段的可编辑状态启用和禁用新的自定义字段。我不知道启用或不启用其他字段的确切规则。我试图检测不同事件中其他字段的启用状态(例如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,它出现在“货件详细信息”选项卡和“分配”对话框中。

1 个答案:

答案 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;
    }