云工作流提供部分内置函数, 方便用户可以使用内置函数进行一些基本的数据处理操作。 本文将介绍云工作流提供的内置函数定义以及使用方式示例。
内置函数列表
分类 | 内置函数 | 返回值类型 |
---|---|---|
字符串处理 | uid | 字符串 |
base64 | 字符串 | |
base64decode | 字符串 | |
hash | 字符串 | |
regexMatchString | 布尔值 | |
数组处理 | arrayUnique | 数组 |
arrayContains | 布尔值 | |
map处理 | mapKeys | 数组 |
mapValues | 数组 | |
mapToJSONString | 字符串 | |
jsonStringToMap | map[string]interface{} | |
jq能力支持 | jq |
|
内置函数使用说明
使用内置函数,必须输"{}"
包裹的字符串, 工作流引擎会按照表达式的方式去解析和执行。
uid
作用:用于生成uuid
输入参数:无
输出示例:
503ac3f3-314b-4454-b752-67c0b379300d
base64
作用:对字符串进行base64编码处理
参数:
参数 | 类型 | 说明 | 示例 |
---|---|---|---|
内置函数第一个参数 | 字符串 | 需要进行base64编码的字符串 | "{ base64('hello world') }" |
输出示例:
aGVsbG8gd29ybGQ=
base64decode
作用:对base64编码后的字符串进行解码
参数:
参数 | 类型 | 说明 | 示例 |
---|---|---|---|
内置函数第一个参数 | 字符串 | 需要进行base64解码的字符串 | "{ base64decode('aGVsbG8gd29ybGQ=') }" |
输出示例:
hello world
hash
作用:使用指定算法对输入的字符串进行hash算法处理
输入参数:
参数 | 类型 | 说明 | 示例 |
---|---|---|---|
内置函数第一个参数 | 字符串 | 需要进行hash算法处理的字符串 | "{ hash('hello word', 'MD5') }" |
内置函数第二个参数 | 字符串 | hash算法, 支持的hash算法如下:
|
输出示例:
b4ba058a9f36ceee9e184a67405e9cbf
regexMatchString
作用:对目标字符串进行正则匹配
输入参数:
参数 | 类型 | 说明 | 示例 |
---|---|---|---|
内置函数第一个参数 | 字符串 | 正则表达式 | "{ regexMatchString('^[habc]', 'hello world') }" |
内置函数第二个参数 | 字符串 | 目标字符串 |
输出示例:
true
arrayUnique
作用:对数组进行元素去重处理
输入参数:
参数 | 类型 | 说明 | 示例 |
---|---|---|---|
内置函数第一个参数 | []interface{} 数组 | 注意是通过访问输入或者输出数据变量引用的方式得到的传参 不支持直接传参数组,例如arrayUnique([1,3,4,1]) |
|
输出示例:
[1,3,4]
arrayContains
作用:查找数组是否包含每个元素
输入参数:
参数 | 类型 | 说明 | 示例 |
---|---|---|---|
内置函数第一个参数 | []interface{} 数组 | 注意是通过访问输入或者输出数据变量引用的方式得到的传参 不支持直接传参数组,例如arrayContains([1,3,4,1],1 )
|
|
内置函数第二个参数值 | 数组元素对应的类型 |
输出示例:
true
mapKeys
作用:将map类型的key抽取为数组
输入参数:
参数 | 类型 | 说明 | 示例 |
---|---|---|---|
内置函数第一个参数 | map对象 | 注意是通过访问输入或者输出数据变量引用的方式得到的传参 不支持直接传参map,例如mapKeys({"k1":"v1", "k2":"v2"} )
|
|
输出示例:
["k1", "k2"]
mapValues
作用:将map类型的value抽取为数组
输入参数:
参数 | 类型 | 说明 | 示例 |
---|---|---|---|
内置函数第一个参数 | map对象 | 注意是通过访问输入或者输出数据变量引用的方式得到的传参 不支持直接传参map,例如mapValues({"k1":"v1", "k2":"v2"} )
|
|
输出示例:
["v1", "v2"]
mapToJSONString
作用:将map对象的数据转换为json格式的字符串
输入参数:
参数 | 类型 | 说明 | 示例 |
---|---|---|---|
内置函数第一个参数 | map对象 | 注意是通过访问输入或者输出数据变量引用的方式得到的传参 不支持直接传参map,例如mapToJSONString({"k1":"v1", "k2":"v2"} ) |
"{ mapToJSONString($.input) }" |
输出示例:
"{\"input\": {\"k1\": \"v1\",\"k2\": \"v2\"}}"
jsonStringToMap
作用:对目标字符串进行正则匹配
输入参数:
参数 | 类型 | 说明 | 示例 |
---|---|---|---|
内置函数第一个参数 | 字符串 | JSON格式字符 | jsonStringToMap("{\"input\": {\"k1\": \"v1\",\"k2\": \"v2\"}}") |
输出示例:
{"input": {"k1": "v1","k2": "v2"}}
jq
作用:对map对象基于jq语法进行数据过滤处理
输入参数:
参数 | 类型 | 说明 | 示例 |
---|---|---|---|
内置函数第一个参数 | map对象 | 注意是通过访问输入或者输出数据变量引用的方式得到的传参 不支持直接传参map,例如jq({"k1":"v1", "k2":"v2"}, "jq语法处理语句" )
|
|
内置函数第二个参数 | jq语法字符串 |
输出示例:
{"author":"J. R. R. Tolkien","category":"fiction","isbn":"0-395-19395-8","price":22.99,"title":"The Lord of the Rings"}
[{"author":"Evelyn Waugh","category":"reference","price":12.99,"title":"Sword of Honour"},{"author":"J. R. R. Tolkien","category":"fiction","isbn":"0-395-19395-8","price":22.99,"title":"The Lord of the Rings"}]
内置函数使用示例
接下来将结合base64decode, jsonStringToMap以及jq进行内置函数使用示例。
输入数据为一下JSON格式的字符串进行base64编码后的数据
原始的JSON格式数据如下:
{"books":[{"author":"Nigel Rees","category":"reference","price":8.95,"title":"Sayings of the Century"},{"author":"Evelyn Waugh","category":"reference","price":12.99,"title":"Sword of Honour"},{"author":"Herman Melville","category":"fiction","isbn":"0-553-21311-3","price":8.99,"title":"Moby Dick"},{"author":"J. R. R. Tolkien","category":"fiction","isbn":"0-395-19395-8","price":22.99,"title":"The Lord of the Rings"}]}
base64编码后:
eyJib29rcyI6W3siYXV0aG9yIjoiTmlnZWwgUmVlcyIsImNhdGVnb3J5IjoicmVmZXJlbmNlIiwicHJpY2UiOjguOTUsInRpdGxlIjoiU2F5aW5ncyBvZiB0aGUgQ2VudHVyeSJ9LHsiYXV0aG9yIjoiRXZlbHluIFdhdWdoIiwiY2F0ZWdvcnkiOiJyZWZlcmVuY2UiLCJwcmljZSI6MTIuOTksInRpdGxlIjoiU3dvcmQgb2YgSG9ub3VyIn0seyJhdXRob3IiOiJIZXJtYW4gTWVsdmlsbGUiLCJjYXRlZ29yeSI6ImZpY3Rpb24iLCJpc2JuIjoiMC01NTMtMjEzMTEtMyIsInByaWNlIjo4Ljk5LCJ0aXRsZSI6Ik1vYnkgRGljayJ9LHsiYXV0aG9yIjoiSi4gUi4gUi4gVG9sa2llbiIsImNhdGVnb3J5IjoiZmljdGlvbiIsImlzYm4iOiIwLTM5NS0xOTM5NS04IiwicHJpY2UiOjIyLjk5LCJ0aXRsZSI6IlRoZSBMb3JkIG9mIHRoZSBSaW5ncyJ9XX0=
工作流流程可视化 | 工作流流程定义 |
---|---|
|
|
对该工作流进行执行,对应工作流执行输入:
{
"input": "eyJib29rcyI6W3siYXV0aG9yIjoiTmlnZWwgUmVlcyIsImNhdGVnb3J5IjoicmVmZXJlbmNlIiwicHJpY2UiOjguOTUsInRpdGxlIjoiU2F5aW5ncyBvZiB0aGUgQ2VudHVyeSJ9LHsiYXV0aG9yIjoiRXZlbHluIFdhdWdoIiwiY2F0ZWdvcnkiOiJyZWZlcmVuY2UiLCJwcmljZSI6MTIuOTksInRpdGxlIjoiU3dvcmQgb2YgSG9ub3VyIn0seyJhdXRob3IiOiJIZXJtYW4gTWVsdmlsbGUiLCJjYXRlZ29yeSI6ImZpY3Rpb24iLCJpc2JuIjoiMC01NTMtMjEzMTEtMyIsInByaWNlIjo4Ljk5LCJ0aXRsZSI6Ik1vYnkgRGljayJ9LHsiYXV0aG9yIjoiSi4gUi4gUi4gVG9sa2llbiIsImNhdGVnb3J5IjoiZmljdGlvbiIsImlzYm4iOiIwLTM5NS0xOTM5NS04IiwicHJpY2UiOjIyLjk5LCJ0aXRsZSI6IlRoZSBMb3JkIG9mIHRoZSBSaW5ncyJ9XX0="
}
执行结果(只贴first和second执行的输入和输出):
状态名称(状态类型) | 状态状态执行输入 | 状态执行输出 |
---|---|---|
first(Noop) | ||
Second(Noop) |