Skip to main content

WebService 发布

WebService,主要实现两个服务之间接口的调用,包括 V 服务之间调用 WebService、 V 服务调用第三方WebService服务。

1. 功能介绍

WebService,主要实现两个服务之间接口的调用,包括 V 服务之间调用 WebService 、 V 服务调用第三方WebService服务。

在配置中心中,WebService 的相关菜单默认不开放,用户可以按需设置 WS服务管理WS服务调用 菜单,然后配置相关功能。

1.1 待选菜单项管理

WS服务管理WS服务调用 构件菜单,在 vbase_网络管理 构件中,直接搜索添加待选菜单项。

访问目录:配置中心 → 业务系统初始化配置 → 基础设置 → 待选数据 → 待选菜单项管理

img

img

1.2 菜单管理

在配置中心菜单中,添加菜单目录,以及对应的菜单项。

访问目录:配置中心 → 业务系统初始化配置 → 菜单管理 → 菜单管理

img

1.3 WS服务管理

访问目录:配置中心 → 业务系统初始化配置 → WebService → WS服务管理

img

(1)服务分组管理

在该菜单中,需要设置分组服务,不同的分组编码(唯一性)区别开不同的 wsdl 服务地址。

img

(2)操作管理

  • 所属服务:只读,显示当前操作方法所属服务名称;
  • 操作编码:在所属服务中,要求唯一性;
  • 操作名称:自定义;
  • 构件编码:可以是自定义构件,也可以是vbase内置的构件;
  • 构件方案编码:选择构件时,一并选择对应的构件方法即可;
  • 描述:按需添加;
  • 是否单值输出:默认不勾选,勾选后,在输出参数列表中,只能勾选一个参数。

img

(3)服务发布与取消

设置服务之后,需要发布服务,才产生对应的 wsdl 服务地址,并且被调用。

发布之后,将切换成【取消服务】,取消服务才可以进行修改操作。

img

(4)服务地址获取

发布后可以通过 服务地址/services 查看已发布 V WebService 列表,点击 wsdl 地址查看最终的服务地址。

① 查看 V WebService 列表

img

② 获取服务地址

img

1.4 WS服务调用

访问目录:配置中心 → 业务系统初始化配置 → WebService → WS服务调用

注意
  • 若构件方法,在【WS服务管理】中设置了操作服务,并且已发布,那么可以在同一个V服务或者不同的V服务打开【WS服务调用】菜单进行调用调试。
  • WS服务调用,不是非必要操作。一般是通过开发系统,配置逻辑根据 wsdl 服务地址,调用不同服务的构件方法。

img

2. V 服务之间调用 WebService

img

案例下载

下面,以 VBase 的内置构件方法 根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName) 作为例子,介绍 V 服务之间调用 WebService 的功能。

由于该 API 为 VBase 的内置构件方法,因此在系统 B 中只需设置该方法的 WS 服务管理地址即可,服务 A 便可根据 wsdl 的服务地址调用该 API 。

2.1 系统B—WS服务管理设置

在 B 服务的在配置中心中,设置 根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName) 构件方法服务操作,并且获取 wsdl 服务地址。

注意
  • 在实际项目中,【WS服务管理】菜单按需设置菜单目录,访问目录也不同。
  • 在本文档中,【WS服务管理】菜单所在访问目录:配置中心 → 业务系统初始化配置 → WebService → WS服务管理。

img

具体配置,查看 1.3 WS服务管理 的具体配置。

获取该构件方法的 wsdl 服务地址:http://10.1.40.178:8084/services/train?wsdl。

2.2 系统A—开发平台配置

1.添加引用

在 A 服务的开发系统中,添加引用 vbase_ws_ap(vbase_网络服务api)vbase_organization(VBase_组织机构API)

  • vbase_ws_ap(vbase_网络服务api):用于调用 webservice 服务构件方法;
  • vbase_organization(VBase_组织机构API) :非必要,用于查看 根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName) 构件方法的相关参数。

img

img

2.实体定义

实体含义
callWebService(调用WebService)主要作为调用 webservice 服务 B 构件方法时,对应 wsdl 和操作编码(方法编码)入参
vParam(参数实体)主要作为调用 webservice 服务 B 构件方法时,对应构件方法的入参
result(返回结果)主要作为调用 webservice 服务 B 构件方法时,返回的 json 结果
accountEntity(账号数据)根据引用构件 vbase_organization(VBase_组织机构API) 中 ,
对应根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName) 构件方法的方法输出实体定义字段
extraPropertys(附加属性)根据引用构件 vbase_organization(VBase_组织机构API) 中 ,
对应根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName) 构件方法的方法输出实体定义字段

实体的字段,如下:

img

3.窗体定义

通过输入账号和相关参数,调用 WebService 服务 B 中设置 wsdl 服务地址的构件方法 根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName)

根据账号,查找服务 B 中对应账号的账号详细信息,并且返回到对应的窗体实体,显示在列表中。

img

4.规则配置

img

(1)清除界面实体中的数据【所有实体】

img

