本篇参考:

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

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

https://trailhead.salesforce.com/en/content/learn/superbadges/superbadge_process_automation

写在开篇:Flow应该是18年开始使用,当时的Flow也并没有现在这么强大,而且当时稳定性也间歇性存疑,所以项目中能使用trigger的坚决不使用SF的automation 工具,workflow / process builder / flow在一个全新的SI项目基本不太考虑。但是随着现在的项目成本考虑以及既有系统设计,很多就已经包含了 process automation tool以及客户可能更推崇作为公司资产,所以想法归想法,实践归实践。随着SF的release传出 workflow / process builder后续都要被flow所代替,所以了解和学习flow以及了解如何去迁移至flow还是有必要的,因为flow所涵盖内容太多,本篇就很浅入浅出以  record-triggered flow来讲一下。

Flow Type Launched By Description

Screen Flow

  • Quick action
  • Lightning page
  • Experience Cloud site, and more

Screen Flows provide a UI that guides users through a business process.

Autolaunched Flow

  • Another flow
  • Apex code
  • REST API

Autolaunched Flows automate business processes that have no UI. They have no trigger and they run in the background.

Triggered Flow

  • Time
  • Data change
  • Platform event

Triggered Flows are autolaunched by a trigger you specify. They run in the background.

 

上面表格是Flow的类型,我们本篇只讲 Triggered Flow.

 一. Flow Builder & Flow组成部分

1. Flow Builder作为flow的创建和构造工具,组成可以分成三部分

Button Bar: 在你构建流程时管理你的流程。包含以下的一些功能

  • 在自动布局中,点击选择元素,然后在你想选择的每个元素上点击选择元素节点。然后你可以点击复制元素按钮,将所有选定的元素复制到剪贴板上 。
  • 要访问流程版本的属性,如上下文和API版本,点击滚轮形状设置按钮。
  • 选择 "自动布局 "或 "自由格式"。自动布局是所有新流程的默认值。
  • 如果该流程有警告或错误,会出现显示警告图标(The Show Warnings icon)或显示错误图标(The Show Errors icon)。要查看细节,点击图标。
  • 要运行正在打开的流程版本的最近一次保存,请点击运行。如果该流程版本包含子流程元素,其引用的流程的活动版本将被执行。如果被引用的流程没有活动版本,那么子流程元素将运行其引用的流程的最新版本。
  • 在 "运行 "按钮的左边,你可以看到该版本的活动或非活动状态,以及它最后一次被保存的时间。
  • 要测试已打开的流程,点击View Test,然后点击Create。设置测试参数和断言。
  • 点击Debug按钮来调试正在打开的最近一次保存的Flow。定义输入变量的值以及设置 rollback change以便调试不影响数据,查看有关流程运行的调试细节,并使用这些细节来排除错误。
  • 要使你的用户可以使用当前的流程版本,点击 Active按钮。每个流程在同一时间只能有一个版本被激活。
  • 要保存你的流程,请点击保存,或将其保存为新的版本或新的流程,请点击另存为。

Canvas: 在画布上建立一个流程。当你在画布上添加元素并连接它们时,你可以看到你的流程图。在自动布局中,点击连接器上的添加节点来添加一个元素,或者点击一个元素来查看该元的选项,如复制元素或删除元素。

Toolbox:

  • 在自由格式中,使用元素选项卡来添加新的元素,如屏幕和创建记录。
  • 在自由格式和自动布局中,使用管理器选项卡来创建变量、阶段、选择和其他资源以用于你的流程。或者查看你添加的所有元素和资源的列表。

除了以上,还需要记住一下快捷键  ctrl + /,这个快捷键可以显示出所有的 Flow中的快捷键操作。

2. 我们拆分一下Flow,将每个Flow可以分成三部分了解

  • Element:代表 Flow可以执行的一个操作,比如读写数据,展示信息,根据当前 flow user来收集数据,执行逻辑或者处理数据
  • Connector:代表 Flow在运行时定义的一个有效的路径
  • Resource:代表在整个 Flow流程中可以引用的值

二. Flow Trigger Explorer 以及 Flow Running User

1.通过Flow Trigger Explorer 更好的管理 Flow的顺利。一个 Object可能有多个 Flow操作,不同的设置顺序可能影响不同的结果。举个例子,都是针对before的场景,如果一个针对某个字段A的值会设置字段B,有一个针对某个字段C会影响字段A的值。这种的肯定需要 flow先执行后者在执行前者,否则就会导致结果的不正确。通过 Flow Trigger Explorer就可以更好的管理一个表的所有的 Flow的执行顺序。

