云工作流提供部分內置函數, 方便用戶可以使用內置函數進行一些基本的數據處理操作。 本文將介紹云工作流提供的內置函數定義以及使用方式示例。
內置函數列表
| 分類 | 內置函數 | 返回值類型 |
|---|---|---|
| 字符串處理 | uid | 字符串 |
| base64 | 字符串 | |
| base64decode | 字符串 | |
| hash | 字符串 | |
| regexMatchString | 布爾值 | |
| 數組處理 | arrayUnique | 數組 |
| arrayContains | 布爾值 | |
| map處理 | mapKeys | 數組 |
| mapValues | 數組 | |
| mapToJSONString | 字符串 | |
| jsonStringToMap | map[string]interface{} | |
| jq能力支持 | jq |
|
內置函數使用說明
使用內置函數,必須輸"{}"包裹的字符串, 工作流引擎會按照表達式的方式去解析和執行。
uid
作用:用于生成uuid
輸入參數:無
輸出示例:
503ac3f3-314b-4454-b752-67c0b379300dbase64
作用:對字符串進行base64編碼處理
參數:
| 參數 | 類型 | 說明 | 示例 |
|---|---|---|---|
| 內置函數第一個參數 | 字符串 | 需要進行base64編碼的字符串 | "{ base64('hello world') }" |
輸出示例:
aGVsbG8gd29ybGQ=base64decode
作用:對base64編碼后的字符串進行解碼
參數:
| 參數 | 類型 | 說明 | 示例 |
|---|---|---|---|
| 內置函數第一個參數 | 字符串 | 需要進行base64解碼的字符串 | "{ base64decode('aGVsbG8gd29ybGQ=') }" |
輸出示例:
hello worldhash
作用:使用指定算法對輸入的字符串進行hash算法處理
輸入參數:
| 參數 | 類型 | 說明 | 示例 |
|---|---|---|---|
| 內置函數第一個參數 | 字符串 | 需要進行hash算法處理的字符串 | "{ hash('hello word', 'MD5') }" |
| 內置函數第二個參數 | 字符串 | hash算法, 支持的hash算法如下:
|
輸出示例:
b4ba058a9f36ceee9e184a67405e9cbfregexMatchString
作用:對目標字符串進行正則匹配
輸入參數:
| 參數 | 類型 | 說明 | 示例 |
|---|---|---|---|
| 內置函數第一個參數 | 字符串 | 正則表達式 | "{ regexMatchString('^[habc]', 'hello world') }" |
| 內置函數第二個參數 | 字符串 | 目標字符串 |
輸出示例:
truearrayUnique
作用:對數組進行元素去重處理
輸入參數:
| 參數 | 類型 | 說明 | 示例 |
|---|---|---|---|
| 內置函數第一個參數 | []interface{}數組 | 注意是通過訪問輸入或者輸出數據變量引用的方式得到的傳參 不支持直接傳參數組,例如arrayUnique([1,3,4,1]) |
|
輸出示例:
[1,3,4]arrayContains
作用:查找數組是否包含每個元素
輸入參數:
| 參數 | 類型 | 說明 | 示例 |
|---|---|---|---|
內置函數第一個參數 | []interface{}數組 | 注意是通過訪問輸入或者輸出數據變量引用的方式得到的傳參 不支持直接傳參數組,例如arrayContains([1,3,4,1],1 )
|
|
| 內置函數第二個參數值 | 數組元素對應的類型 |
輸出示例:
truemapKeys
作用:將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) |