Salesforce学习笔记之Actions and Recommendations
设置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的更多相关文章
- Salesforce学习笔记之Actions and Recommendations(续)
上次对这个Actions and Recommendations进行了初步研究,因为一些问题没有得到很好的解决,又花了很多时间,终于得到了一个比较好的解决方案.小结一下. 1. 生成Actions a ...
- Caliburn.Micro学习笔记(二)----Actions
Caliburn.Micro学习笔记目录 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions, ...
- Salesforce学习笔记之代码若干
有几段试验性的代码因为公司要更新沙盒,删除了.在本地虽然还保存了副本,但怕以后刷新时误删,所以贴一份在这里,以便需要时拷贝. 1.用aura组件包装一个flow foo.cmp: <aura:c ...
- Salesforce学习笔记之吐槽
迄今感到的几个不方便 1. SOQL里没有SELECT * ,只好根据参考手册和用vs code的一个插件Schema Explorer来辅助生成SELECT语句. 2. SOQL不支持注释,Deve ...
- Salesforce学习笔记(一)
Force平台简介 一.Force平台应用程序的优点1.以数据为中心的应用程序(一个对象就是一个数据库表) 由于该平台以数据库为中心,它让你能够编写以数据为中心的应用程序.以数据为中心的应用程序是基于 ...
- 58、salesforce学习笔记(五)
Set集合 Set<String> set1 = new Set<String>(); set1.add('1'); set1.add('2'); Set<String& ...
- 56、salesforce学习笔记(三)
Date类型 Datetime nowDatetime = Datetime.now(); Datetime datetime1 = Datetime.newInstance(2015,3,1,13, ...
- 54、salesforce学习笔记(一)
Decimal priceDecimal = -4.50; System.debug('小数的绝对值为:'+priceDecimal.abs()); System.debug('priceDecima ...
- Salesforce学习笔记之lwc
1.在Flow中使用Lightning Web Component(lwc)时,发现一个问题.给这个组件设置了一个输入参数,其值取自前一个Screen.第一次运行时,参数的值正确,但是如果这时退回前一 ...
随机推荐
- 怎么训练出一个NB的Prophet模型
上篇<神器の争>主要是介绍Prophet的特点以及prophet入门的一些注意事项,但离真正的实际运用还有段距离.本篇主要讲解实际运用中Prophet调参的主要步骤以及一些本人实际经验. ...
- 手动造轮子——为Ocelot集成Nacos注册中心
前言 近期在看博客的时候或者在群里看聊天的时候,发现很多都提到了Ocelot网关的问题.我之前也研究过一点,网关本身是一种通用的解决方案,主要的工作就是拦截请求统一处理,比如认证.授权.熔断. ...
- 题解 洛谷 P3340 【[ZJOI2014]星系调查】
根据题意,发现题目中的图,其实就是一颗树或者是一颗基环树,每个节点上有一个点对\((x,y)\),每次询问为给定端点,找一条直线到端点间的所有点的距离之和最小. 设这条直线为\(y=kx+b\),根据 ...
- 重学c#系列——c# 托管和非托管资源与代码相关(四)
前言 这是续第三节. 概况垃圾回收与我们写代码的关系: 强引用和弱引用 针对共享 Web 承载优化 垃圾回收和性能 应用程序域资源监视 正文 强引用和弱引用 垃圾回收器不能回收仍在引用的对象的内存-- ...
- Win10下ImageMagick及php-imageck扩展的安装
安装ImageMagick https://imagemagick.org/script/download.php 选择符合自己电脑的版本进行安装即可.安装的时候注意勾选下面的选项自动加入环境变量,否 ...
- Pattern、Matcher的用法
Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符 ...
- Python爆火的原因与未来|内附Python学习书籍大礼包无偿领取|
从12年到20年,python以肉眼可见的趋势超过了java,成为了当今It界人人皆知的编程语言. python为什么这么火? 网络编程语言搜索指数 适合初学者 Python具有语法简单.语句清晰的特 ...
- PHP preg_grep() 函数
preg_grep 函数用于返回匹配模式的数组条目.高佣联盟 www.cgewang.com 语法 array preg_grep ( string $pattern , array $input [ ...
- 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用
一.什么是 RestTemplate? RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpCo ...
- ElasticSearch实战系列六: Logstash快速入门和实战
前言 本文主要介绍的是ELK日志系统中的Logstash快速入门和实战 ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是 ...