[英]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.