【问题标题】:How do you update a new contact with data from an external service?如何使用来自外部服务的数据更新新联系人?
【发布时间】:2020-10-14 14:45:14
【问题描述】:

我正在使用 Salesforce Lightning 模式并希望使用配置而非代码方法。我定义了一个外部服务。

我试图实现的场景如下:

  1. 用户在 Salesforce 中创建联系人
  2. 使用新联系人中的一些数据自动调用外部 Web 服务
  3. 从外部服务检索相关数据
  4. 使用数据更新联系人

我的第一次尝试是创建一个在创建新联系人实体时激活的记录触发流。然后,流程能够在触发调用我的外部服务的操作之前分配相关变量。我遇到的问题是出现错误“'您有未提交的工作待处理。请在调用之前提交或回滚'错误”导致我看到这篇文章:https://help.salesforce.com/articleView?id=000328873&type=1&mode=1

所以我理解的问题是我无法在由联系人创建触发的流程中调用外部服务。

好的

然后我研究了创建一个可以调用 Flow 的 Process。该过程是启动“当记录更改时”并且该记录设置为创建的联系人记录的过程。然后该进程应该调用我的 Flow 来执行实际的外部服务调用。

  1. 我使用这种方法是否正确?
  2. 如何将变量信息从流程传递到流?

感谢您的任何见解

【问题讨论】:

    标签: salesforce salesforce-lightning


    【解决方案1】:

    存在限制,因为您正在创建一条新记录 = 您暂时锁定了数据库表(或者可能不是整个表,可能只是 1 行)。但是您不能将数据库作为人质,让操作等待长达 120 秒,直到它成功/失败/超时。外部系统调用必须是独立的、异步的操作。

    在流程构建器中有即时和基于时间的操作。尝试将您的流程设置为基于时间的流程,即使在创建联系人后将其设置为 0 分钟。或者也许在流程中也有做类似事情的方法,我已经有一段时间没有将它们用于严肃的事情了。

    【讨论】:

    • 感谢您的回复。在 Flow Builder 中,我可以创建一个在保存记录后运行的流。所以我本来希望在我的流程被调用时数据库锁已经被释放。但显然不是,因此我现在正在考虑使用流程来触发流程,而不是直接创建联系人来触发流程。我也会研究基于时间的选项。
    • 它已插入 = 已生成主键,一些自动编号(如 oracle 中的序列)递增,可能已填充审计表(字段历史跟踪)......但整个事务尚未提交。如果您的标注会出错,您会期望回滚,对吗?不希望发送电子邮件等
    • 我现在尝试使用流程(由联系人创建触发)来激发流程,并在您的建议中添加了 0 小时延迟。联系人创建正常,没有任何问题,但流程仍然出错,我收到电子邮件:发生错误:标注失败:标注不成功,因为与流程、流程或 Apex 操作相关的未提交的未提交更改。提交或回滚工作,然后重试。有关更多信息,请联系您的 Salesforce 管理员。 此时,我的流程非常简单,除了调用外部服务之外什么也不做。
    • 我还应该说,当我通过单击流设计器中的运行按钮单独运行流时,它可以完美地执行。
    • :/ 没有想法,抱歉。考虑交叉发布到 salesforce.stackexchange.com,如果你想要它而不需要任何编码,你可能会在那里有更多的运气。
    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多