如何根据其他实体上的自定义字段设置自定义字段?

时间:2019-03-22 23:45:32

标签: acumatica

我想使用BAccount的DAC扩展名上的一个复选框来选择客户时在Case上设置一个复选框。这是Business Account screen上的复选框。

这是Case screen上要在选择客户时要设置的字段。

我发现了一个堆栈溢出问题,其中将客户屏幕上的几个自定义字段复制到销售订单上的自定义字段。我试图将我的字段替换为代码,但无法使其工作。

这是我尝试过的。我不确定我缺少什么。

protected void CRCase_CustomerID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
{
  var crcase = e.Row as CRCase;
  if (crcase.CustomerID != null)
  {
    var customer = PXSelectorAttribute.Select<CRCase.customerID>(sender, crcase) as BAccountR;
    if (customer != null)
    {
      var customerExt = customer.GetExtension<BAccountExt>();
      var crcaseExt = crcase.GetExtension<CRCaseExt>();
      crcaseExt.UsrContractCustomer = customerExt.UsrSage100;
    }
  }
}

我不明白为什么使用BAccountR而不仅仅是BAccount。暂时都行不通。

我通过合并我在较早的帖子中收到的回复解决了该问题。我将最后两行修改如下:

      var customerExt = customer.GetExtension<BAccountExt>();
      //var crcaseExt = crcase.GetExtension<CRCaseExt>();
      //crcaseExt.UsrContractCustomer = customerExt.UsrSage100;
      sender.SetValueExt<CRCaseExt.usrContractCustomer>(crcase, customerExt.UsrSage100 != null);

所以这是我需要解决的最后一个问题。我在“企业帐户”屏幕上使用的复选框打开了一个新标签,其中显示了自定义字段。这些自定义字段是BAccount DAC DSDSage100的扩展。它类似于BAccount的扩展(称为客户)。在DSDSage100扩展中,有一个名为UsrContractCustomer的字段。那是我要读取的字段,并将“案例”字段设置为相同的值。 Sage 100 Tab如下所示。我的项目有一个using指令,但找不到对DSDSage100扩展的正确引用。

      var customerExt = customer.GetExtension<DSDSage100>();
      sender.SetValueExt<CRCaseExt.usrContractCustomer>(crcase, customerExt.UsrContractCustomer != null);

1 个答案:

答案 0 :(得分:0)

Acumatica提供了答案。当我使用自定义表(DSDSage100,类似于“客户是BAccount DAC的扩展”的方式)“扩展了BAccount DAC”时,它是它自己的DAC。解决方案是:

DSDSage100 mydac = PXSelect<DSDSage100, Where<DSDSage100.bAccountID, Equal<Required<DSDSage100.bAccountID>>>>.Select(Base, crcase.CustomerID); 
sender.SetValueExt<CRCaseExt.usrContractCustomer>(crcase, mydac.UsrContractCustomer != null);

感谢您的帮助和支持。