2. Flow Running User:流程的运行用户是启动该流程的用户。运行用户决定了在用户上下文中运行的流可以对Salesforce数据做什么。

对于在用户上下文中运行的流程,运行用户的Profile和Permission Set决定了该流程的对象权限和字段级访问。当一个流程试图创建、读取、编辑或删除Salesforce数据时,它将执行运行用户的权限和字段级访问。例如,如果运行用户没有账户对象的编辑权限,而流程试图更新账户记录,就会发生错误。如果运行的用户没有编辑账户对象上的Rating字段的权限,而流程试图更新该字段,会发生错误。

需要注意的一点: running user和 running mode不是一个概念。flow的running mode分成 system mode和 user mode,只有在满足 user mode情况下,才会基于 running user来走运行的上下文权限。system mode会忽略这些权限相关。

FLOW LAUNCH METHOD

DEFAULT CONTEXT

Apex

Depends on code

Experience Cloud site

User

Embedded as a visual component inside a custom Aura component

User

Embedded as a visual component inside a Visualforce page

User

Custom button

User

Custom link

User

Direct link

User

Flow action

User

Lightning page

User

Process built in Process Builder

System context without sharing

Record-triggered

System context without sharing

Rest API

User

Run from an Apex method of a custom Aura component controller

Depends on code

Run from an Apex method of a Visualforce controller

Depends on code

Schedule-triggered

System context without sharing

Web tab

User

三. 基于workflow角度迁移到 Flow的demo举例

workflow主要的action有四个,但是 outbound message在项目中用的很少,所以我们更关注前三个。salesforce针对 workflow -> migrate to flow其实已经有一个工具做自助的转化,即 Migrate to Flow功能。

针对大部分的workflow都可以一件转化,从而减少了自己配置的成本,当然,他配置的也不一定是100%的正确,比如包含 RecordType相关的配置,转换就可能有问题,包含task,并且task设置的时间是明天等,就会提示转换不了,所以下面主要举例几个特殊的case转换场景或者实施的方式。

1. 使用 CONTAINS 以及创建 Task

这种 migrate to flow 工具是没法直接转换的,自己实施Flow的话,需要有几点注意或者以下几个步骤。

Start -> meet specific industry -> generate task -> end

其中,start没啥特殊需要处理的,只需要action设置

针对 contains / includes等函数,只需要使用 Flow的Decision即可很好的实现。

针对创建Task的步骤,只需要使用 Create Record 组件即可。这里有两个点, tomorrow使用了一个formula的变量,Constant_Follow_Up是一个常量

这里只举例tomorrow的实现,点击左侧的New Resource,资源类型选择formula,数据类型选择Date即可。

这样便实现了一个生成 Task的Flow。

2. 使用record type作为判断条件

这样migrate to flow的情况下,尽管不会报错,但是没法直接使用,我们需要对他进行一下修改。操作顺序为:

start -> record type correct and annual revenue correct -> update field -> end

这里还是会用到 Decision的组件,我们看一下实现。

通过这个条件就可以来实现 record type的使用。

3. 使用父的字段的值作为判断条件

我们看一下Flow的实现

这里主要看一下 Decision的部分。

4. 使用日期相关的变量作为条件

针对Flow来实现,除了需要使用Decision组件以外,还需要使用一下 Email Alert.

这里针对日期进行一下描述如何实现。我们可以先实现一个变量,实现一下today

再创建一个变量实现一下 NEXT_WEEK,使用 FORMULA类型

然后使用变量设置一下 Decision

5. 使用 Global Variable,比如 Custom Setting。

如果我们使用 Migrate to Flow来转换,可以正常转换,但是check的情况下会报错。

这显然是不太友好的,所以我们使用resource去跟踪这个custom setting的值。

这里我们看一下变量的写法,使用formula类型,data type选择boolean。

Decision我们只需要用这个变量判断即可。

总结:篇中主要讲了一下workflow常用场景中没法通过 Migrate to Flow 工具来转换的几个demo,篇中如果有错误地方欢迎指出,有不懂欢迎留言。需要强调的是,Record Triggered Flow相对来说已经是很容易的入门的了,process automation响应了SF的 low / no code的宗旨,后续在项目中所占比例可能还会不断提升,所以感兴趣的小伙伴可以借此学习一下 Screen Flow,还是很有趣的~~~至于项目中是否要用到 Flow,那就自己去评估吧。

