运算节点虽然不对流程进行控制,但是流程中一种重要的功能,运算节点可以对一个表达式进行求值,运算结果会保存在对应节点的结果中,以供后续其他节点使用。是一种用于计算、处理和转换数据的工具,一定程度上,可以代替编程语言中对一个值计算函数调用并赋值给变量的功能。
在工作流配置界面中,点击流程中的加号(“+”)按钮,添加“运算”节点:
运算引擎规定了表达式支持的语法,目前支持的运算引擎有 Math.js 和 Formula.js,引擎各自都内置了大量的常用函数和数据操作的方法,具体的用法可以参考其官方文档。
需要注意的是,不同引擎在数组下标访问上有所区别,Math.js 的索引是从 1
开始,而 Formula.js 是从 0
开始。
另外如果是需要简单的字符串拼接,可以直接使用“字符串模板”,该引擎会将表达式中的变量替换为对应的值,然后返回拼接后的字符串。
表达式即一个运算公式的字符串表达,可以由变量、常量、运算符和支持的函数等组成。可以使用流程上下文的变量,例如运算节点的前置节点的结果,或者是循环的局部变量等。
表达式输入不符合语法时会在节点配置中提示错误,如果在具体执行时变量不存在或者类型不匹配,又或者使用了不存在的函数,运算节点会以出错的状态提前终止。
通常一个订单内可能有多个商品,每个商品的价格和数量都不同,订单的总价需要计算所有商品的价格和数量的乘积之和。可以在加载订单明细列表(对多关系数据集)之后使用运算节点来计算订单的总价:
其中 Formula.js 的 SUMPRODUCT
函数可以计算两个相同长度数组每行的乘积之和,加总就可以得到订单的总价。