版本比较

标识

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

目录

1.HCM机器人所在位置

token已无效化处理

系统设置 → > 基础服务 →> 机器人设置

2.HCM机器人存在背景

...

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



4.配置 说明

命名一个机器人,基础服务-机器人设置-点击新增

备注:唯一key值,一般  执行同步任务的机器人用到的是名称做为唯一标识,异步WS任务绑定机器人的id作为唯一标识,即shortcut_id。

...

代码块
languagejson
themeMidnight
titleaction 配置示例二
{
    "actions": [ {
        "key": "exec2",
        "action": "SHORTCUT",
        "condition": "MULTI_ITEM",
        "label": "test2",
        "options": {
            "name": "机器人脚本示例",
            "params": "=function(){return {'node_ids':ITEMS()}}"
        }
    }]
}


具体按钮参考地址:https://inspur6.hcmcloud.cn/#/common_model_list?model=TestModel

参数名类型说明
shortcut_id
intHCM机器人ID
params
dict传入参数
namestr机器人名称
stages
list任务list,里面包含了多个任务的详细信息,每个任务对应一个dict

以上我们说明了 机器人在元数据按钮的配置方式, 包括同步和异步两个示例都可使用,那么接下来将对 内部机器人的脚本进行说明。



2、脚本配置参数

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 为报错堆栈信息 固定写法

stages.condition表达式/boolean是否跳过此任务

3. 脚本配置 示例


outputstages下meta返回值

context   上下文

message   输出执行消息

 例子:"output": { "context": { "info": "=ret" }

ret为固定变量,即stages下meta的返回值,此配置代表将返回值给到环境变量中,下一个任务可以调用使用


配置举例一:

需求:选中自定义模型TestModel下的数据,将该条TestModel模型下note备注字段编辑成: 已完成{}的查验

1、在list层配置调取机器人按钮:

代码块
代码块
languagejson
themeMidnight
titleHCM机器人脚本示例一
{
    "return": {
        "x_mobilekey": "=x_mobileexec2",
    },
    "stagesaction": [{"SHORTCUT",
        "metacondition": {"MULTI_ITEM",
        "label": "test2",
        "urloptions": "https://lizhongjie.hcmcloud.cn",{
            "name": "hcm.model.list机器人脚本示例",
            "paramparams": "=function(){return {'node_ids':ITEMS()}}"
        }
        "model": "}

此时调用了名称为:机器人脚本示例的机器人,将参数node_ids传入机器人中

2、新增一个机器人脚本示例的机器人

机器人设置-新增

Image Added

3、设置对应脚本

代码块
{Employee",
        "stages": [{
        "filter_dictmeta": {
                    "name": "李中杰hcm.model.edit",
                }
 "param": {
           },
            "token"id_": "hcmf214e3bb9830f574a89e52c476b58c7c56cade3d"
        },
 =ITER_V['id']",
       "name": "取外部数据",
        "engineinfo": "RemoteAPI",{
        "output": {
            "contextnote": "='已完成{}的查验'.format(str(ITER_V.get('employee',{}).get('name')))"
                },
                "model": "TestModel"
            }
        },
        "name": "机器人脚本示例",
        "engine": "OpenAPI",
        "iterator": "=node_ids"
    }]
}

配置解读:

1、首先机器人格式是一个json,json里面包含stages,stages对应一个个任务。

2、任务里有几个参数:1、engine:因为我们调取内部的api,所以engine对应的是OPenAPI

                                              2、name:任务名称

                                              3、meta:包含单个任务的执行信息

                                                                   "name":"hcm.model.edit" #调用api名字,

                                                                   "param":{ "id_": "=ITER_V['id']", "info": { "note": "='已完成{}的查验'.format(str(ITER_V.get('employee',{}).get('name')))" }, "model": "TestModel" } #调用api参数

                                            4、iterator: 因为选中的数据是多条,需要多条数据的迭代编辑,需要设置迭代的内容即迭代list。因为我们上一步自定义按钮将选中的数据放在node_ids参数中,

                                                                      所以配置 "iterator": "=node_ids"

4、执行效果:

Image Added


配置举例二:

机器人设计规则:

1)取外部inspur6环境下车厘子的信息

2)取不到把错误信息填入到SyncOuterRecord模型日志下,能取到返回人员id信息

3)调用之前定义的机器人脚本示例 机器人脚本

