【问题标题】:Making a custom field editable based on the editable state of another field in Acumatica根据 Acumatica 中另一个字段的可编辑状态使自定义字段可编辑
【发布时间】:2017-09-22 11:33:01
【问题描述】:

我正在尝试根据现有字段的可编辑状态启用和禁用新的自定义字段。我不知道何时启用其他字段的确切规则。我试图检测不同事件中其他字段的启用状态(例如 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;
    }

仅供参考,我试图模仿的字段启用状态是 LotSerialNbr 用于 SOShipLine 和 SOShipLineSplit,它出现在 Shipments 详细信息选项卡和 Allocations 对话框中。

【问题讨论】:

  • 仅供参考,我试图模拟的字段启用状态是 LotSerialNbr 用于 SOShipLine 和 SOShipLineSplit,它显示在“发货详细信息”选项卡和“分配”对话框中。
  • 这类事情可以有用地添加到问题中。尝试“编辑”链接:-)
  • 要可编辑,字段必须是可编辑的,并且行也必须允许更新 (ViewName.AllowUpdate)。当您的字段显示为可编辑时,整行是否被禁用(行中的任何字段都不能更改)? RowSelected 事件也应该可以工作,但如果您正在执行图形扩展,您可能需要在基本行选择之后运行您的逻辑?
  • 该行是可更新的,而另一个字段有时是可编辑的,我试图模仿。 RowSelected 事件在图形扩展中,是的,我试图确定是否启用了一个字段。我会在你提到的基本 RowSelected 之后尝试检查它。
  • 我向我的 RowSelected 处理程序添加了基本处理程序的调用,但这似乎没有帮助。这次我确实注意到,对于页面的初始加载,现有字段为 Enabled=true,但随后再次加载同一页面 Enabled=false。所以禁用可能发生在 RowSelected 之后?因此,第二次触发我的扩展 RowSelected 时,它可以将我的自定义字段 Enabled=false 设置为匹配;但是,页面上的新字段的行为方式仍然相同,并且可以编辑,就好像它没有做任何事情一样。也许在 RowSelected 中设置它为时已晚?

标签: acumatica


【解决方案1】:

啊哈,我终于能够通过在其 FieldSelecting 处理程序中处理自定义字段来影响它的可编辑状态。当我检查另一个字段的启用状态并在 FieldSelecting 中设置我的新字段的启用状态时,它现在模仿我最初想要的;以及初始页面加载。以下是任何有兴趣的人的代码...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多