DataFormat组件主要提供数据处理服务,比如聚合、拼接关联数据等。
功能描述
动作 | 描述 | 使用场景 |
将多张表进行join连接,并将指定的字段进行输出。 | 两张表或者多张表根据某个key进行join连接。 | |
将输入的数据根据某个key进行分组。 | 对array进行分组。 | |
将输入的数据的value进行分批拼接,可以添加前缀、后缀、间隔字符串。 | array中的内容需要拼接。 | |
以左节点为主表进行join左连接,并输出指定的字段。 | join时需要保留左节点所有数据,不需要右节点的无关数据。 | |
将字符串转为JSON。 | 字符串转JSON。 | |
把多个行数据组合在一起,也就是把多个JSONObject放在一起形成新的JSONArray。 | 多个JSON转为一个JSONArray。 | |
对数据做转换,同时会产生一个新的表。 | 数据转换或者聚合多个数据到一张表中。 |
组件配置示例
本文提供了DataFormat组件各动作的参数配置示例,您可将其作为测试剧本导入。通过可视化流程编辑器,能更直观地了解和测试各动作的配置参数,轻松掌握组件的功能逻辑与使用方式。操作步骤可参考剧本导入。
请先将示例数据保存为JSON文件。
{
"cells": [
{
"position": {
"x": -510,
"y": 20
},
"size": {
"width": 36,
"height": 36
},
"attrs": {
"body": {
"fill": "white",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 2
},
"label": {
"text": "",
"fontSize": 12,
"refX": 0.5,
"refY": "100%",
"refY2": 4,
"textAnchor": "middle",
"textVerticalAnchor": "top"
},
"path": {
"stroke": "#63ba4d"
}
},
"visible": true,
"shape": "circle",
"id": "StartEvent_1",
"zIndex": 1,
"data": {
"nodeType": "startEvent",
"appType": "basic",
"valueData": {
},
"icon": "icon-circle"
},
"markup": [
{
"tagName": "circle",
"selector": "body"
},
{
"tagName": "text",
"selector": "label"
}
],
"isNode": true
},
{
"position": {
"x": -110,
"y": 5
},
"size": {
"width": 137,
"height": 66
},
"view": "react-shape-view",
"shape": "activity",
"id": "8d42d64a-fb1a-41fe-aeeb-000849b57892",
"zIndex": 1,
"data": {
"nodeType": "action",
"appType": "component",
"nodeName": "leftJoin",
"valueData": {
"leftNode": "[{\"action\":\"11\",\"uuid\":[{\"uuid-key\":\"1\"}]},{\"action\":\"21\",\"uuid\":[{\"uuid-key\":\"2\"}]}]",
"rightNode": "[{\"uuid\":[{\"uuid-key\":\"1\"}],\"host\":\"196.1.*.*\"},{\"uuid\":[{\"uuid-key\":\"1\"}],\"host\":\"196.2.*.*\"}]",
"joinFields": "[{\"fieldName\":\"leftNode.uuid\",\"fieldValue\":\"rightNode.uuid\"}]",
"leftOutputFilelds": "[{\"fieldName\":\"*\",\"fieldValue\":\"action,uuid\"}]",
"rightOutputFields": "[{\"fieldName\":\"站点\",\"fieldValue\":\"host\"}]"
},
"icon": "https://sophon-gen-v2.oss-cn-zhangjiakou.aliyuncs.com/componentUpload/1719222281702_DataFormat_logo.png?Expires=1745373374&OSSAccessKeyId=STS.NVCS************&Signature=NG4Wh%2F2zJrendn8IhShW74ymMSA%3D&security-token=CAIS2AJ1q6Ft5B2yfSjIr5X2GMPAo6xY7venWBWHjlgyQexrpZTB1Dz2IHhMenFpAegcv%2Fw%2BlGFZ6%2F8elrp6SJtIXleCZtF94oxN9h2gb4fb4xF6LjaJ0s%2FLI3OaLjKm9u2wCryLYbGwU%2FOpbE%2B%2B5U0X6LDmdDKkckW4OJmS8%2FBOZcgWWQ%2FKBlgvRq0hRG1YpdQdKGHaONu0LxfumRCwNkdzvRdmgm4NgsbWgO%2Fks0OP3AOrlrBN%2Bdiuf8T9NvMBZskvD42Hu8VtbbfE3SJq7BxHybx7lqQs%2B02c5onDWwAJu0%2FXa7uEo4wydVNjFbM9A65Dqufxn%2Fpgt%2Braj4X7xhhEIOVJSSPbSZBbSxJNvU1RXDxQVcEYWxylurjnXvF%2BA9Gz5Y%2FUGin%2B2svzhw6RGJ1dq8DgINtD0jokjPndRVbLXs84nxS7gbsGn76oY2zradH%2FdU501DLSMytAXxqAAYnrQLesLZ0VOxi7cg9LDO9w1brCl%2Fw1TxYuVpiYFJ11Kc5F2ues4ocueMk3q3AuAFpCyXW646Exz7L86%2Bp3aiLIps5ON%2FjCiP9oG8LAXI4ajG3woQPLdwm9bT20vHi4yEJYVlvntpkk5bLR5mOuE%2B6VPgmB2q2gHJTKgj13KEDwIAA%3D",
"description": "Left Join,关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。",
"advance": {
"inputParamMode": false,
"onError": "stop_cur_flow",
"rspStatusType": 3,
"rspStatusThreshold": 0
},
"componentName": "DataFormat",
"actionName": "leftJoin",
"cascaderValue": [],
"status": "success"
},
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "17bbdf75-e724-4c63-a055-e184bf946b87",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "StartEvent_1"
},
"target": {
"cell": "8d42d64a-fb1a-41fe-aeeb-000849b57892"
}
},
{
"position": {
"x": 222.5,
"y": 10
},
"size": {
"width": 36,
"height": 36
},
"attrs": {
"body": {
"fill": "white",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 2
},
"path": {
"r": 12,
"refX": "50%",
"refY": "50%",
"fill": "#63ba4d",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 4
},
"label": {
"text": "结束",
"fontSize": 12,
"refX": 0.5,
"refY": "100%",
"refY2": 4,
"textAnchor": "middle",
"textVerticalAnchor": "top"
}
},
"visible": true,
"shape": "circle",
"id": "957ea6d3-2562-4f0f-829e-f3613f9e1f16",
"zIndex": 1,
"data": {
"nodeType": "endEvent",
"appType": "basic",
"nodeName": "结束",
"icon": "icon-radio-off-full",
"description": "剧本结束节点"
},
"markup": [
{
"tagName": "circle",
"selector": "body"
},
{
"tagName": "circle",
"selector": "path"
},
{
"tagName": "text",
"selector": "label"
}
],
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "ada87a01-f8ff-4222-b33d-c42e3367ff47",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "8d42d64a-fb1a-41fe-aeeb-000849b57892"
},
"target": {
"cell": "957ea6d3-2562-4f0f-829e-f3613f9e1f16"
},
"vertices": []
},
{
"position": {
"x": -310,
"y": 110
},
"size": {
"width": 137,
"height": 66
},
"view": "react-shape-view",
"shape": "activity",
"id": "7309e77a-0c93-4396-b28b-9b0c1672cd4e",
"zIndex": 1,
"data": {
"nodeType": "action",
"appType": "component",
"nodeName": "leftJSON",
"valueData": {
"inputData": "[{\"action\":\"11\",\"uuid\":[{\"uuid-key\":\"1\"}]},{\"action\":\"21\",\"uuid\":[{\"uuid-key\":\"2\"}]}]"
},
"icon": "https://sophon-gen-v2.oss-cn-zhangjiakou.aliyuncs.com/componentUpload/1719222281702_DataFormat_logo.png?Expires=1745373374&OSSAccessKeyId=STS.NVCS************&Signature=NG4Wh%2F2zJrendn8IhShW74ymMSA%3D&security-token=CAIS2AJ1q6Ft5B2yfSjIr5X2GMPAo6xY7venWBWHjlgyQexrpZTB1Dz2IHhMenFpAegcv%2Fw%2BlGFZ6%2F8elrp6SJtIXleCZtF94oxN9h2gb4fb4xF6LjaJ0s%2FLI3OaLjKm9u2wCryLYbGwU%2FOpbE%2B%2B5U0X6LDmdDKkckW4OJmS8%2FBOZcgWWQ%2FKBlgvRq0hRG1YpdQdKGHaONu0LxfumRCwNkdzvRdmgm4NgsbWgO%2Fks0OP3AOrlrBN%2Bdiuf8T9NvMBZskvD42Hu8VtbbfE3SJq7BxHybx7lqQs%2B02c5onDWwAJu0%2FXa7uEo4wydVNjFbM9A65Dqufxn%2Fpgt%2Braj4X7xhhEIOVJSSPbSZBbSxJNvU1RXDxQVcEYWxylurjnXvF%2BA9Gz5Y%2FUGin%2B2svzhw6RGJ1dq8DgINtD0jokjPndRVbLXs84nxS7gbsGn76oY2zradH%2FdU501DLSMytAXxqAAYnrQLesLZ0VOxi7cg9LDO9w1brCl%2Fw1TxYuVpiYFJ11Kc5F2ues4ocueMk3q3AuAFpCyXW646Exz7L86%2Bp3aiLIps5ON%2FjCiP9oG8LAXI4ajG3woQPLdwm9bT20vHi4yEJYVlvntpkk5bLR5mOuE%2B6VPgmB2q2gHJTKgj13KEDwIAA%3D",
"description": "把输入数据转换为JSON类型的。如果是JSONArray,则把所有的数组直接放到datalist中。如果是JSONObject,则作为datalist的一行数据",
"advance": {
"inputParamMode": false,
"onError": "stop_cur_flow",
"rspStatusType": 3,
"rspStatusThreshold": 0
},
"componentName": "DataFormat",
"actionName": "convertToJSON",
"status": "success"
},
"isNode": true
},
{
"position": {
"x": -68,
"y": 110
},
"size": {
"width": 137,
"height": 66
},
"view": "react-shape-view",
"shape": "activity",
"id": "e3134166-6d6c-4879-846b-a9b00ad6c4a6",
"zIndex": 1,
"data": {
"nodeType": "action",
"appType": "component",
"nodeName": "rightJSON",
"valueData": {
"inputData": "[{\"uuid\":[{\"uuid-key\":\"1\"}],\"host\":\"196.1.*.*\"},{\"uuid\":[{\"uuid-key\":\"1\"}],\"host\":\"196.2.*.*\"}]"
},
"icon": "https://sophon-gen-v2.oss-cn-zhangjiakou.aliyuncs.com/componentUpload/1719222281702_DataFormat_logo.png?Expires=1745373374&OSSAccessKeyId=STS.NVCS************&Signature=NG4Wh%2F2zJrendn8IhShW74ymMSA%3D&security-token=CAIS2AJ1q6Ft5B2yfSjIr5X2GMPAo6xY7venWBWHjlgyQexrpZTB1Dz2IHhMenFpAegcv%2Fw%2BlGFZ6%2F8elrp6SJtIXleCZtF94oxN9h2gb4fb4xF6LjaJ0s%2FLI3OaLjKm9u2wCryLYbGwU%2FOpbE%2B%2B5U0X6LDmdDKkckW4OJmS8%2FBOZcgWWQ%2FKBlgvRq0hRG1YpdQdKGHaONu0LxfumRCwNkdzvRdmgm4NgsbWgO%2Fks0OP3AOrlrBN%2Bdiuf8T9NvMBZskvD42Hu8VtbbfE3SJq7BxHybx7lqQs%2B02c5onDWwAJu0%2FXa7uEo4wydVNjFbM9A65Dqufxn%2Fpgt%2Braj4X7xhhEIOVJSSPbSZBbSxJNvU1RXDxQVcEYWxylurjnXvF%2BA9Gz5Y%2FUGin%2B2svzhw6RGJ1dq8DgINtD0jokjPndRVbLXs84nxS7gbsGn76oY2zradH%2FdU501DLSMytAXxqAAYnrQLesLZ0VOxi7cg9LDO9w1brCl%2Fw1TxYuVpiYFJ11Kc5F2ues4ocueMk3q3AuAFpCyXW646Exz7L86%2Bp3aiLIps5ON%2FjCiP9oG8LAXI4ajG3woQPLdwm9bT20vHi4yEJYVlvntpkk5bLR5mOuE%2B6VPgmB2q2gHJTKgj13KEDwIAA%3D",
"description": "把输入数据转换为JSON类型的。如果是JSONArray,则把所有的数组直接放到datalist中。如果是JSONObject,则作为datalist的一行数据",
"advance": {
"inputParamMode": false,
"onError": "stop_cur_flow",
"rspStatusType": 3,
"rspStatusThreshold": 0
},
"componentName": "DataFormat",
"actionName": "convertToJSON",
"cascaderValue": [
{
"label": "leftJSON",
"value": "${leftJSON}",
"children": [
{
"label": "leftJSON.total_data",
"name": "leftJSON.total_data",
"value": "${leftJSON.total_data}"
},
{
"label": "leftJSON.status",
"name": "leftJSON.status",
"value": "${leftJSON.status}"
},
{
"label": "leftJSON.total_exe",
"name": "leftJSON.total_exe",
"value": "${leftJSON.total_exe}"
},
{
"label": "leftJSON.datalist.*.uuid.*.uuid-key",
"name": "leftJSON.datalist.*.uuid.*.uuid-key",
"value": "${leftJSON.datalist.*.uuid.*.uuid-key}"
},
{
"label": "leftJSON.total_data_successful",
"name": "leftJSON.total_data_successful",
"value": "${leftJSON.total_data_successful}"
},
{
"label": "leftJSON.total_data_with_dup",
"name": "leftJSON.total_data_with_dup",
"value": "${leftJSON.total_data_with_dup}"
},
{
"label": "leftJSON.total_exe_successful",
"name": "leftJSON.total_exe_successful",
"value": "${leftJSON.total_exe_successful}"
},
{
"label": "leftJSON.datalist.*.action",
"name": "leftJSON.datalist.*.action",
"value": "${leftJSON.datalist.*.action}"
}
]
}
],
"status": "success"
},
"isNode": true
},
{
"position": {
"x": 172,
"y": 110
},
"size": {
"width": 137,
"height": 66
},
"view": "react-shape-view",
"shape": "activity",
"id": "0ac43fe1-2031-4b6e-a883-d788c603e944",
"zIndex": 1,
"data": {
"nodeType": "action",
"appType": "component",
"nodeName": "joindata",
"valueData": {
"inputNodes": "[{\"fieldName\":\"leftJSON\",\"fieldValue\":\"${JSONArray:leftJSON.datalist.*}\"},{\"fieldName\":\"rightJSON\",\"fieldValue\":\"${JSONArray:rightJSON.datalist.*}\"}]",
"joinFields": "[{\"fieldName\":\"leftJSON.uuid\",\"fieldValue\":\"rightJSON.uuid\"}]",
"outputFields": "[{\"fieldName\":\"myhost\",\"fieldValue\":\"rightJSON.host\"},{\"fieldName\":\"myaction\",\"fieldValue\":\"leftJSON.action\"},{\"fieldName\":\"uuid\",\"fieldValue\":\"leftJSON.uuid\"}]"
},
"icon": "https://sophon-gen-v2.oss-cn-zhangjiakou.aliyuncs.com/componentUpload/1719222281702_DataFormat_logo.png?Expires=1745373374&OSSAccessKeyId=STS.NVCS************&Signature=NG4Wh%2F2zJrendn8IhShW74ymMSA%3D&security-token=CAIS2AJ1q6Ft5B2yfSjIr5X2GMPAo6xY7venWBWHjlgyQexrpZTB1Dz2IHhMenFpAegcv%2Fw%2BlGFZ6%2F8elrp6SJtIXleCZtF94oxN9h2gb4fb4xF6LjaJ0s%2FLI3OaLjKm9u2wCryLYbGwU%2FOpbE%2B%2B5U0X6LDmdDKkckW4OJmS8%2FBOZcgWWQ%2FKBlgvRq0hRG1YpdQdKGHaONu0LxfumRCwNkdzvRdmgm4NgsbWgO%2Fks0OP3AOrlrBN%2Bdiuf8T9NvMBZskvD42Hu8VtbbfE3SJq7BxHybx7lqQs%2B02c5onDWwAJu0%2FXa7uEo4wydVNjFbM9A65Dqufxn%2Fpgt%2Braj4X7xhhEIOVJSSPbSZBbSxJNvU1RXDxQVcEYWxylurjnXvF%2BA9Gz5Y%2FUGin%2B2svzhw6RGJ1dq8DgINtD0jokjPndRVbLXs84nxS7gbsGn76oY2zradH%2FdU501DLSMytAXxqAAYnrQLesLZ0VOxi7cg9LDO9w1brCl%2Fw1TxYuVpiYFJ11Kc5F2ues4ocueMk3q3AuAFpCyXW646Exz7L86%2Bp3aiLIps5ON%2FjCiP9oG8LAXI4ajG3woQPLdwm9bT20vHi4yEJYVlvntpkk5bLR5mOuE%2B6VPgmB2q2gHJTKgj13KEDwIAA%3D",
"description": "提供类似多表JOIN的语法,以逗号分割,对处理节点的datalist.*的数据当作多长多列的数据",
"advance": {
"inputParamMode": false,
"onError": "stop_cur_flow",
"rspStatusType": 3,
"rspStatusThreshold": 0
},
"componentName": "DataFormat",
"actionName": "joindata",
"cascaderValue": [
{
"label": "rightJSON",
"value": "${rightJSON}",
"children": [
{
"label": "rightJSON.total_data_with_dup",
"name": "rightJSON.total_data_with_dup",
"value": "${rightJSON.total_data_with_dup}"
},
{
"label": "rightJSON.total_data",
"name": "rightJSON.total_data",
"value": "${rightJSON.total_data}"
},
{
"label": "rightJSON.status",
"name": "rightJSON.status",
"value": "${rightJSON.status}"
},
{
"label": "rightJSON.datalist.*.host",
"name": "rightJSON.datalist.*.host",
"value": "${rightJSON.datalist.*.host}"
},
{
"label": "rightJSON.total_exe_successful",
"name": "rightJSON.total_exe_successful",
"value": "${rightJSON.total_exe_successful}"
},
{
"label": "rightJSON.datalist.*.uuid.*.uuid-key",
"name": "rightJSON.datalist.*.uuid.*.uuid-key",
"value": "${rightJSON.datalist.*.uuid.*.uuid-key}"
},
{
"label": "rightJSON.total_data_successful",
"name": "rightJSON.total_data_successful",
"value": "${rightJSON.total_data_successful}"
},
{
"label": "rightJSON.total_exe",
"name": "rightJSON.total_exe",
"value": "${rightJSON.total_exe}"
}
]
},
{
"label": "leftJSON",
"value": "${leftJSON}",
"children": [
{
"label": "leftJSON.total_data",
"name": "leftJSON.total_data",
"value": "${leftJSON.total_data}"
},
{
"label": "leftJSON.status",
"name": "leftJSON.status",
"value": "${leftJSON.status}"
},
{
"label": "leftJSON.total_exe",
"name": "leftJSON.total_exe",
"value": "${leftJSON.total_exe}"
},
{
"label": "leftJSON.datalist.*.uuid.*.uuid-key",
"name": "leftJSON.datalist.*.uuid.*.uuid-key",
"value": "${leftJSON.datalist.*.uuid.*.uuid-key}"
},
{
"label": "leftJSON.total_data_successful",
"name": "leftJSON.total_data_successful",
"value": "${leftJSON.total_data_successful}"
},
{
"label": "leftJSON.total_data_with_dup",
"name": "leftJSON.total_data_with_dup",
"value": "${leftJSON.total_data_with_dup}"
},
{
"label": "leftJSON.total_exe_successful",
"name": "leftJSON.total_exe_successful",
"value": "${leftJSON.total_exe_successful}"
},
{
"label": "leftJSON.datalist.*.action",
"name": "leftJSON.datalist.*.action",
"value": "${leftJSON.datalist.*.action}"
}
]
}
],
"status": "success"
},
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "a6f70a6a-f5a0-4e5c-9de5-5230dc1deefa",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"router": {
"name": "normal"
},
"isNode": false,
"source": {
"cell": "StartEvent_1"
},
"target": {
"cell": "7309e77a-0c93-4396-b28b-9b0c1672cd4e"
},
"vertices": [
{
"x": -492,
"y": 143
}
]
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "13db0fe6-495d-4b16-80ca-df96d33beff1",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "7309e77a-0c93-4396-b28b-9b0c1672cd4e"
},
"target": {
"cell": "e3134166-6d6c-4879-846b-a9b00ad6c4a6"
}
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "9f472b01-bb53-4bac-a8dd-a67c3c537fa9",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "e3134166-6d6c-4879-846b-a9b00ad6c4a6"
},
"target": {
"cell": "0ac43fe1-2031-4b6e-a883-d788c603e944"
}
},
{
"position": {
"x": 440,
"y": 110
},
"size": {
"width": 36,
"height": 36
},
"attrs": {
"body": {
"fill": "white",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 2
},
"path": {
"r": 12,
"refX": "50%",
"refY": "50%",
"fill": "#63ba4d",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 4
},
"label": {
"text": "结束",
"fontSize": 12,
"refX": 0.5,
"refY": "100%",
"refY2": 4,
"textAnchor": "middle",
"textVerticalAnchor": "top"
}
},
"visible": true,
"shape": "circle",
"id": "a66c2f32-7d29-40a2-8e7e-622f09cf23dd",
"zIndex": 1,
"data": {
"nodeType": "endEvent",
"appType": "basic",
"nodeName": "结束",
"icon": "icon-radio-off-full",
"description": "剧本结束节点"
},
"markup": [
{
"tagName": "circle",
"selector": "body"
},
{
"tagName": "circle",
"selector": "path"
},
{
"tagName": "text",
"selector": "label"
}
],
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "caf56653-94c8-42f8-beec-f4deb72dc93f",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "0ac43fe1-2031-4b6e-a883-d788c603e944"
},
"target": {
"cell": "a66c2f32-7d29-40a2-8e7e-622f09cf23dd"
}
},
{
"position": {
"x": -310,
"y": 262
},
"size": {
"width": 137,
"height": 66
},
"view": "react-shape-view",
"shape": "activity",
"id": "83110da4-c8e7-4d19-8e79-51f8903625b2",
"zIndex": 1,
"data": {
"nodeType": "action",
"appType": "component",
"nodeName": "mockData",
"valueData": {
"inputData": "[{\"攻击类型\":\"网站后门\",\"count\":\"1\",\"startTime\":\"1646115503000\",\"endTime\":\"1646115503000\",\"securityEventIds\":\"330706\"},{\"攻击类型\":\"网站后门\",\"count\":\"1\",\"startTime\":\"1646114346000\",\"endTime\":\"1646114346000\",\"securityEventIds\":\"330700\"},{\"攻击类型\":\"应用白名单\",\"count\":\"1\",\"startTime\":\"1646114098000\",\"endTime\":\"1646114098000\",\"securityEventIds\":\"330699\"},]"
},
"icon": "https://sophon-gen-v2.oss-cn-zhangjiakou.aliyuncs.com/componentUpload/1719222281702_DataFormat_logo.png?Expires=1745373374&OSSAccessKeyId=STS.NVCS************&Signature=NG4Wh%2F2zJrendn8IhShW74ymMSA%3D&security-token=CAIS2AJ1q6Ft5B2yfSjIr5X2GMPAo6xY7venWBWHjlgyQexrpZTB1Dz2IHhMenFpAegcv%2Fw%2BlGFZ6%2F8elrp6SJtIXleCZtF94oxN9h2gb4fb4xF6LjaJ0s%2FLI3OaLjKm9u2wCryLYbGwU%2FOpbE%2B%2B5U0X6LDmdDKkckW4OJmS8%2FBOZcgWWQ%2FKBlgvRq0hRG1YpdQdKGHaONu0LxfumRCwNkdzvRdmgm4NgsbWgO%2Fks0OP3AOrlrBN%2Bdiuf8T9NvMBZskvD42Hu8VtbbfE3SJq7BxHybx7lqQs%2B02c5onDWwAJu0%2FXa7uEo4wydVNjFbM9A65Dqufxn%2Fpgt%2Braj4X7xhhEIOVJSSPbSZBbSxJNvU1RXDxQVcEYWxylurjnXvF%2BA9Gz5Y%2FUGin%2B2svzhw6RGJ1dq8DgINtD0jokjPndRVbLXs84nxS7gbsGn76oY2zradH%2FdU501DLSMytAXxqAAYnrQLesLZ0VOxi7cg9LDO9w1brCl%2Fw1TxYuVpiYFJ11Kc5F2ues4ocueMk3q3AuAFpCyXW646Exz7L86%2Bp3aiLIps5ON%2FjCiP9oG8LAXI4ajG3woQPLdwm9bT20vHi4yEJYVlvntpkk5bLR5mOuE%2B6VPgmB2q2gHJTKgj13KEDwIAA%3D",
"description": "把输入数据转换为JSON类型的。如果是JSONArray,则把所有的数组直接放到datalist中。如果是JSONObject,则作为datalist的一行数据",
"advance": {
"inputParamMode": false,
"onError": "stop_cur_flow",
"rspStatusType": 3,
"rspStatusThreshold": 0
},
"componentName": "DataFormat",
"actionName": "convertToJSON",
"status": "success"
},
"isNode": true
},
{
"position": {
"x": -80,
"y": 262
},
"size": {
"width": 137,
"height": 66
},
"view": "react-shape-view",
"shape": "activity",
"id": "5314c487-af24-4dbf-bc11-f79bed39b60b",
"zIndex": 1,
"data": {
"nodeType": "action",
"appType": "component",
"nodeName": "groupbydata",
"valueData": {
"inputNode": "${JSONArray:mockData.datalist.*}",
"groupByKeys": "攻击类型",
"outputFields": "[{\"fieldName\":\"攻击次数\",\"fieldType\":\"jq\",\"fieldValue\":\".datalist | map_values(.count)|add|length\"},{\"fieldName\":\"最新攻击时间\",\"fieldType\":\"jq\",\"fieldValue\":\"[.datalist[].endTime|tonumber]|max\"}]"
},
"icon": "https://sophon-gen-v2.oss-cn-zhangjiakou.aliyuncs.com/componentUpload/1719222281702_DataFormat_logo.png?Expires=1745373374&OSSAccessKeyId=STS.NVCS************&Signature=NG4Wh%2F2zJrendn8IhShW74ymMSA%3D&security-token=CAIS2AJ1q6Ft5B2yfSjIr5X2GMPAo6xY7venWBWHjlgyQexrpZTB1Dz2IHhMenFpAegcv%2Fw%2BlGFZ6%2F8elrp6SJtIXleCZtF94oxN9h2gb4fb4xF6LjaJ0s%2FLI3OaLjKm9u2wCryLYbGwU%2FOpbE%2B%2B5U0X6LDmdDKkckW4OJmS8%2FBOZcgWWQ%2FKBlgvRq0hRG1YpdQdKGHaONu0LxfumRCwNkdzvRdmgm4NgsbWgO%2Fks0OP3AOrlrBN%2Bdiuf8T9NvMBZskvD42Hu8VtbbfE3SJq7BxHybx7lqQs%2B02c5onDWwAJu0%2FXa7uEo4wydVNjFbM9A65Dqufxn%2Fpgt%2Braj4X7xhhEIOVJSSPbSZBbSxJNvU1RXDxQVcEYWxylurjnXvF%2BA9Gz5Y%2FUGin%2B2svzhw6RGJ1dq8DgINtD0jokjPndRVbLXs84nxS7gbsGn76oY2zradH%2FdU501DLSMytAXxqAAYnrQLesLZ0VOxi7cg9LDO9w1brCl%2Fw1TxYuVpiYFJ11Kc5F2ues4ocueMk3q3AuAFpCyXW646Exz7L86%2Bp3aiLIps5ON%2FjCiP9oG8LAXI4ajG3woQPLdwm9bT20vHi4yEJYVlvntpkk5bLR5mOuE%2B6VPgmB2q2gHJTKgj13KEDwIAA%3D",
"description": "对某个数据源做聚合操作",
"advance": {
"inputParamMode": false,
"onError": "stop_cur_flow",
"rspStatusType": 3,
"rspStatusThreshold": 0
},
"componentName": "DataFormat",
"actionName": "groupbydata",
"status": "success"
},
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "e0ac28e4-a693-4c24-aad6-e56349468ecc",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"router": {
"name": "normal"
},
"isNode": false,
"source": {
"cell": "StartEvent_1"
},
"target": {
"cell": "83110da4-c8e7-4d19-8e79-51f8903625b2"
},
"vertices": [
{
"x": -492,
"y": 295
}
]
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "a555fddb-9eb9-48f8-8d01-836537104767",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "83110da4-c8e7-4d19-8e79-51f8903625b2"
},
"target": {
"cell": "5314c487-af24-4dbf-bc11-f79bed39b60b"
}
},
{
"position": {
"x": 240,
"y": 270
},
"size": {
"width": 36,
"height": 36
},
"attrs": {
"body": {
"fill": "white",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 2
},
"path": {
"r": 12,
"refX": "50%",
"refY": "50%",
"fill": "#63ba4d",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 4
},
"label": {
"text": "结束",
"fontSize": 12,
"refX": 0.5,
"refY": "100%",
"refY2": 4,
"textAnchor": "middle",
"textVerticalAnchor": "top"
}
},
"visible": true,
"shape": "circle",
"id": "7779ea7e-b587-4512-94e0-d00dc76251e4",
"zIndex": 1,
"data": {
"nodeType": "endEvent",
"appType": "basic",
"nodeName": "结束",
"icon": "icon-radio-off-full",
"description": "剧本结束节点"
},
"markup": [
{
"tagName": "circle",
"selector": "body"
},
{
"tagName": "circle",
"selector": "path"
},
{
"tagName": "text",
"selector": "label"
}
],
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "70f8f4cc-0561-4bd8-aecd-6fa2441c0b38",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "5314c487-af24-4dbf-bc11-f79bed39b60b"
},
"target": {
"cell": "7779ea7e-b587-4512-94e0-d00dc76251e4"
}
},
{
"position": {
"x": -140,
"y": 400
},
"size": {
"width": 137,
"height": 66
},
"view": "react-shape-view",
"shape": "activity",
"id": "a6080934-1dd4-4d87-b573-1f90be7d4535",
"zIndex": 1,
"data": {
"isDebug": false,
"nodeType": "action",
"appType": "component",
"nodeName": "concatFieldtoBatch",
"valueData": {
"inputField": "[{\"攻击类型\":\"网站后门\"},{\"攻击类型\":\"网站后门\"},{\"攻击类型\":\"网站后门\"},{\"攻击类型\":\"应用白名单\"},{\"攻击类型\":\"应用白名单\"}]",
"batchSize": "2",
"concatStr": "\" ## \"",
"fieldAddPrefix": "前",
"fieldAddSuffix": "后"
},
"icon": "https://sophon-gen-v2.oss-cn-zhangjiakou.aliyuncs.com/componentUpload/1719222281702_DataFormat_logo.png?Expires=1745373374&OSSAccessKeyId=STS.NVCS************&Signature=NG4Wh%2F2zJrendn8IhShW74ymMSA%3D&security-token=CAIS2AJ1q6Ft5B2yfSjIr5X2GMPAo6xY7venWBWHjlgyQexrpZTB1Dz2IHhMenFpAegcv%2Fw%2BlGFZ6%2F8elrp6SJtIXleCZtF94oxN9h2gb4fb4xF6LjaJ0s%2FLI3OaLjKm9u2wCryLYbGwU%2FOpbE%2B%2B5U0X6LDmdDKkckW4OJmS8%2FBOZcgWWQ%2FKBlgvRq0hRG1YpdQdKGHaONu0LxfumRCwNkdzvRdmgm4NgsbWgO%2Fks0OP3AOrlrBN%2Bdiuf8T9NvMBZskvD42Hu8VtbbfE3SJq7BxHybx7lqQs%2B02c5onDWwAJu0%2FXa7uEo4wydVNjFbM9A65Dqufxn%2Fpgt%2Braj4X7xhhEIOVJSSPbSZBbSxJNvU1RXDxQVcEYWxylurjnXvF%2BA9Gz5Y%2FUGin%2B2svzhw6RGJ1dq8DgINtD0jokjPndRVbLXs84nxS7gbsGn76oY2zradH%2FdU501DLSMytAXxqAAYnrQLesLZ0VOxi7cg9LDO9w1brCl%2Fw1TxYuVpiYFJ11Kc5F2ues4ocueMk3q3AuAFpCyXW646Exz7L86%2Bp3aiLIps5ON%2FjCiP9oG8LAXI4ajG3woQPLdwm9bT20vHi4yEJYVlvntpkk5bLR5mOuE%2B6VPgmB2q2gHJTKgj13KEDwIAA%3D",
"description": "把某个字段的值分割成小批次,每个批次拼接成一个字符串",
"advance": {
"inputParamMode": false,
"onError": "stop_cur_flow",
"rspStatusType": 3,
"rspStatusThreshold": 0
},
"componentName": "DataFormat",
"actionName": "concatFieldtoBatch",
"status": "success",
"cascaderValue": []
},
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "06606aa2-6573-4fe2-83e3-2f66bb70db76",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"router": {
"name": "normal"
},
"isNode": false,
"source": {
"cell": "StartEvent_1"
},
"target": {
"cell": "a6080934-1dd4-4d87-b573-1f90be7d4535"
},
"vertices": [
{
"x": -492,
"y": 433
}
]
},
{
"position": {
"x": 198,
"y": 415
},
"size": {
"width": 36,
"height": 36
},
"attrs": {
"body": {
"fill": "white",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 2
},
"path": {
"r": 12,
"refX": "50%",
"refY": "50%",
"fill": "#63ba4d",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 4
},
"label": {
"text": "结束",
"fontSize": 12,
"refX": 0.5,
"refY": "100%",
"refY2": 4,
"textAnchor": "middle",
"textVerticalAnchor": "top"
}
},
"visible": true,
"shape": "circle",
"id": "59bc46fa-d6cb-4e89-9107-d30216c01d2b",
"zIndex": 1,
"data": {
"nodeType": "endEvent",
"appType": "basic",
"nodeName": "结束",
"icon": "icon-radio-off-full",
"description": "剧本结束节点"
},
"markup": [
{
"tagName": "circle",
"selector": "body"
},
{
"tagName": "circle",
"selector": "path"
},
{
"tagName": "text",
"selector": "label"
}
],
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "fc410d6d-ff0f-4d01-8c0b-2a2e3104d8ce",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "a6080934-1dd4-4d87-b573-1f90be7d4535"
},
"target": {
"cell": "59bc46fa-d6cb-4e89-9107-d30216c01d2b"
}
},
{
"position": {
"x": -180,
"y": -180
},
"size": {
"width": 137,
"height": 66
},
"view": "react-shape-view",
"shape": "activity",
"id": "c1fd4832-8717-44d8-9a27-dc6f45499f47",
"zIndex": 1,
"data": {
"nodeType": "action",
"appType": "component",
"nodeName": "convertToJSON",
"valueData": {
"inputData": "[{\"攻击类型\":\"网站后门\"},{\"攻击类型\":\"网站后门\"},{\"攻击类型\":\"网站后门\"},{\"攻击类型\":\"应用白名单\"},{\"攻击类型\":\"应用白名单\"}]"
},
"icon": "https://sophon-gen-v2.oss-cn-zhangjiakou.aliyuncs.com/componentUpload/1719222281702_DataFormat_logo.png?Expires=1745373374&OSSAccessKeyId=STS.NVCS************&Signature=NG4Wh%2F2zJrendn8IhShW74ymMSA%3D&security-token=CAIS2AJ1q6Ft5B2yfSjIr5X2GMPAo6xY7venWBWHjlgyQexrpZTB1Dz2IHhMenFpAegcv%2Fw%2BlGFZ6%2F8elrp6SJtIXleCZtF94oxN9h2gb4fb4xF6LjaJ0s%2FLI3OaLjKm9u2wCryLYbGwU%2FOpbE%2B%2B5U0X6LDmdDKkckW4OJmS8%2FBOZcgWWQ%2FKBlgvRq0hRG1YpdQdKGHaONu0LxfumRCwNkdzvRdmgm4NgsbWgO%2Fks0OP3AOrlrBN%2Bdiuf8T9NvMBZskvD42Hu8VtbbfE3SJq7BxHybx7lqQs%2B02c5onDWwAJu0%2FXa7uEo4wydVNjFbM9A65Dqufxn%2Fpgt%2Braj4X7xhhEIOVJSSPbSZBbSxJNvU1RXDxQVcEYWxylurjnXvF%2BA9Gz5Y%2FUGin%2B2svzhw6RGJ1dq8DgINtD0jokjPndRVbLXs84nxS7gbsGn76oY2zradH%2FdU501DLSMytAXxqAAYnrQLesLZ0VOxi7cg9LDO9w1brCl%2Fw1TxYuVpiYFJ11Kc5F2ues4ocueMk3q3AuAFpCyXW646Exz7L86%2Bp3aiLIps5ON%2FjCiP9oG8LAXI4ajG3woQPLdwm9bT20vHi4yEJYVlvntpkk5bLR5mOuE%2B6VPgmB2q2gHJTKgj13KEDwIAA%3D",
"description": "把输入数据转换为JSON类型的。如果是JSONArray,则把所有的数组直接放到datalist中。如果是JSONObject,则作为datalist的一行数据",
"advance": {
"inputParamMode": false,
"onError": "stop_cur_flow",
"rspStatusType": 3,
"rspStatusThreshold": 0
},
"componentName": "DataFormat",
"actionName": "convertToJSON",
"status": "success"
},
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "4f498976-09d4-4550-9e73-2241077b1922",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"router": {
"name": "normal"
},
"isNode": false,
"source": {
"cell": "StartEvent_1"
},
"target": {
"cell": "c1fd4832-8717-44d8-9a27-dc6f45499f47"
},
"vertices": [
{
"x": -492,
"y": -147
}
]
},
{
"position": {
"x": 121,
"y": -165
},
"size": {
"width": 36,
"height": 36
},
"attrs": {
"body": {
"fill": "white",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 2
},
"path": {
"r": 12,
"refX": "50%",
"refY": "50%",
"fill": "#63ba4d",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 4
},
"label": {
"text": "结束",
"fontSize": 12,
"refX": 0.5,
"refY": "100%",
"refY2": 4,
"textAnchor": "middle",
"textVerticalAnchor": "top"
}
},
"visible": true,
"shape": "circle",
"id": "46a3b954-56d1-4fd2-b016-08e144390137",
"zIndex": 1,
"data": {
"nodeType": "endEvent",
"appType": "basic",
"nodeName": "结束",
"icon": "icon-radio-off-full",
"description": "剧本结束节点"
},
"markup": [
{
"tagName": "circle",
"selector": "body"
},
{
"tagName": "circle",
"selector": "path"
},
{
"tagName": "text",
"selector": "label"
}
],
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "96eddfbb-e835-43e0-8d7a-df75888519fb",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "c1fd4832-8717-44d8-9a27-dc6f45499f47"
},
"target": {
"cell": "46a3b954-56d1-4fd2-b016-08e144390137"
}
},
{
"position": {
"x": 117.5,
"y": 505
},
"size": {
"width": 137,
"height": 66
},
"view": "react-shape-view",
"shape": "activity",
"id": "ec535172-836f-4e5e-9e4a-ef546f030f5d",
"zIndex": 1,
"data": {
"nodeType": "action",
"appType": "component",
"nodeName": "uniondata",
"valueData": {
"inputNodes": "[{\"fieldName\":\"leftJSON\",\"fieldValue\":\"${JSONArray:left.datalist.*}\"},{\"fieldName\":\"rightJSON\",\"fieldValue\":\"${JSONArray:right.datalist.*}\"}]"
},
"icon": "https://sophon-gen-v2.oss-cn-zhangjiakou.aliyuncs.com/componentUpload/1719222281702_DataFormat_logo.png?Expires=1745373374&OSSAccessKeyId=STS.NVCS************&Signature=NG4Wh%2F2zJrendn8IhShW74ymMSA%3D&security-token=CAIS2AJ1q6Ft5B2yfSjIr5X2GMPAo6xY7venWBWHjlgyQexrpZTB1Dz2IHhMenFpAegcv%2Fw%2BlGFZ6%2F8elrp6SJtIXleCZtF94oxN9h2gb4fb4xF6LjaJ0s%2FLI3OaLjKm9u2wCryLYbGwU%2FOpbE%2B%2B5U0X6LDmdDKkckW4OJmS8%2FBOZcgWWQ%2FKBlgvRq0hRG1YpdQdKGHaONu0LxfumRCwNkdzvRdmgm4NgsbWgO%2Fks0OP3AOrlrBN%2Bdiuf8T9NvMBZskvD42Hu8VtbbfE3SJq7BxHybx7lqQs%2B02c5onDWwAJu0%2FXa7uEo4wydVNjFbM9A65Dqufxn%2Fpgt%2Braj4X7xhhEIOVJSSPbSZBbSxJNvU1RXDxQVcEYWxylurjnXvF%2BA9Gz5Y%2FUGin%2B2svzhw6RGJ1dq8DgINtD0jokjPndRVbLXs84nxS7gbsGn76oY2zradH%2FdU501DLSMytAXxqAAYnrQLesLZ0VOxi7cg9LDO9w1brCl%2Fw1TxYuVpiYFJ11Kc5F2ues4ocueMk3q3AuAFpCyXW646Exz7L86%2Bp3aiLIps5ON%2FjCiP9oG8LAXI4ajG3woQPLdwm9bT20vHi4yEJYVlvntpkk5bLR5mOuE%2B6VPgmB2q2gHJTKgj13KEDwIAA%3D",
"description": "把多个上游的多行结果Union在一起",
"advance": {
"inputParamMode": false,
"onError": "stop_cur_flow",
"rspStatusType": 3,
"rspStatusThreshold": 0
},
"componentName": "DataFormat",
"actionName": "uniondata",
"cascaderValue": [
{
"label": "right",
"value": "${right}",
"children": [
{
"label": "right.total_data_with_dup",
"name": "right.total_data_with_dup",
"value": "${right.total_data_with_dup}"
},
{
"label": "right.total_data_successful",
"name": "right.total_data_successful",
"value": "${right.total_data_successful}"
},
{
"label": "right.status",
"name": "right.status",
"value": "${right.status}"
},
{
"label": "right.total_data",
"name": "right.total_data",
"value": "${right.total_data}"
},
{
"label": "right.datalist.*.uuid.*.uuid-key",
"name": "right.datalist.*.uuid.*.uuid-key",
"value": "${right.datalist.*.uuid.*.uuid-key}"
},
{
"label": "right.total_exe",
"name": "right.total_exe",
"value": "${right.total_exe}"
},
{
"label": "right.total_exe_successful",
"name": "right.total_exe_successful",
"value": "${right.total_exe_successful}"
},
{
"label": "right.datalist.*.host",
"name": "right.datalist.*.host",
"value": "${right.datalist.*.host}"
}
]
},
{
"label": "left",
"value": "${left}",
"children": [
{
"label": "left.total_data",
"name": "left.total_data",
"value": "${left.total_data}"
},
{
"label": "left.total_exe_successful",
"name": "left.total_exe_successful",
"value": "${left.total_exe_successful}"
},
{
"label": "left.status",
"name": "left.status",
"value": "${left.status}"
},
{
"label": "left.datalist.*.action",
"name": "left.datalist.*.action",
"value": "${left.datalist.*.action}"
},
{
"label": "left.datalist.*.uuid.*.uuid-key",
"name": "left.datalist.*.uuid.*.uuid-key",
"value": "${left.datalist.*.uuid.*.uuid-key}"
},
{
"label": "left.total_exe",
"name": "left.total_exe",
"value": "${left.total_exe}"
},
{
"label": "left.total_data_with_dup",
"name": "left.total_data_with_dup",
"value": "${left.total_data_with_dup}"
},
{
"label": "left.total_data_successful",
"name": "left.total_data_successful",
"value": "${left.total_data_successful}"
}
]
}
],
"status": "success"
},
"isNode": true
},
{
"position": {
"x": 400,
"y": 520
},
"size": {
"width": 36,
"height": 36
},
"attrs": {
"body": {
"fill": "white",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 2
},
"path": {
"r": 12,
"refX": "50%",
"refY": "50%",
"fill": "#63ba4d",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 4
},
"label": {
"text": "结束",
"fontSize": 12,
"refX": 0.5,
"refY": "100%",
"refY2": 4,
"textAnchor": "middle",
"textVerticalAnchor": "top"
}
},
"visible": true,
"shape": "circle",
"id": "598f44e2-1582-486f-95f2-23fba92d9486",
"zIndex": 1,
"data": {
"nodeType": "endEvent",
"appType": "basic",
"nodeName": "结束",
"icon": "icon-radio-off-full",
"description": "剧本结束节点"
},
"markup": [
{
"tagName": "circle",
"selector": "body"
},
{
"tagName": "circle",
"selector": "path"
},
{
"tagName": "text",
"selector": "label"
}
],
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "4a22f5d7-d8a1-416b-9969-019f530902f6",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "ec535172-836f-4e5e-9e4a-ef546f030f5d"
},
"target": {
"cell": "598f44e2-1582-486f-95f2-23fba92d9486"
}
},
{
"position": {
"x": -210,
"y": 610
},
"size": {
"width": 137,
"height": 66
},
"view": "react-shape-view",
"shape": "activity",
"id": "7de7117c-1da6-4d03-8a09-b761114a7b05",
"zIndex": 1,
"data": {
"nodeType": "action",
"appType": "component",
"nodeName": "formatdata",
"valueData": {
"outputFields": "[{\"fieldName\":\"name\",\"fieldValue\":\"test\"},{\"fieldName\":\"age\",\"fieldValue\":\"18\"}]"
},
"icon": "https://sophon-gen-v2.oss-cn-zhangjiakou.aliyuncs.com/componentUpload/1719222281702_DataFormat_logo.png?Expires=1745373374&OSSAccessKeyId=STS.NVCS************&Signature=NG4Wh%2F2zJrendn8IhShW74ymMSA%3D&security-token=CAIS2AJ1q6Ft5B2yfSjIr5X2GMPAo6xY7venWBWHjlgyQexrpZTB1Dz2IHhMenFpAegcv%2Fw%2BlGFZ6%2F8elrp6SJtIXleCZtF94oxN9h2gb4fb4xF6LjaJ0s%2FLI3OaLjKm9u2wCryLYbGwU%2FOpbE%2B%2B5U0X6LDmdDKkckW4OJmS8%2FBOZcgWWQ%2FKBlgvRq0hRG1YpdQdKGHaONu0LxfumRCwNkdzvRdmgm4NgsbWgO%2Fks0OP3AOrlrBN%2Bdiuf8T9NvMBZskvD42Hu8VtbbfE3SJq7BxHybx7lqQs%2B02c5onDWwAJu0%2FXa7uEo4wydVNjFbM9A65Dqufxn%2Fpgt%2Braj4X7xhhEIOVJSSPbSZBbSxJNvU1RXDxQVcEYWxylurjnXvF%2BA9Gz5Y%2FUGin%2B2svzhw6RGJ1dq8DgINtD0jokjPndRVbLXs84nxS7gbsGn76oY2zradH%2FdU501DLSMytAXxqAAYnrQLesLZ0VOxi7cg9LDO9w1brCl%2Fw1TxYuVpiYFJ11Kc5F2ues4ocueMk3q3AuAFpCyXW646Exz7L86%2Bp3aiLIps5ON%2FjCiP9oG8LAXI4ajG3woQPLdwm9bT20vHi4yEJYVlvntpkk5bLR5mOuE%2B6VPgmB2q2gHJTKgj13KEDwIAA%3D",
"description": "产生一个新的数据",
"advance": {
"inputParamMode": false,
"onError": "stop_cur_flow",
"rspStatusType": 3,
"rspStatusThreshold": 0
},
"componentName": "DataFormat",
"actionName": "formatdata",
"status": "success",
"cascaderValue": [],
"isDebug": false
},
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "4136040c-0b42-4557-94bb-8b77b6f5f3c5",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"router": {
"name": "normal"
},
"isNode": false,
"source": {
"cell": "StartEvent_1"
},
"target": {
"cell": "7de7117c-1da6-4d03-8a09-b761114a7b05"
},
"vertices": [
{
"x": -492,
"y": 643
}
]
},
{
"position": {
"x": 71,
"y": 625
},
"size": {
"width": 36,
"height": 36
},
"attrs": {
"body": {
"fill": "white",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 2
},
"path": {
"r": 12,
"refX": "50%",
"refY": "50%",
"fill": "#63ba4d",
"strokeOpacity": 0.95,
"stroke": "#63ba4d",
"strokeWidth": 4
},
"label": {
"text": "结束",
"fontSize": 12,
"refX": 0.5,
"refY": "100%",
"refY2": 4,
"textAnchor": "middle",
"textVerticalAnchor": "top"
}
},
"visible": true,
"shape": "circle",
"id": "8978b5d1-3cae-4e43-98d0-aca302555856",
"zIndex": 1,
"data": {
"nodeType": "endEvent",
"appType": "basic",
"nodeName": "结束",
"icon": "icon-radio-off-full",
"description": "剧本结束节点"
},
"markup": [
{
"tagName": "circle",
"selector": "body"
},
{
"tagName": "circle",
"selector": "path"
},
{
"tagName": "text",
"selector": "label"
}
],
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "fe238014-7582-4482-b9d4-cf20cbc40e53",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "7de7117c-1da6-4d03-8a09-b761114a7b05"
},
"target": {
"cell": "8978b5d1-3cae-4e43-98d0-aca302555856"
}
},
{
"position": {
"x": -380,
"y": 500
},
"size": {
"width": 137,
"height": 66
},
"view": "react-shape-view",
"shape": "activity",
"id": "b300fedc-d828-413c-b593-153dbda5ed1a",
"zIndex": 1,
"data": {
"nodeType": "action",
"appType": "component",
"nodeName": "left",
"valueData": {
"inputData": "[{\"action\":\"11\",\"uuid\":[{\"uuid-key\":\"1\"}]},{\"action\":\"21\",\"uuid\":[{\"uuid-key\":\"2\"}]}]"
},
"icon": "https://sophon-gen-v2.oss-cn-zhangjiakou.aliyuncs.com/componentUpload/1719222281702_DataFormat_logo.png?Expires=1745373374&OSSAccessKeyId=STS.NVCS************&Signature=NG4Wh%2F2zJrendn8IhShW74ymMSA%3D&security-token=CAIS2AJ1q6Ft5B2yfSjIr5X2GMPAo6xY7venWBWHjlgyQexrpZTB1Dz2IHhMenFpAegcv%2Fw%2BlGFZ6%2F8elrp6SJtIXleCZtF94oxN9h2gb4fb4xF6LjaJ0s%2FLI3OaLjKm9u2wCryLYbGwU%2FOpbE%2B%2B5U0X6LDmdDKkckW4OJmS8%2FBOZcgWWQ%2FKBlgvRq0hRG1YpdQdKGHaONu0LxfumRCwNkdzvRdmgm4NgsbWgO%2Fks0OP3AOrlrBN%2Bdiuf8T9NvMBZskvD42Hu8VtbbfE3SJq7BxHybx7lqQs%2B02c5onDWwAJu0%2FXa7uEo4wydVNjFbM9A65Dqufxn%2Fpgt%2Braj4X7xhhEIOVJSSPbSZBbSxJNvU1RXDxQVcEYWxylurjnXvF%2BA9Gz5Y%2FUGin%2B2svzhw6RGJ1dq8DgINtD0jokjPndRVbLXs84nxS7gbsGn76oY2zradH%2FdU501DLSMytAXxqAAYnrQLesLZ0VOxi7cg9LDO9w1brCl%2Fw1TxYuVpiYFJ11Kc5F2ues4ocueMk3q3AuAFpCyXW646Exz7L86%2Bp3aiLIps5ON%2FjCiP9oG8LAXI4ajG3woQPLdwm9bT20vHi4yEJYVlvntpkk5bLR5mOuE%2B6VPgmB2q2gHJTKgj13KEDwIAA%3D",
"description": "把输入数据转换为JSON类型的。如果是JSONArray,则把所有的数组直接放到datalist中。如果是JSONObject,则作为datalist的一行数据",
"advance": {
"inputParamMode": false,
"onError": "stop_cur_flow",
"rspStatusType": 3,
"rspStatusThreshold": 0
},
"componentName": "DataFormat",
"actionName": "convertToJSON",
"status": "success"
},
"isNode": true
},
{
"position": {
"x": -80,
"y": 505
},
"size": {
"width": 137,
"height": 66
},
"view": "react-shape-view",
"shape": "activity",
"id": "c5baaffa-df7e-47f4-851d-7289276ad76b",
"zIndex": 1,
"data": {
"nodeType": "action",
"appType": "component",
"nodeName": "right",
"valueData": {
"inputData": "[{\"uuid\":[{\"uuid-key\":\"1\"}],\"host\":\"196.1.*.*\"},{\"uuid\":[{\"uuid-key\":\"1\"}],\"host\":\"196.2.*.*\"}]"
},
"icon": "https://sophon-gen-v2.oss-cn-zhangjiakou.aliyuncs.com/componentUpload/1719222281702_DataFormat_logo.png?Expires=1745373374&OSSAccessKeyId=STS.NVCS************&Signature=NG4Wh%2F2zJrendn8IhShW74ymMSA%3D&security-token=CAIS2AJ1q6Ft5B2yfSjIr5X2GMPAo6xY7venWBWHjlgyQexrpZTB1Dz2IHhMenFpAegcv%2Fw%2BlGFZ6%2F8elrp6SJtIXleCZtF94oxN9h2gb4fb4xF6LjaJ0s%2FLI3OaLjKm9u2wCryLYbGwU%2FOpbE%2B%2B5U0X6LDmdDKkckW4OJmS8%2FBOZcgWWQ%2FKBlgvRq0hRG1YpdQdKGHaONu0LxfumRCwNkdzvRdmgm4NgsbWgO%2Fks0OP3AOrlrBN%2Bdiuf8T9NvMBZskvD42Hu8VtbbfE3SJq7BxHybx7lqQs%2B02c5onDWwAJu0%2FXa7uEo4wydVNjFbM9A65Dqufxn%2Fpgt%2Braj4X7xhhEIOVJSSPbSZBbSxJNvU1RXDxQVcEYWxylurjnXvF%2BA9Gz5Y%2FUGin%2B2svzhw6RGJ1dq8DgINtD0jokjPndRVbLXs84nxS7gbsGn76oY2zradH%2FdU501DLSMytAXxqAAYnrQLesLZ0VOxi7cg9LDO9w1brCl%2Fw1TxYuVpiYFJ11Kc5F2ues4ocueMk3q3AuAFpCyXW646Exz7L86%2Bp3aiLIps5ON%2FjCiP9oG8LAXI4ajG3woQPLdwm9bT20vHi4yEJYVlvntpkk5bLR5mOuE%2B6VPgmB2q2gHJTKgj13KEDwIAA%3D",
"description": "把输入数据转换为JSON类型的。如果是JSONArray,则把所有的数组直接放到datalist中。如果是JSONObject,则作为datalist的一行数据",
"advance": {
"inputParamMode": false,
"onError": "stop_cur_flow",
"rspStatusType": 3,
"rspStatusThreshold": 0
},
"componentName": "DataFormat",
"actionName": "convertToJSON",
"status": "success"
},
"isNode": true
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "a8104b42-f869-4296-9681-f67f4f59ecef",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"router": {
"name": "normal"
},
"isNode": false,
"source": {
"cell": "StartEvent_1"
},
"target": {
"cell": "b300fedc-d828-413c-b593-153dbda5ed1a"
},
"vertices": [
{
"x": -492,
"y": 533
}
]
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "c20d8dea-c711-4cc3-b6ea-f86033954390",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "b300fedc-d828-413c-b593-153dbda5ed1a"
},
"target": {
"cell": "c5baaffa-df7e-47f4-851d-7289276ad76b"
}
},
{
"shape": "custom-edge",
"attrs": {
"line": {
"stroke": "#63ba4d",
"targetMarker": {
"stroke": "#63ba4d"
}
}
},
"zIndex": 1,
"id": "c00c6197-85b7-486b-8771-3daa3fdb243e",
"data": {
"nodeType": "sequenceFlow",
"appType": "basic",
"icon": "icon-upper-right-arrow",
"isRequired": false
},
"isNode": false,
"source": {
"cell": "c5baaffa-df7e-47f4-851d-7289276ad76b"
},
"target": {
"cell": "ec535172-836f-4e5e-9e4a-ef546f030f5d"
}
}
]
}
joindata
将多张表进行join连接,并将指定的字段进行输出。
参数说明
参数 | 描述 |
inputNodes |
|
joinFields |
|
outputFields | join完成后要输出的字段,引用格式为[nodeName].[fieldName]。 |
示例
示例场景如下:
前置数据节点分别nodeName为leftJSON和rightJSON,数据格式如下:
leftJSON:[{"action":"11","uuid":[{"uuid-key":"1"}]},{"action":"21","uuid":[{"uuid-key":"2"}]}]。
rightJSON:[{"uuid":[{"uuid-key":"1"}],"host":"196.1.*.*"},{"uuid":[{"uuid-key":"1"}],"host":"196.2.*.*"}]。
根据uuid进行关联进行join链接。
输出字段配置:将rightJSON的host输出为myhost字段,leftJSON的action字段输出为myaction字段,leftJSON的uuid映射为uuid字段。
参数 | 参数值 |
inputNodes | 两行数据,数据配置如下:
说明 "JSONArray:"表示将参数进行类型转换转为JSONArray,否则无法完成拉取前置节点数据。 |
joinFields | 左输入框:leftJSON.uuid,右输入框:rightJSON.uuid。 |
outputFields | 三行数据,数据配置如下: 左输入框:myhost,右输入框:rightJSON.host。 左输入框:myaction,右输入框:leftJSON.action。 左输入框:uuid,右输入框:leftJSON.uuid。 |
示例输出结果如下:
[
{
"myaction": "11",
"uuid": [
{
"uuid-key": "1"
}
],
"myhost": "196.1.*.*"
},
{
"myaction": "11",
"uuid": [
{
"uuid-key": "1"
}
],
"myhost": "196.2.*.*"
}
]
groupbydata
将输入的数据根据某个key进行分组。
参数说明
参数 | 描述 |
inputNode | 输入的内容,格式为包含多个JSON的JsonArray。 |
groupByKeys | 要分组的key值。 |
outputFields | 分组后输出的内容,支持jq表达式。 |
示例
示例场景如下:
输入的内容包inputNode含攻击类型、攻击次数count、endTime等信息。
分组字段为攻击类型。配置:
输出字段配置:count相加输出为攻击次数,选择最近的endTime输出我为最新攻击时间。
参数 | 参数值 |
inputNode |
|
groupByKeys | 攻击类型 |
outputFields | 说明 使用jq表达式处理inputNode输入JSON数据:
|
示例输出结果如下:
[
{
"攻击类型": "网站后门",
"攻击次数": 2,
"最新攻击时间": 1646115503000
},
{
"攻击类型": "应用白名单",
"攻击次数": 1,
"最新攻击时间": 1646114098000
}
]
concatFiledtoBatch
对输入数据中的value进行分批拼接。
参数说明
参数 | 描述 |
inputField | 要拼接的内容,格式为包含多个JSON的JsonArray。 |
batchSize | 批量拼接的数量,如2表示 2个JSON拼成一个;-1表示所有拼成一个。 |
concatStr | 拼接符,如果拼接符需要前后有空格,可以用双引号进行包括,此时不会忽略空格。如:" ## " |
fieldAddPrefix | 拼接后加的前缀。 |
fieldAddSuffix | 拼接后加的后缀。 |
示例
示例场景如下:
将输入字段(inputField
)中的攻击类型,按每两条一组进行拼接,每组数据使用" ## "
连接,并为每组结果添加统一前缀"前"
和后缀"后"
。
参数 | 参数值 |
inputField |
|
batchSize | 2 |
concatStr | " ## " |
fieldAddPrefix | 前 |
fieldAddSuffix | 后 |
示例输出结果如下:
[
{
"concatField": "前网站后门后\" ## \"前网站后门后"
},
{
"concatField": "前网站后门后\" ## \"前应用白名单后"
},
{
"concatField": "前应用白名单后"
}
]
leftJoin
以左节点为主表进行join左连接。
参数说明
参数 | 描述 |
leftNode |
|
rightNode |
|
joinFields |
|
leftOutputFilelds | 左节点要输出的字段,支持key转换。左侧配置框为新名称,右侧配置矿为原始字段。 说明
|
rightOutputFields | 右节点要输出的字段,支持key转换。支持名称key转换。左侧配置框为新名称,右侧配置矿为原始字段。 说明
|
示例
示例场景如下:
leftNode包含action、uuid(包含嵌套数据uuid-key),rightNode包含uuid、host。
以leftNode的uuid作为连接字段。
输出数据:leftNode输出action、uuid的value值,不改变key名称,rightNode输出host的value值并更名为“站点”。
参数 | 参数值 |
leftNode | 说明 以下数据需要先做类型转换,转为JsonArray对象类型
|
rightNode | 说明 以下数据需要先做类型转换,转为JsonArray对象类型
|
joinFields | 左输入框:leftNode.uuid,右输入框:rightNode.uuid。 |
leftOutputFilelds | 左输入框:*,右输入框:action,uuid。 |
rightOutputFields | 左输入框:站点,右输入框:host。 |
示例输出结果如下:
[
{
"action": "11",
"uuid": [
{
"uuid-key": "1"
}
],
"站点": "196.1.*.*"
},
{
"action": "11",
"uuid": [
{
"uuid-key": "1"
}
],
"站点": "196.2.*.*"
},
{
"action": "21",
"uuid": [
{
"uuid-key": "2"
}
]
}
]
convertToJson
将传入的JSON字符串转为JSON对象,仅做类型转换。
如果是JSONArray,则把所有的数组直接放到datalist中。
如果是JSONObject,则作为datalist的一行数据。
uniondata
把多个行数据组合在一起。
参数说明
参数 | 描述 |
inputNodes | 参与组合的节点数据。 |
示例
示例说明如下:
前置数据节点分别nodeName为left和right,数据格式如下:
left:[{"action":"11","uuid":[{"uuid-key":"1"}]},{"action":"21","uuid":[{"uuid-key":"2"}]}]。
right:[{"uuid":[{"uuid-key":"1"}],"host":"196.1.*.*"},{"uuid":[{"uuid-key":"1"}],"host":"196.2.*.*"}]
参数 | 参数值 |
inputNodes | 两行数据,数据配置如下: 左输入框:leftJSON,右输入框:${JSONArray:left.datalist.*}。 左输入框:rightJSON,右输入框:${JSONArray:right.datalist.*}。 说明
|
示例输出结果如下:
[
{
"action": "11",
"uuid": [
{
"uuid-key": "1"
}
]
},
{
"action": "21",
"uuid": [
{
"uuid-key": "2"
}
]
},
{
"uuid": [
{
"uuid-key": "1"
}
],
"host": "196.1.*.*"
},
{
"uuid": [
{
"uuid-key": "1"
}
],
"host": "196.2.*.*"
}
]
formatdata
数据转换或者聚合多个数据
参数
参数 | 描述 |
inputNodes | 需要格式化的数据节点。 |
示例
参数 | 参数值 |
inputNodes | 两行数据,数据配置如下: 左输入框:name,右输入框:test 左输入框:age,右输入框:18 |
示例输出结果如下:
{
"name": "test",
"age": "18"
}