服务编排的从知到行,我做了一个化繁为简的工程师支援小工具

发布时间:2024年01月23日

梅开二度

前一篇使用华为云 Astro 的工作流,快速完成了活动需求的开发。

在使用过程中,接触到服务编排,文档中介绍到服务编排和工作流有相似性,让我留下对它留下印象。

上篇写完,意犹未尽,正好这篇了解一下服务编排。

接下来,我将体验 华为云 Astro 提供的服务编排功能,熟悉使用流程的同时,考虑它在我实际开发中使用场景

欲善其事,先解其义

简介

服务编排提供了图形化、拖拽式开发的能力,来看华为云官网的完整介绍:

服务编排是一种通过简单的拖拉拽式流程编排以及参数配置的方式,来进行服务开发的能力,并支持对已开发的服务重新进行组合编排。用户能够在服务编排编辑器内,以图形化编排的形式快速地进行服务的开发并扩展出更丰富的业务功能,同时能够与API接口进行绑定,以API的形式对外提供服务。

将代码编程的方式转化为图形化、拖拽式编程的方式,很适合零基础的用户实现自己需要的功能。

结合官网介绍,我们来大致总结一下服务编排的优点。

优点

1、支持已实现的脚本、服务编排等功能进行复用,减少了开发时间。

2、图形化编排以及相关参数配置,不需要有任何编程经验即可完成服务的开发,降低了使用成本。

3、支持与其他模块的互相调用,可支持实现的功能更加全面。

开发流程

整个服务编排的开发流程如下图:

这个流程完整性很强,在创建前,先根据业务场景进行设计,避免开发过程中产生遗漏导致流程不通顺。

想了解更多可以阅读官方文档:如何开发服务编排

工程师支援小工具,化繁为简

通过阅读文档,对服务编排已经有了初步的了解。

阅读完文档:使用服务编排开发业务的基本逻辑,里面分享的呼吸机案例给了我启发。

接下来我准备开发一个工程师支援小工具,练练手。

需求描述

叶一一所在的部门,平均的将所有工程师分成了三个项目组。

最近接到了支援营销活动的开发任务,当某位工程师被某个活动组借走之后,在任务完成前无法接其他活动组的任务。所以需要设计一个简单的工具,高效、便捷的方便营销部门借调工程师。

即:

根据查询到的工程师人数,数据判断当前需要借调人员数量是否支持,并修改相关资源信息。

前置工作

创建对象

1、创建工程师资源对象Programmer,作为工程师支援申请服务处理的对象。

下表为Programmer对象自定义字段:

字段名

字段类型

字段含义

status

文本

工程师当前状态,“空闲”、“支援中”。

name

文本

申请人姓名

2、登录新版应用设计器,选择「数据」,点击「对象」后的?,进入创建对象页面。

注:如果不清楚如何登录新版应用设计,参考如何登录新版应用设计器中操作。

3、置对象的名称和唯一标识为「Programmer」,单击「确定」。

4、在创建的对象Programmer中,单击编辑图形。

5、在「字段」页签,单击「添加」。

设置字段显示名称和唯一标识为status,字段类型设置为「文本」,单击「确认」。

设置字段显示名称和唯一标识为name,字段类型设置为「文本」,单击「确认」。

启动开发

经过前面的准备工作,就可以进入正式的服务编排开发了。

注:华为云提供的使用服务编排开发业务的基本逻辑文档中,有一个完整的可供参照的呼吸机案例,帮助快速进入服务编排。

步骤1:创建服务编排

1、在左侧导航栏中,选择「逻辑」,单击编排后的「?」,进入添加编排页面。

2、创建服务编排 ProgrammerFlow,录入必填项,单击「添加」。

步骤2:定义使用变量

1、下表为服务编排使用的变量说明,参照该表可以定义服务编排使用的变量。

变量名

变量类型

变量说明

num

数字

申请的工程师数量。

count

数字

添加到此次申请的工程师资源数组中资源数量。

name

文本

申请工程师的员工。

msg

文本

申请结果。

ProgrammerInfo

Programmer对象

系统中空闲状态下的工程师资源数组元素。

ProgrammerInfos

Programmer对象数组

系统中空闲状态下的工程师资源数组。