salesforce零基础学习(一百一十六)workflow -> flow浅谈的更多相关文章

  1. salesforce零基础学习(七十六)顺序栈的实现以及应用

    数据结构中,针对线性表包含两种结构,一种是顺序线性表,一种是链表.顺序线性表适用于查询,时间复杂度为O(1),增删的时间复杂度为O(n).链表适用于增删,时间复杂度为O(1),查询的时间复杂度为O(n ...

  2. salesforce 零基础学习(四十六)动态美观显示列表中记录的审批状态

    项目中,申请者申请某些事项以后,常常需要在申请列表中查看当前申请的记录所在的审批状态,动态美观的显示状态可以使UI更符合客户要求,比如下面这样. 以Goods__c表为例,申请者申请的一些采购以前需要 ...

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

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

  4. salesforce 零基础学习(二十六)自定义图表chart简单介绍(使用apex和VF实现)

    chart在报表中经常使用到,他可以使报表结果更加直观的展现给用户.salesforce支持VF和apex代码来更好的展示chart. chart分类:常用的图表样式有饼状图,柱状图,折线图,条形图, ...

  5. salesforce零基础学习(八十六)Ajax Toolkit (VF页面中使用及javascript action使用)

    Ajax Toolkit 参考文档:https://resources.docs.salesforce.com/212/latest/en-us/sfdc/pdf/apex_ajax.pdf 在项目中 ...

  6. salesforce 零基础学习(五十六)实现getById

    本来想通过template封装DAO中的getById,结果template中无法选择$(object_name),所以此种想法打消了,直接封装成一个Helper类,方便以后项目中如果有类似需要可以使 ...

  7. salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现

    项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...

  8. salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

    在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...

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

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

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

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

随机推荐

  1. HDOJ--1010题C++

    有两点需要注意,第一点就是,题意是指在第T秒时门才打开,并不是越早到门口就能越早出去,而是只要存在指定长的路径即可以出去. 第二点,每次深搜发现答案不符都必须将点重新初始化.#include<i ...

  2. ImmutablePair和ImmutableTriple的使用

    场景 当我们调用某个方法,需要有超过一个值的返回时,我们通常会怎么做,比如现在需要调用方法返回姓名和年龄两个属性(假如姓名为张三,年龄为12). 方式一:使用Map,将Map中分别放入name为key ...

  3. Jmeter七、jmeter中的参数化

    参数化是为了更好的模拟真实的业务场景 CSV data set config组件 1.更容易使用和理解 2.适合大参数量场景 3.设置方便灵活 EOF=end of file 没有找到文件 comma ...

  4. centos7(虚拟机)下安装nginx

    centos7(虚拟机)下安装nginx 安装前准备 gcc yum install gcc-c++ pcre yum install -y pcre pcre-devel zlib yum inst ...

  5. LSP原则中的逆变和协变

    在复习过程中,LSP原则是个很重要的内容.这里先给出LSP原则的定义. LSP定义Functions that use pointers or referrnces to base classes m ...

  6. jmeter设置支持https方法

    2020-2-26,疫情影响下第一天上班,今年想把自己学到的测试方面的知识记录下来,方便自己方便有需要的人,废话不多说,开启第一篇随笔,jmeter设置. 最近在测接口性能,涉及https的接口,不知 ...

  7. 解决Win7、Win10登录远程桌面连接时报错、提示“要求的函数不受支持”问题

    解决Win7.Win10登录远程桌面连接时报错.提示"要求的函数不受支持"问题远程登录主机时地址,用户名,密码均正确,但是提示错误"要求的函数不受支持": 解决 ...

  8. centos7安装ffmpeg shell脚本

    #!/bin/sh # # Date: 2021-04-28 # Author: yb # Description: 安装ffmpeg # 检测当前用户是否为root [ $(id -u) != &q ...

  9. HOOK大法

    // 请求头hook 测试网站同花顺 OK var header_old = window.XMLHttpRequest.prototype.setRequestHeader;window.XMLHt ...

  10. vue.js拓展无法启用

    vue.js拓展无法启用 这里我以自己的谷歌浏览器演示 C:\Users\维磊\AppData\Local\Google\Chrome\User Data\Default\Extensions\nhd ...