在Bills and Adjustment屏幕中,我需要将Project和Task设置为有条件地启用

问题描述

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

为了做到这一点,我使用了一个重写的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,true);
            }
        }
    }

有人可以解释为什么这不能启用这些字段吗?有没有另一种方法(完全复制源代码中的RowSelected事件)?

非常感谢...

解决方法

不确定您要引用的缓存是否处于相同的“状态”(缺少更好的单词)。尝试将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,true);
           }
    catch(System.Exception) {}
    }
,

每个Acumatica支持:

“我已经在20R102和20R109上对此进行了测试。 它仅在以后才有效,这意味着这很可能是一个错误。

我将通过工程学对此进行检查,但我知道从20R104开始已解决了一些APInvoice错误。”