事件目标(WebAPI)

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

事件目标(WebAPI)

变更记录


产品版本

更新内容更新日期
V6.0.13初始版本2024年6月13日




1 简介

1.1 功能介绍

事件触发时,通过调用第三方系统的API服务将事件消息准确传递至第三方系统


1.2 应用场景

跨系统数据同步、跨系统关联交易等需要将事件消息实时同步到第三方系统的场景。


1.3 系统路径

【集成服务云】→【事件网格】→【事件订阅(事件目标-WebAPI)】


1.4 关键字段/按钮说明

1.4.1 关键字段说明

字段名称详细解释
基本信息
目标API事件目标需要调用的API,由目标系统提供API服务,可从【WebAPI登记】列表中选择
目标数据源事件需要触达的目标系统环境
请求类型目标API的请求类型,根据所选API自动带出
域名端口目标API的请求域名和端口,根据所选目标数据源自动带出
URI目标API的URI地址,根据所选API自动带出
参数赋值
参数名称
需要赋值的API请求参数名称,根据所选API自动带出
参数类型API请求参数的类型,根据所选API自动带出
参数描述API请求参数的描述,根据所选API自动带出
多值API请求参数是否多值,根据所选API自动带出
必填
API请求参数是否必填,根据所选API自动带出
参数赋值给API请求参数赋参数值,支持常量值、事件参数变量、函数表达式
赋值脚本通过脚本代码编写API请求参数的赋值逻辑,主要面向复杂的赋值场景
请求断言
断言脚本
通过脚本代码编写API请求结果断言


2 主要操作

2.1 配置WebAPI事件目标

前提条件

目标API已经在【事件网格】->【连接资源】->【WebAPI登记】列表中维护,操作指引详见:WebAPI登记


操作步骤

步骤1:选择目标API。

步骤2:检查API带出的目标数据源是否指向目标系统环境,此处可重新选择目标数据源。

步骤3:进行API参数赋值,确保运行时API能正常调用,事件正常传递至事件目标。需要赋值的参数已自动显示在列表,URL参数、请求头、请求体都可能需要赋值,请切换Tab进行检查避免赋值遗漏。


API参数赋值参数赋值、赋值脚本、参数赋值和赋值脚本同时使用。

1)参数赋值:填写列表中“参数赋值”字段,支持录入常量值、事件参数变量、简单的函数表达式。


特别注意:

1、API请求参数中如涉及树形单据体赋值时建议先赋值父属性再赋值子属性,才能确保正常按行赋值。如果不赋值父属性直接赋值子属性,则只会取某个参数值赋给子属性。

举个例子:被赋值对象 A=[{"a":"xxx","b":"xxx"}],赋值对象 B= [{"c":"x1","d":"y1"},{"c":"x2","d":"y2"}] 

【方式一】赋值父属性:A = B,a =c,b = d 

                 赋值结果为:A = [{"a":"x1","b":"y1"},{"a":"x2","b":"y2"}] 

【方式二】不赋值父属性:a=c,b =d 

                 赋值结果为:A = [{"a":["x1","x2"],"b":["y1","y2"]}]


2)赋值脚本:对于复杂的赋值场景,如复杂的逻辑运算、调用微服务、调用WebAPI等,可通过编写脚本代码对API请求参数赋值。

  • 脚本可用变量包括事件参数($data)、上下文参数($event)、API请求头参数($header)、API请求体参数($body)、API请求URL参数($queryString)。

  • 脚本直接编写逻辑,对 $header/$body/$queryString 进行赋值即可,无需Return。

    注意:脚本中取到$header、$body、$queryString这几个变量时,已包含上面列表参数赋值结果。

  • 运行顺序为 列表参数赋值 > 赋值脚本 > 拿$header、$body、$queryString进行WebAPI调用。

  • 若某个参数同时被列表参数赋值和脚本赋值,脚本中的赋值将覆盖列表参数赋值,最终调用API时采用脚本中的赋值结果。


【参考案例】

某订阅需要调用“销售出库单保存”API接口,若其API请求体中的销售订单单据体使用列表参数赋值完成,但物料分录需要调用另外的“查询物料信息”接口获取。所以拆解赋值脚本中关键步骤包括:

① 调用“获取销售订单明细”API,根据单据号查询完整物料分录。

② 整合返回的物料分录,适配“销售出库单保存”请求体格式。

③ 补充物料分录至请求体$body,确保数据完整准确后执行保存API调用。

赋值脚本如下:

//通过微服务调用WebAPI,获取销售订单物料明细
var number = "getOrderProduct";
var body ={
    "data":{
        "search_query_info":{
            "orders":[
                {}
            ],
            "filters":[
                {
                    "field_values":[
                        //传入事件参数中销售订单ID
                        $data.dataId
                    ]
                }
            ]
        }
    }
};
var realDataSourceNumber = "fxiaoke";
var result = invokeMicroService2("isc","iscb","IscWebApiService","invokeWithRealDataSource", [number,body,realDataSourceNumber]);
//获取返回的物料明细
var fxiaokeOrderProducts = result.data.dataList;

//按请求体格式,进行参数转换
var productList = [];
var product = {};
for(var i = 0; i < fxiaokeOrderProducts.length; i++) {
  product = {
    "unit_number" : "psc",
    "warehouse_number" :"003",
    "linetype_numbe":"010",
    "entrysettleorg_number":fxiaokeOrderProducts[i].owner_department,
    "qty":fxiaokeOrderProducts[i].quantity,
    "discounttype":fxiaokeOrderProducts[i].discount,
    "material_number":fxiaokeOrderProducts[i].name,
  };
  productList += product;
};

//对API请求体参数补充物料分录赋值
$body.billentry = productList;


步骤4:编写断言脚本。

未填写断言脚本时,系统默认API请求不抛错即视为请求成功,不会判断返回结果中的错误码或错误消息,实例和日志都会记录目标执行成功。如需根据API响应结果中错误码或错误信息等判定API调用失败,需在断言脚本中编写逻辑在特定条件下抛出异常(如throw xxx)。

断言脚本支持内置变量包括事件参数($data)、上下文($event)、请求头($header)、请求体($body)、URL参数($queryString)及响应结果($result)。


断言脚本示例:

if($result.errorCode != "0" || $result.status == fasle){
  throw "错误码为:"+ $result.errorCode +",错误信息为:"+ $result.message;
};


步骤5:点击“确定”按钮,即完成WebAPI类型事件目标维护。


3、注意事项

1、编写脚本时,可前往【事件网格->其他->脚本帮助手册】查看在线帮助手册,里面有很多函数的使用教程和案例。

2、脚本编写完,可先使用【事件网格->其他->脚本执行工具】进行脚本执行,看是否符合预期。如果执行出现错误,可使用【事件网格->其他->脚本调试工具】进行脚本的调试和优化。

3、更详细的脚本编写教程请参考:脚本基本语法脚本开发指南脚本优化实例




事件目标(WebAPI)

变更记录产品版本更新内容更新日期V6.0.13初始版本2024年6月13日1 简介1.1 功能介绍事件触发时,通过调用第三方系统的API服务将事件消息...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息