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.第一次运行时,参数的值正确,但是如果这时退回前一 ...
随机推荐
- 016.Nginx HTTPS
一 HTTPS概述 1.1 HTTPS介绍 超文本传输安全协议HTTPS(Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯 ...
- 性能测试必备知识(5)- 深入理解“CPU 上下文切换”
做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 前言 上一篇文章中,举例了大量进程等待 CP ...
- MySQL(一)简介与入门
一.数据库简介 这个博客详细介绍:http://www.cnblogs.com/progor/p/8729798.html 二.MySQL的安装 这个博客详细介绍:https://blog.csdn. ...
- Python数据类型-str,list常见操作
一.字符串操作 语法:字符串名.startwith('字符串') 功能:判断字符串里是否以xxx开头 范例: 扩展:从控制台接收输入居住地址,如果地址以北京市开头,则输出北京人口,否则输入非北京人口. ...
- Python 简明教程 --- 26,Python 多进程编程
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 学编程最有效的方法是动手敲代码. 目录 1,什么是多进程 我们所写的Python 代码就是一个程序, ...
- 800页的《数据随想录》PDF版电子书|百度网盘免费下载|数据科学领域必读
百度网盘免费下载|<数据随想录> 提取码:51y7 本电子书内容包含从数据埋点到数据可视化整个链条的内容,同时,也整理了很多小伙伴们在交流社区中常问到的问题<数据百问>系列 数 ...
- gc 模块常用函数
""" 1.gc.set_debug(flags) 设置gc的debug日志,一般设置为gc.DEBUG_LEAK 2.gc.collect([generation]) ...
- SpringBoot动态注入Bean
目的: 在程序运行期间,动态添加Bean进入到Spring容器. 目前使用到的场景: 对当当网的ElasticJob进行封装,通过自定义注解@ElasticJob的方式开启分布式定时任务. 当所有的B ...
- 字典内置函数&方法
字典内置函数&方法 Python字典包含了以下内置函数:高佣联盟 www.cgewang.com 序号 函数及描述 1 cmp(dict1, dict2)比较两个字典元素. 2 len(dic ...
- PHP filesize() 函数
定义和用法 filesize() 函数返回指定文件的大小. 如果成功,该函数返回文件大小的字节数.如果失败,则返回 FALSE. 语法 filesize(filename) 参数 描述 filenam ...