如何基于Acumatica中的另一个字段自动填充一个字段?

时间:2019-06-18 13:34:27

标签: field default acumatica populate

我正在尝试根据另一个字段自动填充一个字段。我有一个用于合同的选择器字段,并且为主要经理创建了一个经理1字段,该字段在“合同”屏幕中捕获。

打开Manager 1的选择器字段时,我可以获得正确的结果。它将填充合同代码和与其相关联的Manager。但是,我希望它在选择合同后自动填写该字段。我尝试使用PXDefault,但没有任何运气。到目前为止,下面的代码是我一直在工作的代码:

[PXInt] 
[PXUIField(DisplayName="Manager 1")] 
[PXSelector(typeof(Search2<PX.Objects.CR.BAccount.bAccountID, 
  InnerJoin<JPMContract, 
  On<JPMContract.contractMgrBAccountID, 
  Equal<PX.Objects.CR.BAccount.bAccountID>>>>), 
  typeof(JPMContract.contractCode), 
  typeof(PX.Objects.CR.BAccount.acctCD), 
  typeof(PX.Objects.CR.BAccount.acctName), 
  SubstituteKey = typeof(PX.Objects.CR.BAccount.acctCD), 
  DescriptionField = typeof(PX.Objects.CR.BAccount.acctName))]

同样,当我打开选择器字段并选择相应的结果时,我得到了想要的结果,但是一旦选择了合同,我希望它为我自己做。有什么建议吗?

更新: 我得到它只返回选择器中需要的一个结果,但是它仍然没有在字段中填充该结果。

[PXInt]
[PXSelector(typeof(Search2<PX.Objects.CR.BAccount.bAccountID,
   InnerJoin<JPMContract,
   On<JPMContract.contractMgrBAccountID,
   Equal<PX.Objects.CR.BAccount.bAccountID>>>,
   Where<JPMContract.jPMContractID, Equal<Current<JPMSubContract.jPMContractID>>>>),
   typeof(JPMContract.contractCode),
   typeof(PX.Objects.CR.BAccount.acctCD),
   typeof(PX.Objects.CR.BAccount.acctName),
   SubstituteKey = typeof(PX.Objects.CR.BAccount.acctCD),
   DescriptionField = typeof(PX.Objects.CR.BAccount.acctName))]
[PXDefault(typeof(Search2<PX.Objects.CR.BAccount.bAccountID,
   InnerJoin<JPMContract,
   On<JPMContract.contractMgrBAccountID,
   Equal<PX.Objects.CR.BAccount.bAccountID>>>,
   Where<JPMContract.jPMContractID, Equal<Current<JPMSubContract.jPMContractID>>>>))]
[PXUIField(DisplayName="Manager 1")]

1 个答案:

答案 0 :(得分:1)

public sealed class DACExt : PXCacheExtension<PrimaryDAC>
{
    // For this field in aspx file set CommitChanges=true
    [PXDBInt]
    [PXSelector(typeof(Search<Table.field0>))]
    [PXUIField(DisplayName = "Field 1")]
    public int? Field1 { get; set; }
    public abstract class field1 : IBqlField { }

    [PXInt]
    //This line auto-populate a field based on Field1 field
    [PXDefault(typeof(Search<Table1.field2, Where<Table1.field0, Equal<Current<Table.field0>>>>), PersistingCheck = PXPersistingCheck.Nothing)]
    [PXUIField(DisplayName = "Field 2", Enabled = false)]
    public int? Field2 { get; set; }
    public abstract class field2 : IBqlField { }
}


public virtual void PrimaryDAC_Field1_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
{
    if (e.Row is PrimaryDAC row)
    {
        sender.SetDefaultExt<DACExt.field2>(e.Row);
    }
}