(2)新增实体记录【WebService】

  • operCode :对应服务 B 中设置 wsdl 服务地址的构件方法 根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName) 的操作编码 ;
  • wsdl :对应服务 B 中的 wsdl 服务地址。

img

(3)新增实体记录【vParam】

  • paramName(参数名) :参数名,根据服务提供的入参顺序:arg0arg1 …… argN (参数名目前只支持 arg0arg1 ….编写);
  • paramType(对应操作方法参数类型):对应操作方法参数类型;
  • paramValue(对应操作方法参数值):对应操作方法参数值。
注意
  • arg0arg1 …代表各个输入参数的参数实体 vParam 的新增顺序与所发布的方法的配置页面上的输入参数次序和个数保持一致。
  • 各类型参数类型
文本char日期时间longDate日期date长文本text
布尔boolean小数number整数integer实体entity

在本示例中,需要根据输入账号(默认值 admin ),查询对应账号信息(前提是发布方法所在服务有该账号,若没有,应先创建该账号),paramValue 对应指文本框值(本案例中,默认值 admin ),paramType 对应参数值的类型( char ),paramKey 对应一个参数(arg0 )。

img

vParam 实体记录数和实体各个字段的值,根据发布方法的输入参数决定的(vParam 实体可以定义为界面实体或者方法实体等类型)。

根据发布的 OrgQueryAccountByName 构件方法的输入参数只有 accountNames 一个,因此仅需要创建一条 vParams 实体记录。若是所发布的方法有 两个或两个以上 输入参数,则需要创建多条 vParam 实体记录 。

注意:若所要调用的方法的输入参数类型为实体时,需要将实体转换为 json 格式后才能赋给 paramValue

下面简单介绍,假设为实体类型的配置逻辑:

首先,需要执行 vbase_ws_api 构件的 VWS_EntityJsonToDataViewJson 方法将实体转为 json

VWS_EntityJsonToDataViewJson 方法有个输入参数 entityJson,需要传入 json 格式的数据,调用函数 VConvertEntityToJson 先将作为入参实体转换为 json 格式。

同时,需要创建一个文本格式的方法变量用于接收 VWS_EntityJsonToDataViewJson 方法的返回值,假设接收参数为 param1

img

最后,将得到的 json 数据赋给参数实 vParamparamValue 字段, paramType 则要填写 entity 类型,而其他的操作与非实体类型的参数一致。

img

(4)执行方法_VWS_CallWebService(调用webservice服务构件方法)

根据被调用方法的 wsdl 服务地址、操作编码,以及方法输入对应的参数实体,调用 webservice 服务构件方法,使用 result 实体接收返回 Result

  • resultKey :返回数据中key;
  • resultValue :返回数据中key对应的值。

img

(5)输出参数 Result 解析

调用 webService 发布的方法后,输出的数据被封装到 Result 实体中,因此,需要将数据解析出来。

  • 若所调用的方法的输出参数类型是非实体的,则可直接通过获取 Result 实体的 resultValue 字段获取到对应的值;
  • 若是实体,实体记录会以 json 的格式存于 ResultresultValue 字段中,因此需要通过 json 转实体函数 VRestoreJsonToEntity 进行解析。

VRestoreJsonToEntity 函数需要传两个参数 "json内容" 和 "实体名称" 。而 result 实体的 resultKey 字段对应着实体名称,resultValue 字段对应着内容。

注意:作为存放解析出来的实体名称一定要和返回的 resultKey 的值一致,字段也需和resultValue 对应内容的参数一致。

在本示例中,因为返回的参数类型都为实体,可以用 foreach 进行遍历接收的实体 result 解析得到所有的数据 。

若返回的参数包含有非实体类型的,要注意要进行过滤,实体类型的才需要解析,可以用参数值 resultValue 作为判断条件去区分。

① 定义 Foreach

img

② 执行函数/表达式【VRestoreJsonToEntity】

img

img

2.3 系统A—效果预览

在 A 服务中,部署预览窗体,可以查看调用 B 服务的 webService 效果。

img

3. V 服务调用第三方 WebService

img

调用第三方 WebService,可以通过二次开发代码级调用 API 执行。

3.1 引入WS构件包

构件编码: com.toone.v3.platform-34vbase-ws-api

版本:取正式库最新版本即可。

3.2 调用语句

VWSServiceCall vWSServiceCall = VWSServiceFactory.getVWSServiceCall()

String jsonString = (String)vWSServiceCall.invoke(false, wsdl, operation, operParams)

即可获取到第三方 WebService 服务返回数据。

3.3 方法与参数描述

Object invoke(boolean isFile, String wsdl, String operCode, List<Map> rusetParams)

(1) 输入参数

IsFile:布尔类型,执行 webservice 有两种方式调用,一种是文件、一种是 wsdl 地址,其实内容是一样,只是执行方法不一样,文件方式调用则参数值为 true;否则 false。

Wsdl:wsdl地址,如果 isFile=true 则写文件地址,否则填写第三方 ws 地址。

operCode:服务操作方法的编码。

operParams:参数集合,List<Map> 对象。

(2)数据返回

返回对象为 Object 类型。