Skip to main content

方法标签方案说明

1. 需求说明

原始需求可以对方法集合进行批量的统一标准的逻辑加工。标准的定义是灵活的,和标准的执行之间并无强绑定关系。可实现边定义边实现。彼此间并行进行互不影响。

现阶段实现EP方案以及初始化数据方案都比较繁琐或者有强引用。方法标签的引入就是为了弱化构件间的强依赖关系。例如:实现EP时需要引入对应对定义的SPI所在构件才能查到对应的定义。而使用注解方案时,使用者在配置的时候只需要关注规范即可,不用引入构件到对应业务构件中。

更好理解点就是一种弱引用类型,可以以方法描述(特性)来实现某些特殊操作。

可类比:特性 (C#) | Microsoft Docs

2. 整体说明

用例说明:

img

图一

以数据收集为例:需要收集各个部门的相关数据,这些数据的来源由各个部门自己处理逻辑(简单示意图如下)。

现在的EP方案也能实现,但是比较复杂。这里不赘述对应的EP实现了。

如下的介绍都是基于此场景实现的,期望能帮助大家更好的理解。

img

图二

3. 定义

案例下载

3.1 业务构件(定义容器)

建议

由业务构件来作为容器来使用,最佳实践建议此业务构件无其他内容,功能唯一。

在本案例中,创建一个业务构件:ydg_collectdatanote(收集数据定义),作为容器。

img

3.2 方法标签定义设置(定义收集数据标准)

  • 方法标签定义设置本构件内不能重复;
  • 方法标签编码不能为空;
  • 暂时只针对构件运行处理。

img

3.3 方法标签定义实例设置(标准细化)

  • 本构件内的方法标签实例不能重复;
  • 方法标签实例编码不能为空;
  • 暂时只针对构件运行处理。

img

(1)设置方法标签属性值方法标签属性实体

在本案例中确认当前需要收集的部门信息,将其枚举设置。

img

(2)设置输入

img

(3)设置输出

img

3.4 发布(定义云化)

发布后,项目团队开发人员都可以使用该方法标签定义。

img

提示

如果是本地测试项目,也可以发布到本地测试服务。

4. 使用步骤

4.1 导入定义

方法一:通过云更新方式

如果是云项目,云更新后会同步获取对应的已发布的方法标签定义信息,供配置使用。

img

方法二:通过本地导入、导出方式

如果是本地测试服务,那么通过本地部署导出、本地导入方式引入方法标签定义。

注:如果是本地测试服务,需要将定义构件部署到测试服务,否则预览报错。

1. 导出:生成本地部署包

img

img

2. 导入:方法标签导入

img

4.2 方法标签使用设置说明

入口1:方法右键 → 方法标签,打开标签设置界面

入口2:方法编辑页面 → 点击方法标签栏后面的三个...,打开标签设置界面

绑定方式1:在标签设置界面,通过下拉选项,选择方法标签和标签实例

img

绑定方式2:通过在线文档复制后,粘贴

img

img

img

绑定方式3:支持手动填写,填写的标签定义和实例符合格式要求即可

tip

所以此功能并不要求一定先定义好标签注解和实例,才能使用,可以定义与使用同时进行开发,甚至不定义都可以,执行触发器时只要能找到与其绑定标签实例一致的处理器和使用,即可成功执行。

4.3 方法标签使用类型说明

img

1. 方法标签使用:标识此方法使用了对应的特性信息,在执行期解析时会按照特性本身定义的执行时机来执行此方法。如[【整体说明】中图2](## 2. 整体说明),各部门采集数据的操作。

2. 方法标签处理器:用来整合数据,如[【整体说明】中图2](## 2. 整体说明),统一处理器的操作,对收集上来的数据统一加工处理。

3. 方法标签触发:什么时候要收集各部门的数据,即一个触发执行此动作的入口。

为了方便理解,这里可以与 SPI-EP 实现作为参考,但不完全等于
  • 方法标签使用:对应 ep 实现
  • 方法标签处理器:对应 spi 方法
  • 方法标签触发:执行 spi 的入口,如一个 api 执行 spi

只是 SPI-EP 实现方案需要通过构件输出、添加引用等繁琐操作。方法标签方案则不需要,只需要方法标签定义、方法标签实例编码能一一对应,执行期就能自动搜集并执行对应的方法标签使用和方法标签处理器。

方法绑定标签实例后,生成的输入、输出变量说明:

当方法绑定标签实例保存后会自动引入定义实例的输出输出参数到当前设置的方法中。

  • 方法标签使用:带入方法标签实例定义的输入输出
  • 方法标签处理器:带入方法标签实例定义的输出作为输入和输出,并且增加默认的实体上下文作为输入
  • 方法标签触发:带入方法标签实例定义的输入输出

除了自动引入的输入、输出外,可另外添加其他输入、输出,只要各节点的参数编码、类型能一一对应,执行时即可完成参数传递。

4.4 定义使用者(创建产生数据逻辑)

在本案例中,创建一个业务构件( ydg_createdata(创建数据) ),定义构件方法,引入方法标签使用类型定义,主要配置产生数据逻辑。

下面以 departmentA 构件方法为例:

(1)引入方法标签

img

(2)选择方法标签实例,并且设置属性值(departmentA)和使用类型(方法标签使用

img

(3)自动带入方法标签实例定义的方法输入和方法输出

img

img

(4)配置产生数据逻辑——新增实体记录

img

img

配置说明

构件方法中departmentBdepartmentCdepartmentD的配置和 departmentA 的类似,只需要修改属性和参数即可。

(1)方法标签配置时,选择不同属性值:

img

(2)新增实体记录时,设置不同来源值:

img

img

img

4.5 定义处理器(统一处理数据逻辑)

在本案例中,创建统一收集数据触发构件( ydg_collectdata ),用户定义业务表、创建统一处理数据逻辑构件方法。

1. 创建业务表

创建4个业务表,并且依次添加相同的表字段信息。

img

2. 创建构件方法(处理器)

(1)引入方法标签

img

(2)选择方法标签实例,设置使用类型(方法标签处理器

img

(3)带入方法标签实例定义的输出作为输入和输出,并且增加默认的实体上下文作为输入

img

img

(4)统一处理数据逻辑

主要循环方法标签属性实体,判断属性值等于实例定义的属性值时,将对应的数据保存至对应的部门表中,并且给方法输出赋值。

img

img

img

配置说明

在处理器方法中,方法标签属性实体,值对应方法标签实例定义时的自定义属性值,如下:

img

方法标签实例定义的自定义属性值:

img

  • 在定义使用者(创建产生数据逻辑)的构件方法设置方法标签时,选择了不同的属性值,并给 baseData 实体(方法标签实例的输出实体)赋予不同的值输出;
  • 在处理器方法中,方法标签实例的输出实体作为该方法输入实体,根据属性值不同,将 baseData(方法输入) 实体保存至不同的业务表(部门表)中,实现数据收集效果。

4.6 定义触发器(何时收集数据并中转)

在本案例中,同样在统一收集数据触发构件( ydg_collectdata )中,配置触发器构件方法。

(1)设置方法标签实例

img

注:设置“方法标签触发”使用类型的构件方法,自定义的规则链不会被执行,只会带入方法标签实例的方法输入和方法输出。

img

(2)自动带入方法标签实例定义的方法输入和方法输出

img

img

4.7 效果演示

在本案例中,同样在统一收集数据触发构件( ydg_collectdata )中,定义测试窗体,测试效果。

img

【触发器】按钮配置事件:

img

执行效果:输入数据收集人,然后点击【触发器】按钮,执行触发器构件方法,设置入参和返回值。

img

数据收集效果:查看各个表数据收集情况。

img

img

img

img

符合预期。