Acumatica 如何在PM301000屏幕上禁用两个字段的情况下保存记录

Acumatica 如何在PM301000屏幕上禁用两个字段的情况下保存记录,acumatica,acumatica-kb,Acumatica,Acumatica Kb,各位下午好, 我需要您的帮助,我想在PM301000项目屏幕的“详细信息”选项卡“成本预算”中记录一条或多条记录。 记录一条或多条记录时,必须禁用“采购订单标记”和“供应商标识”字段。当订单标记字段的条件等于true时 我使用了RowPersisting事件并将其禁用,但当我修改或离开注册表时,字段将再次启用 请帮助我或告诉我应该怎么做,我的代码如下 提前谢谢 namespace PX.Objects.PM { public class PMBudgetExt : PXCacheExte

各位下午好,

我需要您的帮助,我想在PM301000项目屏幕的“详细信息”选项卡“成本预算”中记录一条或多条记录。 记录一条或多条记录时,必须禁用“采购订单标记”和“供应商标识”字段。当订单标记字段的条件等于true时

我使用了RowPersisting事件并将其禁用,但当我修改或离开注册表时,字段将再次启用

请帮助我或告诉我应该怎么做,我的代码如下

提前谢谢

namespace PX.Objects.PM
{
    public class PMBudgetExt : PXCacheExtension<PX.Objects.PM.PMBudget>
    {
        #region UsrVendorID


        [PXDBInt]
        [PXUIField(DisplayName = "Vendor ID", Visibility = PXUIVisibility.Visible)]

        [PXDimensionSelectorAttribute("VENDOR", typeof(Search<VendorR.bAccountID, Where<VendorR.type, Equal<BAccountType.vendorType>,
                                        And<VendorR.status, Equal<BAccount.status.active>>>>), 
            typeof(VendorR.acctCD), new Type[] { typeof(VendorR.acctCD), typeof(VendorR.acctName) })]
        public virtual int? UsrVendorID { get; set; }
        public abstract class usrVendorID : PX.Data.BQL.BqlInt.Field<usrVendorID> { }
        #endregion

        #region UsrMarkforPO

        [PXDBBool()]
        [PXDefault(false)]
        [PXUIField(DisplayName = "Mark for PO")]  

        public virtual bool? UsrMarkforPO { get; set; }
        public abstract class usrMarkforPO : PX.Data.BQL.BqlBool.Field<usrMarkforPO> { }
        #endregion
    }
}

namespace PX.Objects.PM
{
    public class ProjectEntry_Extension : PXGraphExtension<ProjectEntry>
    {      
        #region Event Handlers       
        protected void PMCostBudget_RowPersisting(PXCache cache, PXRowPersistingEventArgs e)
        {
            PMCostBudget newRow = (PMCostBudget)e.Row;
            if (newRow == null) return;
            PMBudgetExt newRowE = PXCache<PMBudget>.GetExtension<PMBudgetExt>(newRow);

            if (Base.CostBudget.Cache.AllowUpdate == true)
            {
                if (newRowE.UsrMarkforPO == true)
                {
                    PXUIFieldAttribute.SetEnabled<PMBudgetExt.usrMarkforPO>(cache, newRow, false);
                    PXUIFieldAttribute.SetEnabled<PMBudgetExt.usrVendorID>(cache, newRow, false);                    
                }
            }
        }
        #endregion
    }
}
namespace PX.Objects.PM
{
公共类PMBudgetExt:PXCacheExtension
{
#乌斯维恩多里德地区
[PXDBInt]
[PXUIField(DisplayName=“Vendor ID”,Visibility=PXUIVisibility.Visible)]
[PXDimensionSelectorAttribute(“供应商”),类型(搜索),
typeof(VendorR.accctcd),新类型[]{typeof(VendorR.accctcd),typeof(VendorR.acctName)}]
公共虚拟int?UsrVendorID{get;set;}
公共抽象类usrVendorID:PX.Data.BQL.BqlInt.Field{}
#端区
#UsrMarkforPO地区
[PXDBBool()]
[默认设置(错误)]
[PXUIField(DisplayName=“标记采购订单”)]
公共虚拟bool?UsrMarkforPO{get;set;}
公共抽象类usrMarkforPO:PX.Data.BQL.BqlBool.Field{}
#端区
}
}
命名空间PX.Objects.PM
{
公共类ProjectEntry_扩展名:pxGrapherExtension
{      
#区域事件处理程序
受保护的无效PMCostBudget_行持久化(PXCache缓存,PXRowPersistingEventArgs e)
{
PMCostBudget newRow=(PMCostBudget)e.Row;
if(newRow==null)返回;
PMBudgetExt newRowE=PXCache.GetExtension(newRow);
if(Base.CostBudget.Cache.AllowUpdate==true)
{
if(newRowE.UsrMarkforPO==true)
{
PXUIFieldAttribute.SetEnabled(缓存、新行、false);
PXUIFieldAttribute.SetEnabled(缓存、新行、false);
}
}
}
#端区
}
}


行持久化事件仅在保存事件时执行。因此,它不适合设置字段状态。每次选择要在屏幕上显示的记录时,都会执行
RowSelected
事件,从而获得更好的结果。您应该设置每个回调的状态,无论它是启用还是禁用的。此外,事件应该在用于设置字段状态的同一DAC类型上声明,以便缓存对象匹配

    public void PMBudget_RowSelected(PXCache sender, PXRowSelectedEventArgs e, PXRowSelected del)
    {
      if (del != null)
      {
         del(sender, e);
      }

      bool isFieldEnabled = [your_condition];
      PXUIFieldAttribute.SetEnabled<PMBudget.field>(sender, e.Row, isFieldEnabled);
    }
public void PMBudget_row选中(PXCache发送方、PXRowSelectedEventArgs e、PXRowSelected del)
{
如果(del!=null)
{
del(发送者,e);
}
bool isFieldEnabled=[您的_条件];
PXUIFieldAttribute.SetEnabled(发送方,例如行,isFieldEnabled);
}