自定义连接类型开发指南

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

自定义连接类型开发指南

变更记录

产品版本
更新内容更新日期
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.消息服务

连接类型启用后可在消息队列服务器类型中选择该自定义的类型。


自定义连接类型开发指南

变更记录产品版本更新内容更新日期V5.0.020初版2023年4月28日V6.0.12增加多种鉴权方式2023年5月17日介绍集成服务云预置了大量的第三方连接...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息