ProgrammerRecs

Programmer对象数组

此次申请的原始工程师资源数组。

ProgrammerInfosUpdate

Programmer对象数组

申请成功后,已修改所在地信息和状态的工程师资源数组。

2、参照设置该服务编排的入参和出参。

在服务编排编辑器页面右侧,选择「交换」,展开全局上下文页面。

在全局上下文页面,单击「变量」后的「?」,创建普通变量。

3、单击新增变量后的「...」,选择「设置」。

4、配置数字类型的变量 num,单击「保存」。

5、参考上述操作,创建其他普通变量count(数字类型)、name(文本类型)和 msg(文本类型)。

6、在全局上下文页面,单击「对象变量」后的「?」,创建对象变量ProgrammerInfo

对象中选择前置工作中创建的对象Programmer,设置字段描述信息(可选),单击「保存」。

7、创建数组类型对象变量ProgrammerInfos

对象中选择前置工作中创建的对象Programmer,设置字段描述信息(可选),选中「是否为数组」,单击「保存」。

8、依次创建数组类型的对象变量 ProgrammerRecsProgrammerInfosUpdate

步骤3 设置图元的入参和出参

1、设置开始图元的入参和出参

在画布中,单击「开始」图元。

图元的入参和出参可以直接从「全局上下文」中拖拽过来。

将变量num、nanme、ProgrammerInfos 拖拽到「入参」中,将变量msg、ProgrammerRecs、ProgrammerInfosUpdate拖拽到「出参」中。

注:由于步骤中设置的参数较多,所以大家注意随时保存自己新增的内容,避免发生丢失。

2、开始图元后面新增“赋值”、“循环”、“跳出循环”和“决策”等图元,注意摆放位置。

3、设置循环图元信息。

单击画布中的循环图元,在「基本信息」页面中配置图元“标签”为“循环工程师资源”、“名称”为“LoopProgrammer”。

配置循环图元的循环数据。

4、增加如下图连线。

5、配置赋值图元Assignment0

设置基础信息,并连向下方发决策图元。

6、配置决策图元Decision1。

设置基础信息

决策的默认值设置为:ProgrammerNotEnough1

新增一个:ProgrammerEnough1,并配置公式:

按照下图增加判断资源是否充足的连线。

7、配置跳出循环图元Break0。

设置基础信息

跳出循环设置,选择前面的循环图元LoopProgrammer

改跳出循环图元赋值图元Assignment2

8、配置赋值图元Assignment2。

设置基础信息

配置赋值信息

9、配置决策图元Decision0。

设置基础信息

决策的默认值设置为:ProgrammerEnough2

新增一个:ProgrammerNotEnough2,并配置公式:

按照下图进行连线

10、配置赋值图元Assignment1

设置基础信息

配置赋值信息

步骤4 调试

1、在页面上方,单击「保存」按钮,保存服务编排。

2、保存后,单击「运行」按钮,运行服务编排。

3、测试1:申请支援人数<空闲人数

输入参数:

