如何使用服务编排开发业务的基本逻辑
场景描述
实现场景:根据查询到的呼吸机资源数据判断资源是否充足,并修改相关资源信息。
实现方案:提前创建好呼吸机资源对象Respirator,使用服务编排实现上述场景功能。实现逻辑如下:
- 首先需要通过循环图元对传入的数组对象变量RespiratorInfos(即空闲状态下的呼吸机资源数组)进行遍历,并将数组中的每个元素放置到对象变量RespiratorInfo(空闲状态下的呼吸机资源数组元素)中。
- 通过“赋值”图元设置参数:将当前遍历的对象变量元素添加到此次申请的原始呼吸机资源数组中,并对计数进行加一操作,并将当前遍历的对象变量元素的字段医院信息修改为发起呼吸机申请的医院信息,将呼吸机状态修改为“使用中”,并添加到申请后的呼吸机资源数组中。
- 通过“决策”图元判断资源是否充足。
- 走“ResourceEnough1”分支:在空闲状态下的呼吸机资源满足申请数量的时候跳出循环,返回信息“资源充足,申请呼吸机成功!”。
- 走“ResourceNotEnough1”分支:循环遍历全部元素后仍未满足申请数量,将走Finish连线进行资源是否充足的判断:
- 走“ResourceEnough2”分支:资源充足情况下返回“资源充足,申请呼吸机成功!”。
- 走“ResourceNotEnough2”分支:当此次申请的呼吸机资源数组中实际存在的资源数量比申请的数量少时,代表申请的资源不足,返回信息“资源不足,申请失败!”。
前提条件
开发呼吸机申请服务,首先需要创建呼吸机资源对象Respirator,作为呼吸机申请服务处理的对象。根据数据对象建模进行对象创建,自定义字段信息如下表所示。
字段名 |
字段类型 |
字段含义 |
|---|---|---|
status |
文本 |
呼吸机当前状态,“空闲”或“使用中”。 |
hospital |
文本 |
呼吸机当前所在医院。 |
创建Respirator对象步骤如下:
操作步骤
- 创建“名称”和“标签”为“ProcessRespiratorResource”的服务编排。
- 在一个应用目录上,例如“Logic”,单击 “+”,在弹出菜单中选择“服务编排”。
- 在“添加服务编排”的对话框中配置“标签”为“ProcessRespiratorResource”,单击“名称”参数的输入框系统会自动填充“ProcessRespiratorResource”。单击“添加”。
- 参照表2定义服务编排用到的变量,并设置该服务编排的入参和出参。
表2 变量说明 变量名
变量类型
变量说明
num
数字
申请的呼吸机数量。
count
数字
添加到此次申请的呼吸机资源数组中资源数量。
hospital
文本
申请呼吸机的医院。
msg
文本
申请结果。
RespiratorInfo
Respirator对象
系统中空闲状态下的呼吸机资源数组元素。
RespiratorInfos
Respirator对象数组
系统中空闲状态下的呼吸机资源数组。
RespiratorRecs
Respirator对象数组
此次申请的原始呼吸机资源数组。
RespiratorInfosUpdate
Respirator对象数组
申请成功后已修改所在地信息和状态的呼吸机资源数组。
- 在服务编排编辑器页面右侧选择
。在全局上下文页面单击“变量”后的加号。
图2 添加变量
- 单击新增变量后的“...”,选择“设置”。
图3 设置变量
- 配置数字类型的变量“num”,单击“保存”。
图4 配置变量
表3 普通变量参数说明 参数
参数说明
名称
变量名称。
直接输入“num”。
数据类型
变量的数据类型。
- 文本
- 数字
- 货币
- 日期
- 日期/时间
- 复选框
从下拉列表选择“数字”。
默认值
变量的默认取值。
不用配置。
描述
该变量的描述说明。
选填项,建议填写该变量的作用。
是否为数组
是否为数组型变量即集合变量。
不勾选。
- 参考2.a~2.c创建其他普通变量“count”(数字类型)、“hospital”(文本类型)和“msg”(文本类型)。
- 在全局上下文页面单击“对象变量”后的加号。
图5 添加对象变量
- 设置对象变量名称为“RespiratorInfo” ,对象中选择前提条件中创建的对象Respirator,设置字段描述信息(可选),单击“保存”。
图6 配置对象变量
- 在全局上下文页面单击“对象变量”后的加号。新建对象变量“RespiratorInfos”,对象中选择前提条件中创建的对象Respirator,设置字段描述信息(可选),选中“是否为数组”,单击“保存”。
图7 配置数组类型对象变量
- 参考2.g创建数组类型的对象变量“RespiratorRecs”和“RespiratorInfosUpdate”。注意要选中“是否为数组”。
所有变量创建完成后如下图所示。
图8 成功创建变量
- 单击画布中的“开始”图元
,在右侧菜单选择
,单击右上角“全局上下文”展开“全局上下文”页面,将变量“num”、变量“hospital”、数组对象变量“RespiratorInfos”拖拽到“入参”中,将变量“msg”、数组对象变量“RespiratorRecs”和“RespiratorInfosUpdate”拖拽到“出参”中。
图9 配置服务编排的入参、出参
- 在服务编排编辑器页面右侧选择
- 编排该服务主要使用了四种图元,分别是“赋值”、“循环”、“跳出循环”、“决策”图元,按照下图将相关图元拖拽到画布中对应位置。
图10 拖拽图元
- 配置“循环”图元。
- 单击画布中的“循环”图元Loop0,在“基本信息”页面中配置图元标签为“循环呼吸机资源”、“名称”为“LoopRespirator”。
图11 配置“循环”图元基本信息
- 单击
,在“循环”页面进行配置。将创建的对象变量“RespiratorInfos”由展开的“全局上下文”页面拖拽到“数组”输入框中,将创建的对象变量“RespiratorInfo”拖拽到“元素”输入框中,“排序”保持“升序”。
图12 配置“循环”页面
如上图配置,能够将数组对象变量RespiratorInfos进行遍历,并将数组中的每个元素放置到对象变量RespiratorInfo中,进行下一步操作。
- 在画布上,把鼠标放在起点图元
图元上,从“+”拖动鼠标,在起点图元和“循环”图元间增加连线。 - 从“循环”图元Loop0连向“赋值”图元Assignment0,连线类型为“Next”(即“下一个取值”);从“循环”图元Loop0连向“决策”图元Decision1,连线类型为“Finish”(即“遍历结束”)。
图13 连接图元
- 单击画布中的“循环”图元Loop0,在“基本信息”页面中配置图元标签为“循环呼吸机资源”、“名称”为“LoopRespirator”。
- 配置“赋值”图元Assignment0。
- 单击画布中的“赋值”图元Assignment0,在“基本信息”页面中配置图元标签为“设置参数”、“名称”为“SetParams”。
- 如下图所示,单击
,在“赋值”页面单击“新增行”,添加赋值语句,在展开的“全局上下文”页面拖拽变量到赋值语句中。
图14 配置“赋值”图元
赋值语句实现如下功能:
- 将当前遍历的对象变量元素添加到此次申请的呼吸机资源数组中,并对计数进行加一操作。
- 将当前遍历的对象变量元素的医院字段修改为发出申请的医院信息,将状态字段修改为“使用中”,并添加到数组中作为修改对象记录时的入参信息。
- 从“赋值”图元Assignment0连向“决策”图元Decision0。
- 配置“决策”图元Decision0。
- 单击画布中的“决策”图元Decision0,在“基本信息”页面中配置图元标签为“判断资源是否足够”、“名称”为“JudgeNum”。
- 单击
,在“决策”页面做如下设置。
- 从“决策”图元Decision0连向“循环”图元,连线类型为“ResourceNotEnough1”,从“决策”图元Decision0连向“跳出循环”图元Break0,连线类型为“ResourceEnough1”。
图17 连接“决策”图元和其他图元
连线表示:当此次申请的呼吸机资源数组中的资源数量与申请的数量相同时,代表申请的资源已足够,走“ResourceEnough1”分支,可跳出循环;否则走“ResourceNotEnough1”分支,遍历一个元素进行数据处理。
- 配置“跳出循环”图元Break0。
- 单击画布中的“跳出循环”图元Break0,在“基本信息”页面中配置图元标签为“资源足够跳出循环”,名称为“Break”。
- 单击
,在“跳出循环”页面的“循环”下拉框中选择需要中断的循环“LoopRespirator”(“LoopRespirator”是在4中配置的)。
图18 配置“跳出循环”页面
- 从“跳出循环”Break0连向“赋值”图元Assignment1。
- 配置“赋值”图元Assignment1。
- 单击画布中的“赋值”图元Assignment1,在“基本信息”页面中配置图元标签为“设置资源充足的返回信息”,名称为“setSuccessed”。
- 如下图所示,单击
,在“赋值”页面单击“新增行”添加赋值语句“msg = 资源充足,申请呼吸机成功!”,其中变量是由展开的“全局上下文”页面拖拽来的。
图19 配置“赋值”图元Assignment1。
配置表示设置资源充足情况下提示“资源充足,申请呼吸机成功!”。
- 配置“决策”图元Decision1。
- 单击画布中的“决策”图元Decision1,在“基本信息”页面中配置图元标签为“判断资源是否足够”,名称为“judgeNum2”。
- 单击
,在“决策”页面做如下设置。
- 从“决策”图元Decision1连向“赋值”图元“设置资源充足的返回信息”,连线类型为“ResourceEnough2”,从“决策”图元Decision1连向“赋值”图元Assignment2,连线类型为“ResourceNotEnough2”。
图22 连接“决策”图元和其他图元
当此次申请的呼吸机资源数组中实际存在的资源数量比申请的数量少时,代表申请的资源不足,走“ResourceNotEnough2”分支,设置资源不足情况下的返回信息;否则走“ResourceEnough2”分支,资源充足情况下返回“资源充足,申请呼吸机成功!”。
- 配置“赋值”图元Assignment2。
- 单击画布中的“赋值”图元Assignment2,在“基本信息”页面中配置图元标签为“设置资源不足的返回信息”,名称为“setFailed”。
- 如下图所示,单击
,在“赋值”页面单击“新增行”添加如下赋值语句,从展开的“全局上下文”页面中拖拽变量和常量到赋值语句中。
图23 配置“赋值”图元Assignment2
赋值语句如下:
- msg = 资源不足,申请失败!
- RespiratorRecs = {!$GlobalConstant.Null}
- RespiratorInfosUpdate = {!$GlobalConstant.Null}
配置服务返回信息参数,将对象数组清空,提示“资源不足,申请失败!”。
- 单击上方按钮区域的
进行保存,并单击
运行服务编排。 - 设置输入参数,单击“运行”, 申请2台呼吸机。
其中,“CNAME”为命名空间名称,请替换为环境中实际配置的命名空间。
{ "num": 2, "hospital": "第8人民医院", "RespiratorInfos": [ { "CNAME__hospital__CST": "第1人民医院", "CNAME__status__CST": "空闲", "createdBy": "10gd000000cEMpInogYS", "createdBy.name": "appcubetest", "createdDate": "2020-12-14 17:18:12", "currencyIsoCode": "USD", "id": "cVjc000000fgrFwQI9WC", "lastModifiedBy": "10gd000000cEMpInogYS", "lastModifiedBy.name": "appcubetest", "lastModifiedDate": "2020-12-14 17:18:12", "name": "呼吸机3", "owner": "10gd000000cEMpInogYS", "owner.name": "appcubetest" }, { "CNAME__hospital__CST": "第1人民医院", "CNAME__status__CST": "空闲", "createdBy": "10gd000000cEMpInogYS", "createdBy.name": "appcubetest", "createdDate": "2020-12-14 17:18:12", "currencyIsoCode": "USD", "id": "cVjc000000fgrFwSqXgm", "lastModifiedBy": "10gd000000cEMpInogYS", "lastModifiedBy.name": "appcubetest", "lastModifiedDate": "2020-12-14 17:18:12", "name": "呼吸机4", "owner": "10gd000000cEMpInogYS", "owner.name": "appcubetest" }, { "CNAME__hospital__CST": "第2人民医院", "CNAME__status__CST": "空闲", "createdBy": "10gd000000cEMpInogYS", "createdBy.name": "appcubetest", "createdDate": "2020-12-14 17:18:12", "currencyIsoCode": "USD", "id": "cVjc000000fgrFwUpjbE", "lastModifiedBy": "10gd000000cEMpInogYS", "lastModifiedBy.name": "appcubetest", "lastModifiedDate": "2020-12-14 17:18:12", "name": "呼吸机5", "owner": "10gd000000cEMpInogYS", "owner.name": "appcubetest" }, { "CNAME__hospital__CST": "第2人民医院", "CNAME__status__CST": "空闲", "createdBy": "10gd000000cEMpInogYS", "createdBy.name": "appcubetest", "createdDate": "2020-12-14 17:18:12", "currencyIsoCode": "USD", "id": "cVjc000000fgrFwX6Wdk", "lastModifiedBy": "10gd000000cEMpInogYS", "lastModifiedBy.name": "appcubetest", "lastModifiedDate": "2020-12-14 17:18:12", "name": "呼吸机6", "owner": "10gd000000cEMpInogYS", "owner.name": "appcubetest" }, { "CNAME__hospital__CST": "第3人民医院", "CNAME__status__CST": "空闲", "createdBy": "10gd000000cEMpInogYS", "createdBy.name": "appcubetest", "createdDate": "2020-12-14 17:18:12", "currencyIsoCode": "USD", "id": "cVjc000000fgrFwbe6im", "lastModifiedBy": "10gd000000cEMpInogYS", "lastModifiedBy.name": "appcubetest", "lastModifiedDate": "2020-12-14 17:18:12", "name": "呼吸机8", "owner": "10gd000000cEMpInogYS", "owner.name": "appcubetest" } ] }图24 输入参数
- 检查输出页签的结果是否符合预期。
返回如下信息,表示系统中空闲状态下的呼吸机数量大于申请所需的数量,在资源满足的情况下返回申请成功后修改所在地信息和状态的呼吸机资源数组“RespiratorInfosUpdate”,以及返回申请的原始呼吸机资源数组“RespiratorRecs”。返回信息msg“资源充足,申请呼吸机成功!”。
{ "interviewId": "002N000000m53Y4zJwci", "outputs": { "RespiratorInfosUpdate": [ { "createdBy": "10gd000000cEMpInogYS", "createdBy.name": "appcubetest", "createdDate": "2020-12-14 17:18:12", "currencyIsoCode": "USD", "CANME__hospital__CST": "第8人民医院", "CANME__status__CST": "使用中", "id": "cVjc000000fgrFwQI9WC", "lastModifiedBy": "10gd000000cEMpInogYS", "lastModifiedBy.name": "appcubetest", "lastModifiedDate": "2020-12-14 17:18:12", "name": "呼吸机3", "owner": "10gd000000cEMpInogYS", "owner.name": "appcubetest" }, { "createdBy": "10gd000000cEMpInogYS", "createdBy.name": "appcubetest", "createdDate": "2020-12-14 17:18:12", "currencyIsoCode": "USD", "CANME__hospital__CST": "第8人民医院", "CANME__status__CST": "使用中", "id": "cVjc000000fgrFwSqXgm", "lastModifiedBy": "10gd000000cEMpInogYS", "lastModifiedBy.name": "appcubetest", "lastModifiedDate": "2020-12-14 17:18:12", "name": "呼吸机4", "owner": "10gd000000cEMpInogYS", "owner.name": "appcubetest" } ], "RespiratorRecs": [ { "createdBy": "10gd000000cEMpInogYS", "createdBy.name": "appcubetest", "createdDate": "2020-12-14 17:18:12", "currencyIsoCode": "USD", "CANME__hospital__CST": "第1人民医院", "CANME__status__CST": "空闲", "id": "cVjc000000fgrFwQI9WC", "lastModifiedBy": "10gd000000cEMpInogYS", "lastModifiedBy.name": "appcubetest", "lastModifiedDate": "2020-12-14 17:18:12", "name": "呼吸机3", "owner": "10gd000000cEMpInogYS", "owner.name": "appcubetest" }, { "createdBy": "10gd000000cEMpInogYS", "createdBy.name": "appcubetest", "createdDate": "2020-12-14 17:18:12", "currencyIsoCode": "USD", "CANME__hospital__CST": "第1人民医院", "CANME__status__CST": "空闲", "id": "cVjc000000fgrFwSqXgm", "lastModifiedBy": "10gd000000cEMpInogYS", "lastModifiedBy.name": "appcubetest", "lastModifiedDate": "2020-12-14 17:18:12", "name": "呼吸机4", "owner": "10gd000000cEMpInogYS", "owner.name": "appcubetest" } ], "msg": "资源充足,申请呼吸机成功!" } }图25 输出界面
- 单击服务编排编辑器页面上方
,启用服务编排。



