本篇参考:

https://help.salesforce.com/s/articleView?id=sf.flow_ref_elements_custom_error.htm&type=5

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm

我们针对这些次salesforce的release note可以看出来,salesforce针对Flow不断地发力,支持了越来越多的功能并且替代了Process Builder以及Workflow,本次release同样有很大的惊喜,支持了类似Validation Rule的功能,即Custom Error。

一. Custom Error简单介绍

我们通过下方的gif可以进行更好的理解: 下方的gif在flow中创建了两个custom error,分别校验House表的State / Zip需要一个必填以及 当Price满足指定金额以后要求上传图片。我们可以看一下下方运行的效果。

这里对Custom Error功能进行一些考虑。

1. Custom Error只支持 Record-Based Trigger,其他类型的Flow不支持。

2. 和传统的Validation Rule不同的是,一个Custom Error可以显示在多个字段上,只需要在Custom Error功能中点击 Add Error Message按钮即可,这种设计很方便,因为如果使用Validation Rule实现情况下需要创建多个VR才可以搞定。

3. 和Validation Rule相同的是,同一个字段当前只能显示一个错误信息,当然,每个字段都可以有一个error信息。

4. 不支持compound 字段。

5. 功能相当于apex中的addError。

二. 使用Validation Rule还是使用Flow Custom Error?

既然Custom Error功能和Validation Rule如此相似,我们是否就可以理解成Flow Custom Error可以替换掉Validation Rule或者说什么场景下用哪个呢?以下是我的个人见解,不一定完全正确,可以相互讨论。

我的答案是Flow Custom Error是不会取代Validation Rule的,因为实际项目中需要考虑以下几点。

1. 当前表的业务复杂度以及后续的可扩展性。我们知道Flow在salesforce中执行的顺序是早于before trigger的,参考参考链接中的 order of execution,如果当前表的功能和业务逻辑较为复杂,一个字段在trigger中做了一些初期话处理,我们可以在validation rule对此字段进行逻辑校验会更准确,如果提前到before trigger,可能会引发一些不必要的问题。

2. Flow可以设置执行顺序,如果当前表的Flow特别多,有一些用于字段初期化设置,有一些用于校验, 设置的order顺序也可能影响结果。

当然并不是说Flow的Custom Error不好,以下功能可以考虑 Flow Custom Error。

1. 当前的表业务功能较少,后续功能也很少会用到apex trigger做一下逻辑操作(这个是前提,因为我们需要了解)

2. 校验针对多个字段同样的校验逻辑和错误信息,使用flow会省事一些。

3. 你是一个管理员,你不会写apex代码,但是当前的校验逻辑较为复杂,validation rule无法实现,你可以考虑使用Flow Custom Error来实现。

总结:本篇简单介绍了一下Custom Error的使用,感兴趣的小伙伴可以查看上方参考链接中的官方文档描述。demo中有一个比较怪的地方,就是我用了一个flow来实现了两个错误场景的判断,设置Decision以后Path只能同一个场景执行一个,所以尽管数据两个validation都触发了,但是每次只能显示一个报错,实际场景中可能需要拆分成两个Flow。另外此功能目前sandbox 可以使用,需要10月正式release以后,production以及dev edition才可以使用。篇中有错误地方欢迎指出,有不懂欢迎留言。

