首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未保存到数据库中的用户定义字段的值

未保存到数据库中的用户定义字段的值
EN

Stack Overflow用户
提问于 2022-01-21 12:45:24
回答 3查看 108关注 0票数 0

我已经创建了一个审批过程,代码的一部分包括获得审批者的电子邮件(谁在公司树中(屏幕id: EP204061))。

检索审批者电子邮件的代码片段如下:

代码语言:javascript
复制
Contact contact = PXSelect<Contact, Where<Contact.contactID, Equal<Required<EPCompanyTreeMember.contactID>>>>.Select(Base, ePCompanyTreeMember.ContactID);
BAccountExt3 bAccountExt3 = row.GetExtension<BAccountExt3>();

if (ePCompanyTreeMember == null)
{
    bAccountExt3.UsrApproverEmail = "";
    cache.SetValueExt<BAccountExt3.usrApproverEmail>(row, bAccountExt3.UsrApproverEmail);
}

if (ePCompanyTreeMember != null)
{
    bAccountExt3.UsrApproverEmail = contact.EMail;
    cache.SetValueExt<BAccountExt3.usrApproverEmail>(row, bAccountExt3.UsrApproverEmail);
}

这些值被正确检索,但没有保存到数据库中。

有什么问题吗?

EN

回答 3

Stack Overflow用户

发布于 2022-01-21 14:49:29

在哪里设置ePCompanyTreeMember变量?

您的if语句是否应该引用联系人(如下所示)?

代码语言:javascript
复制
Contact contact = PXSelect<Contact, Where<Contact.contactID, Equal<Required<EPCompanyTreeMember.contactID>>>>.Select(Base, ePCompanyTreeMember.ContactID);
BAccountExt3 bAccountExt3 = row.GetExtension<BAccountExt3>();

if (contact == null)
{
    bAccountExt3.UsrApproverEmail = "";
    cache.SetValueExt<BAccountExt3.usrApproverEmail>(row, bAccountExt3.UsrApproverEmail);
}
else
{
    bAccountExt3.UsrApproverEmail = contact.EMail;
    cache.SetValueExt<BAccountExt3.usrApproverEmail>(row, bAccountExt3.UsrApproverEmail);
}

值得注意的是,您可以使用可选的链接和空合并来缩短代码,如下所示:

代码语言:javascript
复制
Contact contact = PXSelect<Contact, Where<Contact.contactID, Equal<Required<EPCompanyTreeMember.contactID>>>>.Select(Base, ePCompanyTreeMember.ContactID);
BAccountExt3 bAccountExt3 = row.GetExtension<BAccountExt3>();
// contact? effectively says if contact is null, then use null rather than trying .EMail on a null variable
// ?? says if the value on the left side of ?? is null, then use the value on the right side (empty string)
bAccountExt3.UsrApproverEmail = contact?.EMail ?? "";
cache.SetValueExt<BAccountExt3.usrApproverEmail>(row, bAccountExt3.UsrApproverEmail);
票数 0
EN

Stack Overflow用户

发布于 2022-01-22 19:51:51

您是在companytree主屏幕中调用此代码,还是您的代码/BLC包含EPCompanyTree作为视图?不确定是如何填充上述代码的。如果正在运行的屏幕不包含对ContactID的引用,那么这将永远不会被填充。

示例从Business屏幕或Customer屏幕上可以访问BAccount.ContactID,因为它包含在当前正在显示的记录的缓存中。

更多关于你是如何在哪里实现这一点的信息可以帮助我们提供一个更好的答案。

票数 0
EN

Stack Overflow用户

发布于 2022-01-29 08:54:05

另外,这段代码忽略了Cache.Update命令SetValueExt只做了两件事:

  1. 调用属性设置器
  2. 调用FieldVerifying和FieldUpdated事件处理程序。但它不会将缓存状态更改为更新,因此不会持久更改

只有当此代码来自此_RowUpdated缓存的BAccount处理程序(因此它已被标记为已更新)时,才能跳过此更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70801489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档