设置Actions and Recommendations(Salesforce提供的标准元素),Salesforce上的文档说有两种方法,即Deployment和Process Builder(通过加类型为Create a Record,记录类型为RecordAction的action),其实,本质是对RecordAction的操作。明白了这一点,就完全可以用Flow或者Apex来实现了。
开始用Process Builder设置Actions and Recommendations时,发现一个问题。就是加进去的Flow,有些执行一遍之后,下次更新了记录后,这个Flow又会再次出现在Actions and Recommendations里,甚至有的Flow,没有去执行,下次更新了记录后,在Actions and Recommendations里又加了一条相同的Flow。原因就在于Process Builder无法检测是否已经有这个Flow(也就是说存在相同的RecordAction记录),只会机械地检测Process的触发条件(记录是不是第一次创建还是更新过),以及action的显示条件,如果符合显示条件,就加一条RecordAction记录。
后来写了个Apex方法,传入RecordAction的ActionDefinition列表(因为从Flow中调用,List<String>类型的参数,只能传一条string,所以只能用逗号连上多个string,然后在apex里用split方法得到数组),然后在RecordAction里检查是否存在,再返回不存在的ActionDefinition列表(因为只有不存在的才需要创建)。返回类型设置为List<List<String>>,首先,在Process Builder里调用apex,无法得到返回值,所以只能在Flow中调用,而在Flow中调用,虽然返回类型是List,却只能得到一个值,所以只好再套上一个List,这样就能在Flow那头得到一个collection,可以用Loop组件来循环了。这些其实也可用apex做,但考虑到这样一来,就需要较多的硬编码,所以还是把定义触发条件放在Flow里,只把检查RecordAction是否存在的功能用apex来做。
这样,做了一个Record triggered Flow,先调用上面的apex方法,得到不存在,需要创建的RecordAction列表,然后遍历列表,逐个检查是否满足创建条件,如果满足则建RecordAction记录(这个和Process Builder里基本一样)。这样就避免了重复建RecordAction记录,在Actions and Recommendations里出现重复项的问题。
但还有一个问题,就是无法知道Flow到底有没有执行过。因为在Actions and Recommendations里点开一个Flow并运行完成后,相应的RecordAction就被删除了,无从寻觅。后来发现有个RecordActionHistory对象,如果State域的值为Completed,说明已经执行过。
但是Salesforce的文档说:
The RecordActionHistory object is a big object. For this reason, when you use synchronous SOQL, SOAP, REST, Bulk, or Apex APIs to read this object, queries must follow a specific pattern or they fail.

这似乎意味着使用这个对象要小心,有可能对性能有影响。实际上,在Developer console里用soql查询RecordActionHistory,似乎也明显比其它对象慢。所以每次建RecordAction前,都去查RecordActionHistory,可能不一定可行。

补充:刚发现无法在trigger里通过apex查询RecordActionHistory,但是可以用Flow的Get Records元素来查(但也不是一直行,相当tricky)。

另外在调试时还发现一个问题,在比较传进去的RecordAction的ActionType域的值和一个String类型时,提示出错:

FlowPicklistValue cannot be cast to class java.lang.String

解决办法是用String.valueOf()方法,将这个域的值转成String。这也可算是Salesforce的bug。

Salesforce学习笔记之Actions and Recommendations的更多相关文章

  1. Salesforce学习笔记之Actions and Recommendations(续)

    上次对这个Actions and Recommendations进行了初步研究,因为一些问题没有得到很好的解决,又花了很多时间,终于得到了一个比较好的解决方案.小结一下. 1. 生成Actions a ...

  2. Caliburn.Micro学习笔记(二)----Actions

    Caliburn.Micro学习笔记目录 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions, ...

  3. Salesforce学习笔记之代码若干

    有几段试验性的代码因为公司要更新沙盒,删除了.在本地虽然还保存了副本,但怕以后刷新时误删,所以贴一份在这里,以便需要时拷贝. 1.用aura组件包装一个flow foo.cmp: <aura:c ...

  4. Salesforce学习笔记之吐槽

    迄今感到的几个不方便 1. SOQL里没有SELECT * ,只好根据参考手册和用vs code的一个插件Schema Explorer来辅助生成SELECT语句. 2. SOQL不支持注释,Deve ...

  5. Salesforce学习笔记(一)

    Force平台简介 一.Force平台应用程序的优点1.以数据为中心的应用程序(一个对象就是一个数据库表) 由于该平台以数据库为中心,它让你能够编写以数据为中心的应用程序.以数据为中心的应用程序是基于 ...

  6. 58、salesforce学习笔记(五)

    Set集合 Set<String> set1 = new Set<String>(); set1.add('1'); set1.add('2'); Set<String& ...

  7. 56、salesforce学习笔记(三)

    Date类型 Datetime nowDatetime = Datetime.now(); Datetime datetime1 = Datetime.newInstance(2015,3,1,13, ...

  8. 54、salesforce学习笔记(一)

    Decimal priceDecimal = -4.50; System.debug('小数的绝对值为:'+priceDecimal.abs()); System.debug('priceDecima ...

  9. Salesforce学习笔记之lwc

    1.在Flow中使用Lightning Web Component(lwc)时,发现一个问题.给这个组件设置了一个输入参数,其值取自前一个Screen.第一次运行时,参数的值正确,但是如果这时退回前一 ...

随机推荐

  1. luoguP1036 选数 暴力AC题解

    luoguP1036 选数 暴力AC题解(非正解) 俗话说得好:暴力出奇迹,打表拿省一. 对于一些暴力就能拿分的题,暴力就好啦QWQ 题目描述   输入格式 输出格式 输入输出样例 定义变量 我们令输 ...

  2. Java基础之常用知识点博客汇总

    正则: 正则表达式 :https://www.cnblogs.com/lzq198754/p/5780340.html 正则表达式大全:https://blog.csdn.net/zpz2411232 ...

  3. Pycharm远程解释器SFTP开发和调试

    转载:https://blog.csdn.net/ll641058431/article/details/53049453 使用PyCharm进行远程开发和调试 你是否经常要在Windows 7或MA ...

  4. 【vagrant】第一次安装添加box报错:The box failed to unpackage properly....

    报错信息 The box failed to unpackage properly. Please verify that the box file you're trying to add is n ...

  5. pandas之表格样式

    在juoyter notebook中直接通过df输出DataFrame时,显示的样式为表格样式,通过sytle可对表格的样式做一些定制,类似excel的条件格式. df = pd.DataFrame( ...

  6. Microsoft Cloud App Security 微软的云应用安全

    1.概述 微软2015年收购的一家云安全创业公司 Adallom 正式推出产品,同时更名为微软 Cloud App Security.Adallom 成立于 2012年,是一家 SaaS 云安全公司, ...

  7. SpringBoot2 整合MinIO中间件,实现文件便捷管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.MinIO简介 1.基础描述 MinIO是一个开源的对象存储服务.适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...

  8. 最长公共子序列dp入门

    #include <iostream> #include <string> #include <string.h> #include <vector> ...

  9. vue多个路由复用同一个组件的跳转问题(this.router.push)

    因为router-view传参问题无法解决,比较麻烦. 所以我采取的是@click+this.router.push来跳转 但是现在的问题是跳转后,url改变了,但是页面的数据没有重新渲染,要刷新才可 ...

  10. Python os.close() 方法

    概述 os.close() 方法用于关闭指定的文件描述符 fd.高佣联盟 www.cgewang.com 语法 close()方法语法格式如下: os.close(fd); 参数 fd -- 文件描述 ...