salesforce零基础学习(一百三十二)Flow新功能: Custom Error的更多相关文章

  1. salesforce 零基础学习(三十二)通过Streams和DOM方式读写XML

    有的时候我们需要对XML进行读写操作,常用的XML操作主要有Streams和DOM方式. 一.Streams方式 Streams常用到的类主要有两个XmlStreamReader 以及XmlStrea ...

  2. salesforce 零基础学习(三十四)动态的Custom Label

    custom label在项目中经常用到,常用在apex class或者VF里面用来显示help text或者error message.有的时候我们需要用到的信息是动态变化的,那样就需要动态来显示信 ...

  3. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  4. salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

    项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...

  5. salesforce 零基础学习(四十二)简单文件上传下载

    项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文 ...

  6. salesforce 零基础学习(三十九) soql函数以及常量

    在salesforce中,我们做SOQL查询时,往往需要用到计算式,比如求和,求平均值,或者过滤数据时,往往需要通过时间日期过滤,SOQL已经封装了很多的函数,可以更加方便我们的sql查询而不需要自己 ...

  7. salesforce 零基础学习(三十六)通过Process Builder以及Apex代码实现锁定记录( Lock Record)

    上一篇内容是通过Process Builder和Approval Processes实现锁定记录的功能,有的时候,往往锁定一条记录需要很多的限制条件,如果通过Approval Processes的条件 ...

  8. salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)

    本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...

  9. salesforce 零基础学习(三十八)Translate 的使用(国际化处理)

    本篇参考:http://resources.docs.salesforce.com/200/17/en-us/sfdc/pdf/salesforce_workbench_cheatsheet.pdf ...

  10. salesforce 零基础学习(三十五) 通过Process Builder和Approval Processes锁定记录(Lock Record)

    有的时候我们可能有这样的需求,当某个字段为特定的值情况下,便锁定此条记录,仅允许Profile为System Admin的用户修改或者解锁,其他的用户只能查看此条记录,不能修改此条记录,这种情况下我们 ...

随机推荐

  1. @Retention元注解的使用

    @Retention注解标记其他的注解用于指明标记的注解保留策略:先看Java SE 8中@Target是如何声明的: package java.lang.annotation; public enu ...

  2. 怎么利用大厂的API将大段音频转成文本

    日常办公中,我们经常要开会和写会议纪要.传统模式下,我们需要非常认真地听会议中每一句话,记下自己认为的核心的话,并在会后经过多次修改形成会议纪要.现在,聪明人已 经不那么干了,借助几百块的讯飞录音笔, ...

  3. 关于linq Where中的”或者“运算只查询出来满足一种条件的数据的问题,本质是IEnumerable和IQuerable之间的区别

    如下代码所示,其中的"query"返回值类型为IQuerable var query = _deviceRepository.GetAll().AsNoTracking() .Wh ...

  4. 【WALT】update_task_demand() 代码详解

    目录 [WALT]update_task_demand() 代码详解 代码展示 代码逻辑 用于判断是否进入新窗口的标志位 ⑴ 不累加任务运行时间的条件判断 ⑵ 仍在旧窗口中 ⑶ 进入新窗口 ⑷ 返回值 ...

  5. vue3中父组件与组件之间参数传递,使用(defineProps/defineEmits),涉及属性传递,对象传递,数组传递,以及事件传递

    Vue3 中子父组件之间的通信 一.父组件传递参数到子组件 采用defineProps 传递属性 父组件: <template> <div> <h1>这是父组件&l ...

  6. AI 时代的视频云转码移动端化——更快、更好、更低、更广

    编者按: AI技术的落地是渐渐地从服务器端.云端落地,逐步到移动端及边缘设备上.这些年随着AI技术的进步,轻量级算法模型开始在移动端实时跑起来,并且移动端算法也在不断进行迭代和完善,而对于实时直播场景 ...

  7. GaussDB技术解读丨高级压缩

    本文作者|华为云数据库GaussDB首席架构师 冯柯 [背景介绍] 数据压缩与关系数据库的结合,早已不是一个新鲜的话题,当前我们已经看到了各种各样数据库压缩的产品和解决方案.对于GaussDB来说,在 ...

  8. 提示工程101|与 AI 交谈的技巧和艺术

    随着 ChatGPT 的问世,人工智能(AI)新时代也正式开启.ChatGPT 是一种语言模型.它与用户进行对话交互,以便用户输入问题或提示,模型响应,然后对话可以继续来回进行,类似于在消息传递应用程 ...

  9. 学习lspci:总线

    00:00.0 Host bridge 总线地址 00:00.0 是指PCI总线上的第一个设备,也称为根复杂性总线.在PCI架构中,每个设备都有唯一的总线地址,由域号.总线号.设备号和功能号组成.其中 ...

  10. 如何在Avalonia11中设置自定义字体

    如何在Avalonia11中设置自定义字体 由于avalonia默认的中文字体显示的效果不太理想,我们需要下载一些自定义的字体,来优化UI的显示效果.avalonia的官方文档地址. 对我在项目中运用 ...