版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

HCM机器人可实现连式任务调度,在页面上想看到进度条的任务调度,想实现云函数的逻辑但是又不会写云函数,想仅仅通过配置即可达到云函数的效果,

3.HCM机器人 特点

Image RemovedImage Added

特点:

1.其特点在于 任务有顺序执行, 单条链路执行不可分叉,不可同步

2.针对于单个任务 有高级用法 迭代模式/同步模式

3.开始执行前可预置一些参数 这些参数统一放在参数池context中 这些参数统一放在上下文context中 可供下次任务执行使用

4.每次任务执行可从 参数池获取 参数使用, 在任务结束时可放入新的参数

...

7.参数池 包含哪些参数?  1.传入的params, 2.机器人脚本里面的context, 3.self.context (这里面可就丰富了 当前登录人信息,权限,公司信息,等等)


4.配置 说明

我们重点描述 脚本怎么配置

  1. action 配置
代码块
languagejson
themeMidnight
titleaction 配置示例一
{
    "actions": [{
        "action": "SHORTCUT",
        "condition": "MULTI_ITEM",
        "label": "test1",
        "key": "test1",
        "options": {
            "name": "机器人脚本示例",   #机器人名称用于确定使用的是那个机器人
            "params": "=function(params){let _ret={items:params.selected.map(v=>v.id)};return _ret}" #params 将作为参数加入到参数池
        }
    }]
}

...

代码块
languagejson
themeMidnight
titleaction 配置示例二
{
            "key": "exec",
            "action": "CALC",
            "condition": "ITEM",
            "label": "test2",
            "api": "hcm.shortcut.exec",
            "params": "=(context)=>{return {shortcut_id:3,params:{'a':1}}}" #shortcut_id 作为确定是那个机器人也可以换成name,这样也可以确定机器人,内部的params将作为参数加入到参数池
        }



参数名类型说明
shortcut_id
intHCM机器人ID
params
dict传入参数
namestr机器人名称
stages
list如果不为None 那么只会执行这个列表内的任务
intHCM机器人ID
params
dict传入参数
namestr机器人名称
stages
list如果不为None 那么只会执行这个列表内的任务


以上我们说明了 机器人在元数据的配置, 两个示例都可使用,那么接下来将对 机器人脚本进行说明

2.脚本配置参数

脚本配置参数路径类型说明
stageslist任务list,里面包含了多个任务的详细信息,每个任务对应一个dict
contextdict脚本预制上下文
returnlist返回值字典
stages.metadict单个任务接口信息需要 name (接口名称)和 param (接口参数)在Message引擎下 有to(目标人ID,缺省发给自己) 和context(消息内容) 两个参数
stages.namestr单个任务名称 会在执行过程中提示任务执行情况
stages.enginestr任务接口引擎
OpenAPI:本系统接口。
RemoteAPI:外系统接口 使用这个引擎 stages.meta 里面需要有url 和token 
Shortcut:调用其他的HCM机器人,在这里stages.meta.name 是其他机器人的名称,
Message:发送消息 这个引擎下stages.meta 
有两个参数 to (发送消息目标人的ID,没有这个参数时发给自己)context 发送内容
stages.outputdict本任务执行结束输出的内容包含两个参数message 页面消息提示 ,context 类型为dict (本任务结束将一些参数放入上下文中)
stages.iterator表达式/可迭代对象根据迭代对象 循环执行

ITER_V 特定写法stages.iterator 单元值

ITER_I 特定写法stages.iterator 单元值 的index   比如list 的index

stages.parallel表达式/可迭代对象根据迭代对象 循环执行加入队列

ITER_V 特定写法stages.iterator 单元值

ITER_I 特定写法stages.iterator 单元值 的index   比如list 的index

stages.queuestr只有定义了stages.parallel 才有用到意思是在什么队列执行缺省
shortcut队列

stages.errordict任务执行失败需要的操作

包含两个参数 ignore 执行失败 是否跳过,跳过就继续执行下面的任务,不跳过整个将结束,没有这个参数也将直接结束

context 是将一些参数 放入上下文中 在这里  err 为报错堆栈信息 固定写法

3. 脚本配置 示例以上我们说明了 机器人在元数据的配置, 两个示例都可使用,那么接下来将对 机器人脚本进行说明

代码块
languagejson
themeMidnight
titleHCM机器人脚本示例一
{
    "return": {
        "x_mobile": "=x_mobile"
    },
    "stages": [{
        "meta": {
            "url": "https://lizhongjie.hcmcloud.cn",
            "name": "hcm.model.list",
            "param": {
                "model": "Employee",
                "filter_dict": {
                    "name": "李中杰"
                }
            },
            "token": "hcmf214e3bb9830f574a89e52c476b58c7c56cade3d"
        },
        "name": "取外部数据",
        "engine": "RemoteAPI",
        "output": {
            "context": {
                "x_ID": "=ret['list'][0]['id']"
            },
            "message": "='共{}条记录'.format(ret['count'])"
        }
    }, {
        "meta": {
            "name": "hcm.model.get",
            "param": {
                "id_": "=x_ID",
                "model": "Employee"
            }
        },
        "name": "查看本系统是否有该数据",
        "error": {
            "ignore": true,
            "context": {
                "is_error": true,
                "get_mobile_error": "=err"
            }
        },
        "engine": "OpenAPI",
        "output": {
            "context": {
                "is_error": false,
                "employee_id": "=ret['list'][0]['id']"
            },
            "message": "='共{}条记录'.format(ret['count'])"
        }
    }, {
        "meta": {
            "name": "hcm.model.create",
            "param": {
                "info": {
                    "name": "机器人测试日志",
                    "type": 2,
                    "content": {
                        "get_mobile_error": "=str(get_mobile_error)"
                    }
                },
                "model": "SyncOuterRecord"
            }
        },
        "name": "记录日志",
        "engine": "OpenAPI",
        "output": {},
        "condition": "=is_error"
    }, {
        "meta": {
            "name": "HCM机器人迭代模式",
            "param": {}
        },
        "name": "调用其他机器人",
        "engine": "Shortcut"
    }, {
        "meta": {
            "context": "本次HCM机器人演示成功",
			"to":12212
        },
        "name": "发送消息",
        "engine": "Message"
    }],
    "context": {}
}   


代码块
languagejson
themeMidnight
titleHCM机器人示例2 迭代模式
{
    "stages": [{
        "meta": {
            "name": "hcm.model.list",
            "param": {
                "model": "common_basic_item_data.语种",
                "page_size": 999
            }
        },
        "name": "部署元数据",
        "engine": "OpenAPI",
        "output": {
            "context": {
                "basic_item_info": "=ret['list']"
            },
            "message": "='共获取{}条数据'.format(len(ret['list']))"
        }
    }, {
        "meta": {
            "name": "hcm.model.edit",
            "param": {
                "id_": "=ITER_V['id']",
                "info": {
                    "description": "='第二次,{}'.format(ITER_V['name'])"
                },
                "model": "common_basic_item_data.语种"
            }
        },
        "name": "循环编辑代码项",
        "engine": "OpenAPI",
        "output": {
            "message": "='编辑代码项{}完成'.format(ret['name'])"
        },
        "iterator": "=basic_item_info"
    }]
}

...