账单发布后如何启用 APTran 自定义字段

问题描述 投票:0回答:1

我在 APTran 上有两个自定义字段,法案发布后它们都变成了只读。

无论账单状态如何,这两个字段都需要随时可编辑。

在搜索并找到其他屏幕的类似示例后,我尝试为屏幕 AP301000 制作一个版本,但在法案发布后字段仍保持只读状态。

APTran DAC 扩展:

namespace CustomFields
{
  public class APTranExt : PXCacheExtension<PX.Objects.AP.APTran>
  {
    
    #region UsrCustomField1
    [PXDBString(50)]
    [PXUIField(DisplayName="Custom Field 1", Enabled = true)]
    public string UsrCustomField1 { get; set; }
    public abstract class usrCustomField1 : IBqlField { }
    #endregion

    #region UsrCustomField2
    [PXDBString(20)]
    [PXUIField(DisplayName="Custom Field 2", Enabled = true)]
    public string UsrCustomField2 { get; set; }
    public abstract class usrCustomField2 : IBqlField { }
    #endregion

  }
}

APInvoiceEntry 图形扩展:

namespace CustomFields
{
    public class APInvoiceEntry_Extension : PXGraphExtension<PX.Objects.AP.APInvoiceEntry>
    {
        #region Event Handlers

        public void APTran_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
            {
                APTran row = e.Row as APTran;
        
                if (row != null)
                {
                    APInvoice doc = Base.Document.Current;
        
                    if (doc != null && doc.Released == true)
                    {
                        PXUIFieldAttribute.SetEnabled<APTranExt.usrCustomField1>(sender, row, true);
                        PXUIFieldAttribute.SetEnabled<APTranExt.usrCustomField2>(sender, row, true);
                    }
                }
            }

        #endregion
    }
}

还尝试将 SetReadOnly 设置为 False,但这没有什么区别:

PXUIFieldAttribute.SetEnabled<APTranExt.usrCustomField1>(sender, row, true);
PXUIFieldAttribute.SetReadOnly<APTranExt.usrCustomField1>(sender, row, false);
PXUIFieldAttribute.SetEnabled<APTranExt.usrCustomField2>(sender, row, true);
PXUIFieldAttribute.SetReadOnly<APTranExt.usrCustomField2>(sender, row, false);
acumatica
1个回答
0
投票

在 APTran_RowSelected 处理程序中尝试此操作,我在 23R1 中测试了它。

问题是文档发布时事务缓存被禁用。

简单地再次启用它是不够的,因为它会启用 APTran 记录中的所有字段(第一行),因此我们需要禁用所有字段(第二行)。

sender.AllowUpdate = true; // it is disabled in APInvoice_RowSelected, you need to reenable here
PXUIFieldAttribute.SetEnabled(sender, row, false); // disable all fields
PXUIFieldAttribute.SetEnabled<APTranExt.usrCustomField1>(sender, row, true); // enable only your field
PXUIFieldAttribute.SetEnabled<APTranExt.usrCustomField2>(sender, row, true); // enable only your field
© www.soinside.com 2019 - 2024. All rights reserved.