4)利用机器人发消息配置给系统发送消息

5)机器人最后返回人员id


注意:上下文传递信息主要写在output中

代码块
languagejson
themeMidnight
titleHCM机器人脚本示例一
{
    "return": {
        "id": "x_ID"
    },
    "stages": [{
        "meta": {
            "url": "https://inspur6.hcmcloud.cn",
            "name": "hcm.model.list",
            "param": {
                "model": "Employee",
                "filter_dict": {
                    "name": "车厘子"
                }
            },
            "token": "hcm0af7a67123aa3352d74b3434596b1443sdf"
        },
        "name": "取外部数据",
        "engine": "RemoteAPI",
        "output": {
            "context": {
                "x_ID": "=ret['list'][0]['id']"
            },
            "message": "='共{}条记录'.format(ret['count'])"
        }
    }, {
        "meta": {
            "name": "hcm.model.get",
            "param": {
                "id_": "=x_ID",
   {
                 "x_IDmodel": "=ret['list'][0]['id']Employee"
            },
        },
        "messagename": "='共{}条记录'.format(ret['count'])"查看本系统是否有该数据",
        }"error": {
    }, {
        "metaignore": {true,
            "namecontext": "hcm.model.get",
{
                "paramis_error": {true,
                "idget_mobile_error": "=x_ID",
err"
            }
        },
         "modelengine": "EmployeeOpenAPI",
        "output": {
    }
        },
 "context": {
       "name": "查看本系统是否有该数据",
        "is_error": {false,
                "ignoreemployee_id": true,"=ret['list'][0]['id']"
            "context": {},
                "is_error"message": true,"='共{}条记录'.format(ret['count'])"
        }
        "get_mobile_error": "=err"
       }, {
     }
   "meta": {
    },
        "enginename": "OpenAPIhcm.model.create",
            "outputparam": {
                "contextinfo": {
                    "is_errorname": false"机器人测试日志",
                "employee_id": "=ret['list'][0]['id']"
   "type": 2,
        },
            "messagecontent": "='共{}条记录'.format(ret['count'])"

            }
            }, {
"get_mobile_error": "=str(get_mobile_error)"
         "meta": {
          }
  "name": "hcm.model.create",
            "param": { },
                "infomodel": {"SyncOuterRecord"
            }
        "name": "机器人测试日志"},
            "name": "记录日志",
        "typeengine": 2"OpenAPI",
          "output": {},
         "contentcondition": {
"=is_error"
    }, {
        "meta": {
            "get_mobile_errorname": "=str(get_mobile_error)"机器人脚本示例",
            "param": {
       }
            "node_ids": [{
    },
                "modelid": "SyncOuterRecord"402186251,
             }
        },
  "employee": {
      "name": "记录日志",
        "engine": "OpenAPI",
        "outputname": {},"梁天华"
        "condition": "=is_error"
    }, {
        "meta": {}
              "name": "HCM机器人迭代模式",
   }]
           "param": {}
        },
        "name": "调用其他机器人",
        "engine": "Shortcut"
    }, {
        "meta": {
            "to": 1508957,
    {
        "metasender": {1508957,
            "contextcontent": "本次HCM机器人演示成功",
			"to":12212
        },
        "name": "发送消息",
        "engine": "Message"
    }],
    "context": {}
}  

配置地址:https://inspur6.hcmcloud.cn/#/pc/setting/setting.hcm_shortcut?page_index=1&page_size=20


配置举例三:

机器人设计规则:

1)将语种代码项下的描述编辑成:描述:xx

代码块
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"
    }]
}

机器人异步模式:

代码块
languagejson
themeMidnight
titleHCM机器人示例三 异步模式
{
    "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": "循环编辑代码项",
        "queue": "syn",
        "engine": "OpenAPI",
        "output": {
            "message": "='编辑代码项{}完成'.format(ret['name'])"
        },
        "parallel": "=basic_item_info"
    }]
}