{
  "num": 2,
  "name": "叶一一",
  "ProgrammerInfos": [
    {
      "BEAST__name__CST": "开发1组",
      "BEAST__status__CST": "空闲",
      "createdBy": "10gd000000cEMpInogYS",
      "createdBy.name": "test",
      "createdDate": "2020-12-14 17:18:12",
      "currencyIsoCode": "USD",
      "id": "cVjc000000fgrFwQI9WC",
      "lastModifiedBy": "10gd000000cEMpInogYS",
      "lastModifiedBy.name": "test",
      "lastModifiedDate": "2020-12-14 17:18:12",
      "name": "工程师3",
      "owner": "10gd000000cEMpInogYS",
      "owner.name": "test"
    },
    {
      "BEAST__name__CST": "开发1组",
      "BEAST__status__CST": "空闲",
      "createdBy": "10gd000000cEMpInogYS",
      "createdBy.name": "test",
      "createdDate": "2020-12-14 17:18:12",
      "currencyIsoCode": "USD",
      "id": "cVjc000000fgrFwSqXgm",
      "lastModifiedBy": "10gd000000cEMpInogYS",
      "lastModifiedBy.name": "test",
      "lastModifiedDate": "2020-12-14 17:18:12",
      "name": "工程师4",
      "owner": "10gd000000cEMpInogYS",
      "owner.name": "test"
    },
    {
      "BEAST__name__CST": "开发2组",
      "BEAST__status__CST": "空闲",
      "createdBy": "10gd000000cEMpInogYS",
      "createdBy.name": "test",
      "createdDate": "2020-12-14 17:18:12",
      "currencyIsoCode": "USD",
      "id": "cVjc000000fgrFwUpjbE",
      "lastModifiedBy": "10gd000000cEMpInogYS",
      "lastModifiedBy.name": "test",
      "lastModifiedDate": "2020-12-14 17:18:12",
      "name": "工程师5",
      "owner": "10gd000000cEMpInogYS",
      "owner.name": "test"
    },
    {
      "BEAST__name__CST": "开发2组",
      "BEAST__status__CST": "空闲",
      "createdBy": "10gd000000cEMpInogYS",
      "createdBy.name": "test",
      "createdDate": "2020-12-14 17:18:12",
      "currencyIsoCode": "USD",
      "id": "cVjc000000fgrFwX6Wdk",
      "lastModifiedBy": "10gd000000cEMpInogYS",
      "lastModifiedBy.name": "test",
      "lastModifiedDate": "2020-12-14 17:18:12",
      "name": "工程师6",
      "owner": "10gd000000cEMpInogYS",
      "owner.name": "test"
    },
    {
      "BEAST__name__CST": "开发3组",
      "BEAST__status__CST": "空闲",
      "createdBy": "10gd000000cEMpInogYS",
      "createdBy.name": "test",
      "createdDate": "2020-12-14 17:18:12",
      "currencyIsoCode": "USD",
      "id": "cVjc000000fgrFwbe6im",
      "lastModifiedBy": "10gd000000cEMpInogYS",
      "lastModifiedBy.name": "test",
      "lastModifiedDate": "2020-12-14 17:18:12",
      "name": "工程师8",
      "owner": "10gd000000cEMpInogYS",
      "owner.name": "test"
    }
  ]
}

总共工程师5人,申请2人,应该是可以申请成功的。

输出:

{
  "interviewId": "002N0000013M4HJfdcTg",
  "outputs": {
    "ProgrammerInfosUpdate": [
      {
        "BEAST__name__CST": "叶一一",
        "BEAST__status__CST": "支援中",
        "createdBy": "10gd000000cEMpInogYS",
        "createdBy.name": "test",
        "createdDate": "2020-12-14 17:18:12",
        "currencyIsoCode": "USD",
        "id": "cVjc000000fgrFwQI9WC",
        "lastModifiedBy": "10gd000000cEMpInogYS",
        "lastModifiedBy.name": "test",
        "lastModifiedDate": "2020-12-14 17:18:12",
        "name": "工程师3",
        "owner": "10gd000000cEMpInogYS",
        "owner.name": "test"
      },
      {
        "BEAST__name__CST": "叶一一",
        "BEAST__status__CST": "支援中",
        "createdBy": "10gd000000cEMpInogYS",
        "createdBy.name": "test",
        "createdDate": "2020-12-14 17:18:12",
        "currencyIsoCode": "USD",
        "id": "cVjc000000fgrFwSqXgm",
        "lastModifiedBy": "10gd000000cEMpInogYS",
        "lastModifiedBy.name": "test",
        "lastModifiedDate": "2020-12-14 17:18:12",
        "name": "工程师4",
        "owner": "10gd000000cEMpInogYS",
        "owner.name": "test"
      }
    ],
    "ProgrammerRecs": [
      {
        "BEAST__name__CST": "开发1组",
        "BEAST__status__CST": "空闲",
        "createdBy": "10gd000000cEMpInogYS",
        "createdBy.name": "test",
        "createdDate": "2020-12-14 17:18:12",
        "currencyIsoCode": "USD",
        "id": "cVjc000000fgrFwQI9WC",
        "lastModifiedBy": "10gd000000cEMpInogYS",
        "lastModifiedBy.name": "test",
        "lastModifiedDate": "2020-12-14 17:18:12",
        "name": "工程师3",
        "owner": "10gd000000cEMpInogYS",
        "owner.name": "test"
      },
      {
        "BEAST__name__CST": "开发1组",
        "BEAST__status__CST": "空闲",
        "createdBy": "10gd000000cEMpInogYS",
        "createdBy.name": "test",
        "createdDate": "2020-12-14 17:18:12",
        "currencyIsoCode": "USD",
        "id": "cVjc000000fgrFwSqXgm",
        "lastModifiedBy": "10gd000000cEMpInogYS",
        "lastModifiedBy.name": "test",
        "lastModifiedDate": "2020-12-14 17:18:12",
        "name": "工程师4",
        "owner": "10gd000000cEMpInogYS",
        "owner.name": "test"
      }
    ],
    "msg": "人员充足,申请工程师成功!"
  }
}

