在账单和调整屏幕中,我需要将项目和任务设置为有条件地启用

In the Bills and Adjustment screen I need to set Project and Task to be conditionally enabled

我对“账单和调整”屏幕进行了自定义,我需要启用网格部分中的项目和任务,超出源代码中指定的范围。

为此,我使用了重写的 RowSelected 事件,但这似乎不起作用。这里的附加上下文是审批图设置发挥作用。

这是覆盖我认为可行但行不通的 RowSelected 事件的代码:

    protected void APInvoice_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected InvokeBaseHandler)
    {
        if (InvokeBaseHandler != null)
            InvokeBaseHandler(cache, e);

        var apinv = (APInvoice)e.Row;

        if (apinv != null)
        {

            APRegister apreg = PXSelect<APRegister, Where<APRegister.refNbr, Equal<Required<APRegister.refNbr>>>>.Select(Base, apinv.RefNbr);

            if (apreg.Released != true)
            {

                PXUIFieldAttribute.SetEnabled<APTran.projectID>(Base.Transactions.Cache, null, true);
                PXUIFieldAttribute.SetEnabled<APTran.taskID>(Base.Transactions.Cache, null, true);
            }
        }
    }

有人可以解释为什么这不启用这些字段吗?有没有其他方法可以做到这一点(除了完全复制源代码中的 RowSelected 事件)?

非常感谢...

不确定您所指的缓存是否在同一个 'state'(因为缺少更好的词)。尝试将 Base.tran... 换成您收到的 PXCache“缓存”

 protected void APInvoice_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected InvokeBaseHandler)
    {
        try
           {
                if (InvokeBaseHandler != null)
                InvokeBaseHandler(cache, e);
                PXUIFieldAttribute.SetEnabled<APTran.projectID>(cache, null, true);
                PXUIFieldAttribute.SetEnabled<APTran.taskID>(cache, null, true);
           }
    catch(System.Exception) {}
    }

每个 Acumatica 支持:

“我已经在 20R102 和 20R109 上测试过了。 它只适用于后者,这意味着这很可能是一个错误。

我会与工程人员核实这一点,但我知道一些 APInvoice 错误已从 20R104 开始解决。“