繁体   English   中英

在行持续事件中更新 Acumatica 中的自定义字段

[英]Update a custom field in Acumatica in the Row Persisted Event

请耐心等待,因为我是 Acumatica 的新手。

在 Acumatica (2020.4) 中,我们在创建项目后调用外部 REST Web 服务。 API 返回一个我们想要存储在自定义字段中的 ID。 但是,我们不能在 Row Persisting 上执行此操作,因为我们有运行的查询需要表中的数据。

一旦触发了 Row Persisted 事件,我们如何更新字段并保存该值,或者是否有替代方法来调用 Row Persisting 事件中的数据?

这是我们目前所拥有的,但它只是在该领域设置了价值。

   protected void PMProject_RowPersisted(PXCache cache, PXRowPersistedEventArgs e)
   {
      var row = (PMProject)e.Row;
      // API Class that we call
      APICall.APIResult Rateres = new APICall.APIResult(); 
      Contract ctr = e.Row as Contract;
      ContractExt ctrExt = ctr.GetExtension<ContractExt>();
      Rateres.RateCalc(row.RateTableID);
      cache.SetValue<ContractExt.usrAPIRateID>(ctr, Rateres.contentid);
   }

提前致谢。

RowPersisted 事件在数据写入数据库时触发。 在做cache.SetValue的时候,你go回到刚刚保存的缓存中,再次修改数据。 您需要在您修改的缓存上执行 Persist 以将该数据刷新到数据库。

您可以设置该值并将其保存在以下内容中。

Caches[typeof(Contract)].SetValue<ContractExt.usrAPIRateID>(ctr, Rateres.contentid);
Caches[typeof(Contract)].Persist(ctr, PXDBOperation.Update);

我不使用 PMProject 和 Contract,所以我必须相信当您将 e.Row 作为 PMProject 和 Contract 时,您的样本的 rest 是正确的。 根据定义,e.Row 中的数据本质上是 PMProject。

此外,您应该考虑将代码放在 RowPersisted 中会导致每次在此图中保存记录时触发它,即使保存的数据与您的自定义字段无关。

有几种方法可以更新该值,Hugues Beauséjour 在他的回答What is the proper way to update values of DAC's retrieved via PXResultset? 中对此进行了很好的解释。 如果此处提供的示例无法解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM