自定义连接类型开发指南
变更记录
产品版本 | 更新内容 | 更新日期 |
V5.0.020 | 初版 | 2023年4月28日 |
V6.0.12 | 增加多种鉴权方式 | 2023年5月17日 |
介绍
集成服务云预置了大量的第三方连接类型,同时也支持用户开发自定义连接类型,以下将针对WebAPI类型、自定义连接器工厂类、自定义MQ工厂类分别进行说明。
连接类型介绍:https://vip.kingdee.com/article/183681
WebAPI连接类型
根据各三方系统的鉴权方式,集成服务云提供以下三种脚本:会话登录、会话刷新、服务器状态测试,在连接器类型注册时,提供这三类脚本分别予以处理,从而与kd.isc.iscb.platform.core.connector.webapi.WebApiConnectionFactory构 成一个完整的连接器,为集成云运行引擎提供对第三方系统API的调用。
1.连接器工厂类
工厂类(推荐):kd.isc.iscb.platform.core.connector.webapi.WebApiConnectionFactory
特殊情况也可以重写工厂类
2.配置鉴权参数
使用动态表单(推荐)
打开连接类型上的自定义配置开关,可以手动填写该连接器鉴权时需要用到的鉴权参数。
可以根据需求选择不同的鉴权方式,每种鉴权方式会自动添加对应的预置参数,用户也可手动进行修改。
其中Bearer Token和Basic Auth将会自动生成参考用的会话登录脚本。
注:当修改鉴权方式的时候会自动清空现有会话登录脚本。
修改鉴权参数后,将动态渲染出连接配置界面。
在后续脚本中可以通过$获取连接配置上的参数信息,如$server_ip、$server_port等。
会话登录脚本
会话刷新脚本:
服务器状态检测脚本:
使用元数据(不推荐)
关闭自定义配置则需要创建连接配置元数据,该元数据作为连接器的配置界面。
配置方法参考::https://vip.kingdee.com/school/89389204685524480
后续脚本配置方法和上面介绍的一致,且用户可以额外配置API调用脚本,该脚本将在外部系统API登记中使用。
注:不推荐使用该功能登记外部系统API,推荐使用WebAPI登记
API调用脚本:
注:API调用脚本可以捕获会话失效异常,然后通过函数Relogin()重新执行会话登录脚本。
var url = $website + $service + "?accessToken=" + $session.accessToken; var param = "eid=" + user + "&data=" + String.URLEncode(String.FormatJson(data)); var result = String.ParseJson(HttpPost(url, param,"UTF-8").result); if(result.errorCode == 10000401){// 会话ID 失效,重新登录 var url = $website + api + "?accessToken=" + Relogin().accessToken; var result = String.ParseJson(HttpPost(url, param,"UTF-8").result); } if(result.success){ result = result.data; // 成功,仅将 data 部分作为结果 }else{ throw result; // 失败 }
3.WebService脚本
WebService连接脚本写法和【1.3 RESTful API 脚本】写法基本相似,但具体参数格式和调用方式会有不同。
直接拼接XML调用Web服务
var header = {"Content-Type" : "text/xml; charset=utf8",SOAPAction:"http://ws/testService"}; var xml = "<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><testService xmlns='http://ws/'><name xmlns=''>Yuxichu</name></testService></soap:Body> </soap:Envelope>"; HttpPost("http://localhost:8888/HelloService/", xml, "UTF-8", {}, header).result;
构造XML调用Web服务
var header = {"Content-Type" : "text/xml; charset=utf8",SOAPAction:"http://ws/testService"}; var xml = String.createXml("soap:Envelope"); xml["xmlns:xsi"] = 'http://www.w3.org/2001/XMLSchema-instance'; xml["xmlns:xsd"] ='http://www.w3.org/2001/XMLSchema'; xml['xmlns:soap']='http://schemas.xmlsoap.org/soap/envelope/'; var body = xml("soap:Body"); var method = body("testService", {xmlns : 'http://ws/'}); var param = method("name", {xmlns:''}); param["#text"] = 'Yuxichu'; var xml = HttpPost("http://localhost:8888/HelloService/", String(xml), "UTF-8", {}, header).result; var dom = String.parseXml(xml); return dom["#children"][0]["#children"][0]["#children"][0].#text
通过CallWebService调用Web服务
// Web服务URL,该URL后附加 ?WSDL应该能返回该Web服务的描述,例如: // http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL var service = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"; // 被调用的Web服务操作(operation); var operation = "getSupportCity"; // Web服务操作的调用参数,可以参考WSDL描述或文档获知; // 以服务操作参数名为key,支持复杂结构。 var params = { byProvinceName : "广东" }; // Web服务调用需要设置的Cookie信息,例如:通过Cookie来传递会话ID或身份认证信息 // 如果不需要设置Cookie信息,则该项可以忽略 var cookies = {}; // Web服务调用需要设置的额外HTTP-HEADER信息,例如:会话ID或身份认证信息 // 如果不需要设置HTTP-HEADER信息,则该项可以忽略 var headers = {}; // 字符集,该项可以忽略,默认值是:utf-8 var charset = "utf-8"; //调用Web服务,获得返回结果 var returns = CallWebService(service, operation, params, cookies, headers, charset); var result = returns.result; // 错误处理,下面是发生服务器端错误的检查,有些Web服务发生异常时会生成正常响应, // 采用何种错误检查及处理方法应视具体Web服务而定,下面仅仅只是5xx服务端错误的示例。 if(result.$failed){ throw result; } // 抛出错误信息,由于Web服务具体实现的差异,实际使 用时应细化 // 服务器端返回的Cookie信息 var set_cookies = result.cookies; // 本服务调用后所需的实际结果 var cities = result["soap:Body"].getSupportCityResponse.getSupportCityResult.string;
自定义连接器工厂类
通过自定义连接器工厂类的方式,实现一个高度自定义的连接器,可以支持各类协议的接口。如 SAP的RFC接口、邮件服务STMP等,都可以通过自定义一个工厂类的方式实现,集成云提供了可参考的SDK。
自定义MQ工厂类
为了增强MQ的扩展性,可以自定义不同的MQ类型,按照连接类型的方式,扩充MQ类型。
1.创建MQ工厂类
实现 kd.isc.iscb.platform.core.dc.mq.MessageQueueServerFactory 接口。
public class DemoCustomFactory implements MessageQueueServerFactory { @Override public MessageQueueServer create(DynamicObject cfg) { return new DemoCustomServer(cfg); }
2.创建MQ服务类
实现 kd.isc.iscb.platform.core.dc.mq.MessageQueueServerFactory 接口。
public class DemoCustomServer implements MessageQueueServer { private final DynamicObject cfg; public DemoCustomServer(DynamicObject cfg) { this.cfg = cfg; } @Override public DynamicObject getConfig() { return cfg; } @Override public long getId() { return D.l(cfg.getPkValue()); } @Override public synchronized void detachListeners() { // TODO 关闭消费者实现 } @Override public synchronized void attachListener(String topic, MessageReceiver receiver) { // TODO 消费者实现 } @Override public void publish(String topic, PublishedMessage msg) { // TODO 消息发布实现 } }
3.MQ工厂类注册连接类型
配置表单可以是扩展 isc_mq_server 的布局。
4.消息服务
连接类型启用后可在消息队列服务器类型中选择该自定义的类型。
自定义连接类型开发指南
本文2024-09-23 00:48:35发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-141878.html