设置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. Spring事务源码分析专题(一)JdbcTemplate使用及源码分析

    Spring中的数据访问,JdbcTemplate使用及源码分析 前言 本系列文章为事务专栏分析文章,整个事务分析专题将按下面这张图完成 对源码分析前,我希望先介绍一下Spring中数据访问的相关内容 ...

  2. 面试高频SpringMVC执行流程最优解(源码分析)

    文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star! 搜索关注微信公众号 码出Offer 领取各种学习资料! SpringMVC执行流程 SpringMVC概述 Spri ...

  3. ThreadLocal源码分析以及why导致内存泄露

    1 ThreadLocal? This class provides thread-local variables. These variables differ from their normal ...

  4. CSS3选择器用法小结

    1.*通配符选择器 eg:*{margin:0;padding:0;} 2.#id选择符 ID选择器是CSS中效率最高的选择器,使用的时候要保证ID的唯一性 eg:#div{width:960px;m ...

  5. 01 . Go框架之Beego简介部署及程序流程分析

    Beego简介 beego是一个使用Go语言来开发WEB引用的GoWeb框架,该框架起始于2012年,由一位中国的程序员编写并进行公开,其目的就是为大家提供一个高效率的web应用开发框架.该框架采用模 ...

  6. 浅析MySQL中change与modify的区别

    MySQL版本 show variables like 'version'; 表结构 desc student; 修改表 例如:修改表student的name字段,将varchar(10)修改为var ...

  7. PHPSTORM常用插件

    Translation 最好用的翻译插件 .env files support 可以在env函数使用是提示.env文件中所有的key值的自动完成功能 PHP composer.json support ...

  8. js POST调用api接口时,由于OPTIONS请求导致服务器异常

    1.学习心得 当你搜到这个问题时,就表示你已经知道了脚本POST请求接口时,会先执行一次OPTIONS类型的请求.至于为什么会这样,在此就不做描述了,想知道的小伙伴可以查一下:本文主要将我在现实中遇到 ...

  9. PHP imagecolorallocatealpha - 为一幅图像分配颜色和透明度

    imagecolorallocatealpha — 为一幅图像分配颜色和透明度.高佣联盟 www.cgewang.com 语法 int imagecolorallocatealpha ( resour ...

  10. luogu P4562 [JXOI2018]游戏 组合数学

    LINK:游戏 当L==1的时候 容易想到 答案和1的位置有关. 枚举1的位置 那么剩下的方案为(R-1)! 那么总答案为 (R+1)*R/2(R-1)! 考虑L==2的时候 对于一个排列什么时候会终 ...