flow-linter 是一个静态配置分析工具,可以执行流程最佳做法.
销售力流是使流程自动化的有力途径,但是如果没有适当的护栏,它们会很快变得难以维护,容易出错,而且不一致.
JavaScript有ESLint,Apex有PMD,但Flows怎么办? flow-linter 给与JavaScript或Apex合作的开发者带来同样的平起伏和静态代码分析的刚性—— 给销售力流程.
默认规则
循环中的行动呼吁
动作呼叫内环 - 为防止超过最高州长限额,最好利用循环结束时包含一个收集变量的单项行动呼吁,合并和充实最高要求.
过时的 API 版本
APVERSION 计划 - 采用较新的API组件可能导致与更古老的流程版本产生出出乎意料的问题,因为它们可能与基础力学不一致。 从API 50.0版本开始 Api 版本 属性在流动对象上随时可用。 为确保平稳运行并减少API版本之间的差异,强烈建议定期更新并维护.
自动布局
自动拉尤特 - 将 Canvas Mode 设置为 Auto-Layout , 元素被间隔, 连接, 自动对齐, 使您的流程保持整齐有序, 节省时间 .
复制 API 名称
复制APIName - 保持多个名称相似的元素,如 Copy_X_Of_Element,可以降低您的流量的总体可读性。 复制并粘贴这些元素时,请记住更新新创建的复制品的API名称.
杂交复杂度
杂交 - 循环和决定规则的数目,加上决定的数目。 使用1个分流和2个分流的组合,将分流分解为多个简洁的触发--命令分流,以降低单流内部的环形复杂度,确保可维护性和简单性.
循环中的 DML 语句
DML 声明内环 - 为了防止超过顶级州长限制,在流量结束时,合并所有数据库操作——记录创建、更新或删除.
复制 DML 操作
复制DML操作 - 当一流执行两个屏幕之间的数据库更改或动作时,防止用户在屏幕之间向后导航;否则,可以进行重复的数据库操作.
流程命名公约
流程Name - 流动的可读性至关重要。 建立命名公约可大大提高可找到性、可搜索性和整体一致性。 至少包含一个域并简要说明流量的动作,例如 Service_OrderFulfillment。 。 。 .
获取全部记录字段
获取所有字段 - 遵循最低特权原则(POLP),避免使用 获取记录 “自动存储所有字段”,除非有必要.
硬码 Id
硬码 - 避免硬编码ID,因为它们是Org特定的。 相反,在流量开始时将它们传递到变量中——通过合并 域 URL参数或 a 获取记录 键.
硬码 Url
硬码Url - 避免硬编码URL,因为它们是环境特有的。 使用一个 $API 公式(首选)或特定环境来源,如自定义标签、元数据或设置.
非活动流量
不活动花 - 就像清理出你的衣柜:删除未使用的流动至关重要。 非活性流仍然可能造成麻烦——例如测试时不慎删除记录,或者作为分流被激活.
缺少错误路径
缺少错误 - 流动可能无法按预期执行行动。 默认情况下,流会向用户显示出错误并电子邮件给创建者. 通过包含错误路径来自定义此行为 .
缺少流量描述
流程描述 - 描述在文件编制方面起关键作用。 我们强烈建议列入使用流动地点及其预期目的的细节.
缺少 Null 处理器
失踪的纽尔·汉德勒 - 当一个 获取记录 操作找不到数据, 它返回 null通过“决定”元素验证数据,以检查非“null”结果.
进程构建器
进程构建器 - 销售力量正在脱离工作流程规则和程序构建器,而倾向于流程。 开始将您的组织的自动化迁移到流程.
更新后递归
更新后递归 - 更新后流量用于修改 其他项目 记录。 在同一记录上使用它们会导致复发. 考虑 保护之前 用于同一记录更新的流程.
相同的记录字段更新
同为记录的字段更新日期 - 类似于触发器, 保护之前 上下文可以通过 $Record 而不援引DML.
SOQL 循环查询
SOQL 查询内部 - 为了防止超过最高州长限制,在流动结束时合并所有SOQL查询.
触发顺序
触发命令 - 保证您与 触发顺序 22年春天推出的房产.
未连接元素
未连接元素 - 避免不为流动所利用的未连接元素,以保持流动的效率和可维护性.
不安全运行上下文
不安全运行背景 - 这条流是用来运行的 不共享的系统模式,允许所有用户查看并编辑所有数据。 这可能导致数据访问不安全.
未使用的变量
无用可变 - 保持效率和可管理性,避免列入从未提及过的变量.
核心职能
getRules(ruleNames?: string[]): IRuleDefinition[]
检索扫描仪中使用的规则定义.
parse(selectedUris: any): Promise<ParsedFlow[]>
分析选定流程文件中的元数据 .
scan(parsedFlows: ParsedFlow[], ruleOptions?: IRulesConfig): ScanResult[]
对照已解析的流量运行规则并返回扫描结果 .
fix(results: ScanResult[]): ScanResult[]
试图在可行的情况下适用自动修正.
配置
规则配置
高级规则通过允许规则在规则层面故意被禁用来提供颗粒控制,确保在所有流中一致应用. 此外,还引入了压制的概念,使用户能够"白名单"特定组件. 该机制允许界定例外情况,为规则的执行提供灵活性,同时保持总体治理和遵守.
贾森
{
"rules": {
"<RuleName>": {
"path": "local_path_of_your_js_file", // optional: when defined, this configuration will be used for the engine to recognize your custom rule
"severity": "error",
"expression": ">=58",
"disabled": "true", // optional: when true, rule will not be applied to all flows being scanned
"suppressions": ["LogACall"] // optional: when defined, takes an array of suppressed elements (not based on name but on specific type)
}
}
}
也门
rules:
MissingFaultPath: # User Defined Rule configuration
path: "local_path_of_your_js_file" # Optional: when defined, this configuration will be used for the engine to recognize your rule
severity: error # Optional: User Defined severity, can be `info`, `warn`, `error`
expression: ">=58" # Optional: User defined expression, only applies if rule is Configurable=true
disabled: "true" # Optional: when true, rule will not be applied to all flows being scanned
suppressions: # Optional: when defined, takes an array of elements to be suppressed, keys can be found on suppressionElements on the rule definition
- LogACall # Optional: when defined, rule engine will look at suppressionElement defined on the rule to match against this list
-
严重性 :
- 严重程度的可选值为"error","warning"和"note".
- 如果提供了严重性,则它会覆盖默认严重性,即"过重".
-
表达式 :
- 表达式用于覆盖可配置规则中的标准值.
-
路径 :
- 如果提供了一条路径,它可以或者用新的规则定义来取代一条现有的规则,或者加载自定义规则.
- 确保路径中使用的规则名称与规则的导出类名称相匹配.
自定义规则接口
要创建使用规则配置的路径属性可以加载的自定义规则,它们需要遵守IRuleInterface. 请参看 自定义规则创建指南 详细指示.
例外配置
规定例外情况可以将特定情形排除在规则执行之外。 例外可以在流量,规则或结果级别上指定,以提供精细的控制. 下面是例外配置的现有属性的细分:
{
"exceptions": {
"<FlowName>": {
"<RuleName>": [
"<ResultName>",
"<ResultName>",
...
]
},
...
}
}
-
流程Name :
- 例外适用的流量名称.
-
规则Name:
- 定义例外的规则的名称.
-
结果Name:
- 规则中规定例外情况的具体结果或条件.
开发设置
-
克隆还原器 :
git clone https://github.com/corekraft/flow-linter-core.git -
安装依赖性 :
npm install -
构建工程 :
npm run build -
运行测试 :
npm run test -
(备选) 部署样本流量:
npm run deploy:flows -- -o