返回了"人员充足,申请工程师成功!"的提示,且工程师3和工程师4的状态变从"空闲"变更为"支援中"。

4、测试1:申请支援人数>空闲人数

输入参数:

{
  "num": 4,
  "name": "叶一一",
  "ProgrammerInfos": [
    {
      "BEAST__name__CST": "开发2组",
      "BEAST__status__CST": "空闲",
      "createdBy": "10gd000000cEMpInogYS",
      "createdBy.name": "test",
      "createdDate": "2020-12-14 17:18:12",
      "currencyIsoCode": "USD",
      "id": "cVjc000000fgrFwUpjbE",
      "lastModifiedBy": "10gd000000cEMpInogYS",
      "lastModifiedBy.name": "test",
      "lastModifiedDate": "2020-12-14 17:18:12",
      "name": "工程师5",
      "owner": "10gd000000cEMpInogYS",
      "owner.name": "test"
    },
    {
      "BEAST__name__CST": "开发2组",
      "BEAST__status__CST": "空闲",
      "createdBy": "10gd000000cEMpInogYS",
      "createdBy.name": "test",
      "createdDate": "2020-12-14 17:18:12",
      "currencyIsoCode": "USD",
      "id": "cVjc000000fgrFwX6Wdk",
      "lastModifiedBy": "10gd000000cEMpInogYS",
      "lastModifiedBy.name": "test",
      "lastModifiedDate": "2020-12-14 17:18:12",
      "name": "工程师6",
      "owner": "10gd000000cEMpInogYS",
      "owner.name": "test"
    },
    {
      "BEAST__name__CST": "开发3组",
      "BEAST__status__CST": "空闲",
      "createdBy": "10gd000000cEMpInogYS",
      "createdBy.name": "test",
      "createdDate": "2020-12-14 17:18:12",
      "currencyIsoCode": "USD",
      "id": "cVjc000000fgrFwbe6im",
      "lastModifiedBy": "10gd000000cEMpInogYS",
      "lastModifiedBy.name": "test",
      "lastModifiedDate": "2020-12-14 17:18:12",
      "name": "工程师8",
      "owner": "10gd000000cEMpInogYS",
      "owner.name": "test"
    }
  ]
}

总共工程师3人,申请4人,应该会申请失败。

输出:

{
  "interviewId": "002N0000013M4fTRDqPw",
  "outputs": {
    "ProgrammerInfosUpdate": null,
    "ProgrammerRecs": null,
    "msg": "人员不足,申请失败!"
  }
}

返回了"人员不足,申请失败!"的提示。

小结

一个包含多重校验的工程师支援小工具就十分快速的完成了。

整个开发过程简单易懂,得益于 华为云 Astro 的拖拉拽式、可视化服务编排。
?

总结

这段时间对 华为云 Astro 的体验,有一个非常不错的收获:

从知到行,从熟悉到使用,知行合一,使优秀的工具,发挥它的作用。

开发思维也发生了变化:

在华为云体验里几个产品之后,我发现实践并不是一件很消耗时间和精力的事情。

华为云提供的产品文档专业且全面,提供了许多完整的指引案例,且内含丰富的功能模板,对于刚入门的开发者十分友好。


作者:非职业「传道授业解惑」的开发者叶一一
简介:「趣学前端」、「CSS畅想」系列作者,华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏?? | 留言📝。

文章来源:https://blog.csdn.net/banxianongtang/article/details/135740563
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。