逻辑设计器
本文介绍如何在 SnapDevelop 中使用逻辑设计器来定义和管理后端逻辑,包括过滤器设计和方法设计。过滤器设计用于筛选和处理数据,确保方法处理的数据符合预期。方法设计的本质是搭建 API,即封装后端业务逻辑,以提供可供调用的服务接口。
启动逻辑设计
在解决方案资源管理器中,右键单击任意设计器项目(如后端服务,浏览器端 Web 和 API,移动端 Web 和 API) ,选择添加 >新建项 ,然后在弹出的窗口中选择逻辑设计(API),命名后点击创建。这样,逻辑设计器就成功启动了。
逻辑设计器由三部分组成:
- 工具面板(左侧):提供创建过滤器或者方法的选项、以及组件库以及大纲树。
- 画板(中间):逻辑设计的主要工作区域,用于构建过滤器或者编排方法的逻辑流程。
- 属性面板(右侧):用于调整画板中选定节点的属性设置。
过滤器设计
过滤器设计用于筛选,确保传入方法的数据符合预期,从而提高系统性能和业务逻辑的准确性。在设计过滤器时,应明确其输入,确保数据的过滤逻辑清晰且可复用。
创建新过滤器
过滤器是指根据一组逻辑(过滤项)和用户输入(参数)对来自实体(过滤源)的数据进行过滤。在逻辑设计器的工具面板中,点击过滤器设计右侧的按钮,即可开始创建新的过滤器。
添加参数
过滤器的参数为输入参数,每个参数包含如下设置:
- 参数名称:参数的唯一标识名称,这个名称将在过滤器条件中使用,并与过滤源的字段建立逻辑映射关系。
- 显示名称:参数在界面上的显示名称。
- 数据类型:参数的数据类型。目前支持常规类型、枚举类型、模型类型。
- 默认值:如果用户没有输入值,则使用此默认值。
- 集合:当选择 集合 选项时,当前参数将转换为集合类型,例如:ICollection
。 对于集合类型,您可以选择 “在...中” 或 “不在...中” 运算符。更多说明,请参阅 过滤器的集合参数。 - 可空:指定该参数是否允许为空。
- 描述:参数的详细说明。
- 被引用:显示当前逻辑设计器中引用该参数的方法。
添加过滤源
点击添加过滤源字段,弹出的下拉窗口将包含当前设计项目中的所有有效实体。可添加一个或者多个实体作为过滤源。选择实体后,点击其右侧的按钮完成添加。
添加过滤项
点击添加过滤项按钮,在过滤器中创建新的过滤器条件。您可以根据需要配置不同类型的过滤项并且进行组合,以实现更精准的数据筛选。
存在三种类型的过滤项:字段、表达式 和 范围。 多个过滤项之间可以使用“并且” 或 “或者” 进行连接。
下表提供三种类别过滤器的说明和比较:
过滤器类型 | 作用 | 使用场景 |
---|---|---|
字段过滤器 | 针对单个字段进行比较 | 简单条件(如状态 = ‘已完成’)。详见 字段过滤器。 |
表达式过滤器 | 通过表达式定义条件,允许更复杂的计算逻辑 | 公式或计算条件(如全额 > 数量 * 单价)。详见表达式过滤器。 |
范围过滤器 | 组合多个条件,并控制执行顺序 | 复杂逻辑筛选(如价格在 X - Y 之间,并且库存 > 0)。详见 范围过滤器。 |
过滤器示例
主键过滤
除无主键的实体外,所有实体默认支持主键过滤,无需单独在界面上配置主键过滤器。
字段过滤器
字段过滤器是最基础的过滤器类型,它允许对单个字段进行条件筛选,它通常用于对数据库或数据集中的某个特定字段应用简单的比较运算符(如=、>、<)来筛选符合条件的数据。
字段过滤器不涉及计算或函数,主要用于直接匹配字段值,是最常见、最高效的过滤方式。
字段过滤器由三部分组成:
- 字段:来源于过滤源,指定过滤逻辑作用的数据字段。
- 逻辑运算符:用于定义字段与参数之间的比较方式。
- 参数:用户提供的输入值,与字段进行比较以确定过滤条件。
例如:要根据作者(AuthorId)作为过滤条件对博客进行过滤,可以这样设计如下过滤器:
第
在字段列表中,可以选择作者实体中的的主键字段Id,也可以选择与作者实体关联的博客实体的外键 AuthorId,如下图两个红框所示。
表达式过滤器
表达式过滤器是字段过滤器的一种扩展形式,允许使用更复杂的计算、逻辑运算、函数来定义过滤条件。相比于字段过滤器,它更加灵活,可以基于多个字段的运算结果进行筛选,而不仅仅是简单的等于(=)、大于(>)或者小于(<)比较。
在选择输入表达式后,点击表达式字段,弹出的下拉窗口将提供用于构建表达式的各种元素,帮助您高效完成表达式的创建。
例如,要过滤掉所有帖子的星数超过 100 且点赞数超过指定值的博客,可以如下设计:
添加一个名为 Star 的参数,设置数据类型为 Int32,设置默认值 100。
添加参数 Like,数据类型设置为 Int32。
将过滤器类型切换为 表达式,点击输入字段,在下拉窗口中通过选择对应的元素输入下图中的表达式。
(Blog.Stars >= Blog.FilterByStarAndLike.Star) && (Sum(Blog.Posts.Likes) >= Blog.FilterByStarAndLike.Like)
范围过滤器
范围过滤器主要用于组合多个过滤条件,以控制它们的执行顺序,而不仅仅是单独的条件匹配。它与字段过滤器或表达过滤器不同,不直接定义单个过滤条件,而是用于管理和组织多个条件,形成更复杂的逻辑结构。它具备如下核心特性:
- 组合多个过滤条件。允许在范围内定义多个条件,使它们作为一个整体进行评估。
- 控制逻辑顺序。可以先执行某些条件,再执行其它条件,确保过滤逻辑符合业务需求。
- 支持嵌套逻辑:可以将 并且 和 或者 逻辑应用于一组条件,从而创建更复杂的过滤规则。
为了演示范围过滤器的用法,这里举一个简单的例子:过滤创建时间不在指定范围内且 Category 为指定值的博客。如果您只是设计三个过滤逻辑,并用 “且” 或 “或” 连接它们,它不会产生期望的结果。您需要使用范围过滤器,如下所示:
过滤器的集合参数
集合参数是一种特殊类型的过滤器参数,它允许传入多个值,并在过滤时对这些值进行匹配。与普通的单值参数不同,集合参数可以用于匹配多个选项,例如多个ID、多个状态值或者多个分类,从而提高查询的灵活性。
例如:根据指定的多个作者 ID (Authors)过滤博客:
方法设计
方法设计的本质是定义API。在进行方法设计时,应为方法定义清晰的输入和输出参数,便于在调用时传递数据,提高方法的灵活性和可重用性。尽量避免创建过大的方法节点,以提升逻辑(或生成代码)的可读性和可维护性。
准备工作
方法设计相对复杂,充分的前期准备有助于提高设计的效率和流畅度。建议您做好以下准备:
- 分析业务需求并进行拆分:建议将一个方法定义为实现业务的最小单元,复杂业务可通过多个方法的组合来完成。
- 规划输入和输出参数:预先规划方法的输入、输出及调用场景,以确保数据传递的准确性。
- 设计执行流程:根据输入参数确定如何得到输出参数,例如需要编排哪些节点、设置哪些条件,以及需要为哪些参数赋值。
- 实体设计和过滤器设计:方法设计中会引用到的实体和过滤器,需提前规划并确保准备到位。
添加新方法
在逻辑设计器的工具面板中,在方法管理区域,您可以通过如下两种方式添加新方法:
直接点击
按钮添加新方法。如图所示,点击后,方法列表中将默认新增一个名为“Methodn”的新方法。您可以根据需要修改方法名称。
通过这种方式创建的方法,初始内容为空。后续,您可以选中该方法,在画板区域中进行方法逻辑的设计和编辑。
使用下拉按钮快速创建。点击
按钮旁的下拉按钮,在弹出的窗口中,选择一个或多个数据组件,以快速创建一个或多个方法。
在下拉窗口中,您完成如下选择后,点击添加,完成新方法的创建:
- 数据源:指定调用该方法的实体。
- 数据组件类型(新增、删除、更新和查询,支持单条或多条数据):
- 方法中将调用的数据组件。每个数据组件旁都有一个选择框,选中后,将添加与该数据组件同名的方案,并在该方法中包含相应的数据组件。
- 例如,选择新增组件,将新增Add方法,且方法中将包含Add操作;同时选择新增和删除组件,将新增两个方法,Add和Delete,且方法中分别包含Add和Delete操作。
- 过滤器:应用于所选数据组件的过滤条件,来源于当前逻辑设计器中的定义。
方法列表中,每个方法右侧均提供
(删除)按钮。点击该按钮后,对应的方法及其包含的逻辑将被永久删除。请谨慎操作。
构建方法逻辑
在方法管理区域选中某方法后,您可以使用居中的画板,结合左侧的组件库和大纲树高效设计方法中的逻辑流程,通过右侧的属性面板 编辑方法的详细信息。
进入方法编辑界面
选中方法:在方法列表中点击新建或已有的方法名称。
进入画板:选中方法后,SnapDevelop会自动打开方法编辑画板。在此区域,您可以直观看到方法的整体结构及默认的"开始"和”结束"节点。
画布工具栏:位于画板上方,提供一系列工具用于调整视图、对齐网格、管理布局以及清理画板,帮助更高效地构建和管理方法逻辑。您可以通过将鼠标悬停在某个图标上,以查看每个图标所提供的功能。
添加逻辑节点
基本节点
每个方法流程中默认包含两个基本节点:开始和结束。
- 开始节点:用于定义流程的输入参数,确保流程执行时能够接收必要的数据。
- 结束节点:用于指定流程的返回值,确保流程执行完成后能够输出所需的结果。
组件库组件
左侧组件库提供了三类组件(逻辑节点),用于构建方法逻辑,涵盖数据处理、逻辑控制、变量管理等功能。合理组合这些组件,可以实现复杂的业务逻辑,提升系统的灵活性和可维护性。
数据组件
用于执行数据库操作(增删改查),负责数据库交互。包括:
- 新增 Add:向数据库插入新数据。
- 删除 Delete:从数据库中删除指定数据。
- 更新 Update:修改已有数据记录。
- 查询 Query:从数据库检索数据。
基础组件
用于变量定义、数据处理、方法调用等,处理复杂业务逻辑,如订单匹配、数据转换。包括:
- 变量定义:存储和管理临时数据。
- 数据适配:格式化和转换数据类型。
- 流水号:生成唯一流水编号。
- 调用方法:执行其它方法或 API 请求。
- 集合访问器:对集合(如数组、列表、数据表)进行增、删操作。
逻辑组件
用于控制业务流程的执行路径,确保逻辑顺畅。包括:
- 条件分支(IF ELSE):基于某个条件决定执行不同的逻辑路径。
- 遍历(Loop):循环处理列表或集合中的每个元素。
- 继续循环(Continue):跳过当前循环迭代,继续执行下一个循环。
- 跳出循环(Break):终止循环,并继续执行后续逻辑。
您可以通过拖拽操作,从组件库选择组件,并将其添加至画板中,作为逻辑节点来构建完整的业务流程。当您拖动组件到画板时,画板中的流程图会自动标识可添加节点的位置,并以(加号)图标进行提示,方便您选择合适的放置位置并完成拖拽操作。
另外,如果直接在流程图中点击某条连线,SnapDevelop 会显示一个(小加号)图标,点击该图标后,旁边会弹出窗口,显示所有可在该位置添加的组件。您可以选择组件,将其直接插入到流程图中。
配置方法和节点属性
在大纲树和画板中选中某个节点后,右侧属性面板将以两个选项卡的形式,同时提供当前选中节点的详细配置信息,以及当前方法的配置信息。如下图所示:
关于方法和节点的详细属性说明,请参考以下章节:
重要提示
在配置方法和节点属性时,请务必确保逻辑的严密性,以避免因参数错误或流程不完整导致程序执行异常。
建议遵循以下原则配置方法和节点逻辑:
- 每个方法必须有清晰的输入和输出,避免出现无效方法。
- 在使用条件分支时,确保所有分支都有适当的处理路径。避免无限循环或无返回值的情况,特别是在使用循环和分支逻辑时。
- 配置参数时,注意数据类型和默认值,防止因输入异常导致方法运行失败。
- 定期检查和优化方法逻辑,确保系统的可维护性和可扩展性。
- 修改方法或节点属性时,建议进行充分测试,以确保逻辑正确无误。
方法属性
方法属性界面用于配置方法的基本信息、参数、返回值及 API 相关设置。下方详细介绍各个属性的作用。
1. 常规
用于配置方法的基本信息。
名称
该方法的唯一标识符,可修改以符合业务逻辑。
示例:
Add
(表示新增操作)。
参数
方法的输入参数,用于接收外部传入的数据。
每个参数包括:
-
- 名称:参数的标识符。
- 数据类型:指定参数的数据类型。
返回值
方法执行后的返回值。
例如,返回
"Success"
表示方法执行成功。
描述
可填写该方法的简要说明,以便维护和理解其功能。
2. API 配置
用于启用 API 访问该方法,并设置 API 相关属性。
启用 API
是否将该方法暴露为 API,供外部调用。
开启:方法可通过 API 访问。
关闭:方法仅在本地逻辑中使用,不对外提供API。
方法类型
指定 HTTP 方法类型,控制 API 调用方式:
GET
:用于查询数据。POST
:用于新增或提交数据。PUT
:用于更新数据。DELETE
:用于删除数据。
示例:如果将方法类型设置为
POST
,表示该 API 允许客户端提交数据以创建新记录。
路由模板
定义 API 路由的路径规则。
示例:
Add
,最终 API 访问路径为api/Api/Add
。
授权策略
设置 API 访问权限:
-
- 无:无需授权,所有请求均可访问。
- 设置为其它授权选项,即将其用于 API 访问控制。
-
API 参数来源
指定 API 请求参数如何传递给方法:
名称:参数名称,与方法参数对应。
数据类型:指定参数类型,与方法参数数据类型对应。
来源: 参数的获取渠道。
Body:参数从请求体传入(适用于
POST
、PUT
)。Query:参数从 URL 查询字符串获取(适用于
GET
)。Header:参数在 HTTP 头部中传递,常用于认证、身份验证(如
Authorization
头)。Route:是一种 URL 模板变量,需要动态匹配 URL 模板的 API(例如
GET /api/v1/products
)。Form:来源于提交的表单数据(适用于
POST
)。
提示:
- 确保方法名称唯一,避免与其他方法冲突。
- 配置 API 时,合理选择方法类型,确保符合 RESTful 设计规范。
- 使用授权策略保护敏感 API,防止未经授权的访问。
节点属性
新增(Add)
新增(Add) 数据组件用于向指定数据源添加新记录,可配置数据源、字段匹配等属性,以确保数据正确插入数据库。
1. 常规
用于设置新增数据的基本信息。
名称
该组件的唯一标识,可自定义名称以便识别。
数据源
通过下拉列表选择可用的数据源,即新增数据的目标数据库表或数据实体。选项来源于当前设计项目中包含的实体和表。
数据适配
用于配置新增数据的字段匹配关系。
选择适配对象:适用于快速选择对象与当前数据源建立匹配关系。
字段:显示当前选定的数据源中的所有字段,需要为每个字段分配对应的值。
值:点击
,选择通过指定字段、值或者表达式的方式,为当前字段分配对应的值。
删除(Delete)
删除(Delete) 数据组件 用于从指定数据源中删除符合条件的记录,支持基于主键或自定义过滤条件删除数据。
1. 常规
用于配置删除操作的基本信息。
名称
该组件的唯一标识,可自定义为更具描述性的名称,例如 "删除天气数据"。
默认值为 "删除",用户可修改以适应具体业务场景。
数据源
- 指定要删除数据的目标数据库表或数据实体。
2. 过滤条件
用于指定删除哪些数据。
过滤器
基于主键匹配删除:删除与指定主键匹配的数据记录。
使用过滤器删除:选择当前逻辑设计器中创建的过滤器,删除符合过滤器条件的数据记录。
批量删除过滤器数据源
适用于批量删除操作,可选择提供多个过滤器参数的数据源。
若为空,则按单条数据匹配进行删除。
例如,可选择一个列表数据源,其中包含多个
Id
,传递给过滤器参数,执行批量删除。
过滤器参数
定义将传递给过滤器参数的值。
名称:所指定的过滤器参数的名称。
值: 点击
,选择通过指定字段、值或者表达式的方式,为当前参数赋值。也可以指定在批量删除过滤器数据源中的值。
更新(Update)
更新(Update)数据组件 用于修改指定数据源中的现有记录,支持基于主键或其他过滤条件的更新操作。
1. 常规
用于配置更新操作的基本信息。
名称
组件的唯一标识,可修改为更具描述性的名称,例如 “更新博客记录”。
默认值为 “更新”,可根据具体业务需求修改。
数据源
- 指定要更新的目标数据表或数据实体。
2. 过滤条件
指定要更新的数据记录。
过滤器
基于主键匹配更新:更新与指定主键匹配的数据记录。
使用过滤器更新:选择当前逻辑设计器中创建的过滤器,更新符合过滤器条件的数据记录。
过滤器参数
定义将传递给过滤器参数的值。
名称:所指定的过滤器参数的名称。
值: 点击
,选择通过指定字段、值或者表达式的方式,为当前参数赋值。
3. 更新字段
指定要修改、更新的字段和值。
选择适配对象:适用于快速选择对象与当前数据源建立匹配关系。
字段:显示当前选定的数据源(如
Blog
)中的所有字段。值:点击
,选择通过指定字段、值或者表达式的方式,为当前字段赋值。
查询(Query)
查询(Query) 数据组件 用于从指定数据源中检索数据,支持多表查询、过滤、分组、排序和结果集设置,以满足不同的数据获取需求。
1. 常规
基础查询配置。
名称
组件的唯一标识,可自定义更具描述性的名称,如 “查询博客数据”。
默认值为 “查询”,可修改以适应具体业务需求。
数据源
指定查询的目标数据表、数据实体或者过滤器。
可添加多个数据源,支持单表查询或多表联合查询。
2. 关联设置
用于建立选定的数据源之间的关联关系。
添加关联关系
点击添加关联关系,在多表查询时,设置表之间的关联逻辑(Inner Join,Left Join,和Right Join),以确保查询结果的正确性。
选择关联字段。
3. 过滤
用于指定查询条件,筛选符合条件的数据。
过滤器
基于主键匹配查询:查询与指定主键匹配的数据记录。
使用过滤器查询:选择当前逻辑设计器中创建的过滤器,查询符合过滤器条件的数据记录。
过滤器参数
定义将传递给过滤器参数的值。
名称:所指定的过滤器参数的名称。
值: 点击
,选择通过指定字段、值或者表达式的方式,为当前参数赋值。
4. 查询结果设置
用于进一步优化查询结果。
分组
启用后,可按指定字段对查询结果进行分组。
例如: 按
Category
分组,以获取不同类别的数据统计。
字段设置
选择查询结果中要返回的字段,以减少不必要的数据传输,提高查询效率。
例如: 仅返回
Blog.Title
和Blog.PublishDate
,而不返回Blog.Content
。
排序
设定查询结果的排序规则,如按
PublishDate
降序 或 升序 排序。例如: 获取最近发布的
Blog
,可按PublishDate
降序排列。
结果设置
提供如下选项:
返回集合:返回查询结果的完整数据集。适用于需要处理所有查询到的数据,例如在列表中显示所有匹配的记录。
返回第一项:仅返回查询结果的第一条记录。适用于只需要一条数据的情况,比如获取某个用户的最新订单或某个记录的最早创建时间。
返回最后一项:仅返回查询结果的最后一条记录。适用于获取最新的数据,比如最新的交易记录或者日志。
返回分页数据:以分页的方式返回查询结果,而不是一次性获取所有数据。适用于数据量较大时,通过分页提高查询效率和减少内存占用。
如果选择此选项,您需要进一步完成如下配置:
- 当前页码:指定要返回的页码,需从开始节点传入参数。
- 每页记录数:定义每页返回的数据条数,需从开始节点传入参数。
- 查询分页总数:决定是否返回符合查询条件的数据总条数和总页数,以便前端显示完整的分页信息。
结果去重
- 适用于返回集合和返回分页数据的场景。
- 若勾选此项,则查询结果会去除重复数据,确保返回的数据集不包含重复项。适用于去重要求较高的查询,例如显示唯一的客户记录或去重后的订单数据。
变量定义
变量定义组件 用于在方法逻辑中创建和管理临时变量,可用于存储计算结果、传递数据,或在不同逻辑节点之间共享信息。
1. 常规
名称
该组件的唯一标识,可修改为更具描述性的名称,例如 "用户变量"、"计数器" 等。
默认值为 "变量定义",可根据具体业务需求修改。
2. 变量
用于定义变量的名称、数据类型和初始值。
变量列表
每个变量至少需要设置名称和数据类型,可选地设置初始值。
属性 说明 名称 变量的标识符,必须唯一。例如 fi
、counter
。数据类型 变量的类型,如 string
(字符串)、int
(整数)、boolean
(布尔值)等 。初始值 变量的默认值,可为空,支持手动输入或绑定参数。 点击 ,选择通过指定字段、值或者表达式的方式,为当前参数赋值。
变量操作
:创建新的变量。
删除:移除对应的变量。
调整顺序:可向上或向下拖拽该图标,改变变量的先后顺序。
示例:定义计数器变量
定义一个
counter
变量,初始值为0
。该变量可在循环逻辑中累加计数,判断循环结束条件。变量名称 数据类型 初始值 counter Int32 0
数据适配
数据适配组件用于在方法逻辑中匹配、转换和映射数据,可以将变量、参数或计算结果赋值给目标字段,确保数据格式一致,并适配不同数据结构。
1. 常规
名称
该组件的唯一标识,可修改为更具描述性的名称,例如"用户数据映射"、"订单数据转换"等。
默认值为 “数据适配”,用户可根据具体业务需求进行修改。
2. 数据适配
用于定义字段与变量之间的映射关系.
字段映射列表
属性 说明 字段 目标数据字段,需要进行适配(如数据库字段、API 响应字段)。 值 数据来源。点击 ,选择通过指定字段、值或者表达式的方式,为当前参数赋值。如果是字段,可以是来源于开始节点或变量定义节点中定义的参数,或者来源于查询结果集。
操作
:创建新的适配。
删除:移除对应的适配。
调整顺序:可向上或向下拖拽该图标,改变适配的先后顺序。
流水号
流水号组件用于生成唯一的序列号,可用于订单编号、票据编号、用户注册编号等需要连续递增或唯一标识的数据场景。
1. 常规
名称
该组件的唯一标识,可修改为更具描述性的名称,例如 "订单编号生成"、"用户注册流水号" 等。
默认值为 “流水号”,可根据具体业务需求修改。
2. 流水号
点击流水号下拉框,选择,或者点击下拉框旁边的
按钮,进入流水号编辑窗口。
您也可通过点击SnapDevelop工具栏中的图标随时访问流水号编辑窗口:
流水号编辑窗口用于配置流水号(自定义唯一标识)的生成策略,确保数据的唯一性和自动递增编号。
以下是各项配置的详细说明:
名称:设定唯一标识的名称,便于管理和应用。
生成策略:指定流水号的生成方式。目前仅提供种子表选项,意味着流水号的生成依赖于数据库中的特定表。
数据库:选择存储流水号数据的数据库,确保数据的可用性和一致性。
种子表名称:指定用于存储流水号的种子表,系统会在该表中维护流水号的生成规则和当前状态。
重置策略:指定当流水号达到最大值后是否重新生成。
步长设置:设置起始值(流水号的起始编号)和增量值(每次生成流水号的增量歩长)。
格式:设定流水号的格式,可以选择已有的格式选项,在其基础上调整;或者输入全新的格式。
例如,生成订单编号,可以设定格式为
ORD-YYYYMMDD-0001
,示例输出为ORD-20240318-0001
。生成用户注册编号,可以设定格式为USER-YYYY-00001
,按年递增编号,示例输出为USER-2025-00001
。
调用方法
调用方法组件用于在当前逻辑流程中调用其他已定义的方法,支持参数传递和返回值获取,使方法逻辑模块化、复用性更高。
1. 常规
名称
该组件的唯一标识,可修改为更具描述性的名称,例如 “调用用户查询方法"、"执行订单创建" 等。
默认值为"调用方法",可根据具体业务需求修改。
2. 调用方法
点击调用方法下拉框,选择所需的方法、并指定其输入参数的值。
下拉框:展示所有可调用的方法,其中列出当前项目中所有逻辑设计器中定义的方法,以及如下三个系统自带的方法:
方法参数:列出所选的方法所需的输入参数。为确保方法正确执行,请为每个输入参数指定相应的值。
返回结构(只读):用于显示所选方法的返回值的结构。
集合访问器
集合访问器组件用于对集合(如数组、列表、数据表)进行增、删操作,可用于数据批量处理等场景。
1. 常规
名称
该组件的唯一标识,可修改为更具描述性的名称,例如 "订单列表管理"、"用户集合处理" 等。
默认值为"集合访问器",用户可根据具体业务需求修改。
2. 集合操作
用于对指定集合数据进行操作,支持添加、批量添加、移除、批量移除等操作类型。
选择要执行的操作
- 添加:向集合中插入一条新数据。
- 批量添加:向集合中插入多条数据(集合数据)。这里添加的数据也是集合数据。
- 移除:从集合中移除一条数据。
- 批量移除:从集合中移除多条数据(集合数据)。
数据源
选择计划操作的目标数据集合。
例如上图设置的数据源是
变量定义.adds
,它的类型是EmployeeTerritories模型,是一个集合。数据
指定要操作的数据项,点击
,选择通过指定字段或者表达式的方式赋值。注意,这里数据项的类型必须与数据源的类型一致。且,如果是批量操作(批量添加或批量删除),它也必须是集合数据。
例如上图设置的数据为
临时集合.tempadd
,它与变量定义.adds
一样,类型是EmployeeTerritories
模型。
条件分支
条件分支组件用于根据指定条件决定逻辑执行路径,类似于 if-else
语句,在流程逻辑中用于控制不同条件下执行不同的操作。
1. 常规
名称
该组件的唯一标识,可修改为更具描述性的名称,例如"检查订单状态"、"用户权限验证" 等。
默认值为 "条件分支",用户可根据具体业务需求修改。
2. 条件分支
定义用于判断的逻辑条件,决定是否执行该分支内的逻辑。通过 单击编辑条件进入条件编辑界面进行条件编辑,可组合多个条件表达式,要求是返回值必须是true或者false。
条件类型有三种:字段、表达式和范围。您可以根据业务需要进行整合。
条件类型 | 作用 | 使用场景 |
---|---|---|
字段 | 针对单个字段进行比较 | 简单条件(如状态 = ‘已完成’)。 |
表达式 | 通过表达式定义条件,允许更复杂的计算逻辑 | 公式或计算条件(如全额 > 数量 * 单价)。 |
范围 | 组合多个条件,并控制执行顺序 | 复杂逻辑(如价格是否在 X - Y 之间,并且库存是否 > 0)。 |
遍历
遍历组件用于在逻辑流程中循环执行一段操作,支持计数遍历和迭代遍历,可用于批量处理数据、循环计算等场景。
1. 常规
名称
该组件的唯一标识,可修改为更具描述性的名称,例如"循环处理订单"、"用户数据遍历" 等。
默认值为 "遍历",用户可根据具体业务需求修改。
2. 遍历策略
有两种遍历策略:计数和迭代。
计数:通过数字范围进行循环控制,即从A到B,每次加/减N。
步进模式:设定遍历时的方向。
- 递增:值从起始值开始逐步增加,直到达到或超过结束值。
递减:值从起始值开始逐步减少,直到达到或低于结束值。
起始值:设置遍历的起始数值,即循环开始的初始值。
歩长值:设定每次遍历增加或减少的数值(歩长)。
结束值:设置循环的终止数值,当遍历值达到或越过该值时,遍历结束。
示例:遍历
1
到10
,每次循环增加1
。属性 值 遍历策略 计数 步进模式 递增 起始值 1
步长值 1
结束值 10
执行效果:变量值依次取
1 → 2 → 3 → ... → 10
,共执行 10 次。
迭代:表示从一个集合数据源中逐项提取数据进行处理,适用于数组、列表、查询结果等。
- 数据源:指定要遍历的数据集合来源。 点击
,选择通过指定字段或者表达式的方式获取数据源。
- 示例:假如您从数据库查询了一组订单数据,您可以将查询结果字段设置为数据源,然后在流程中对每一条订单执行操作,如更新联系人、发送通知等。
- 数据源:指定要遍历的数据集合来源。 点击
继续循环、跳出循环
继续循环、跳出循环组件是搭配遍历和条件分支使用的。例如,在遍历里定义了一个条件分支,满足条件的就继续循环,不满足条件的就跳出循环。
继续循环
用于跳过当前循环迭代的剩余部分,直接进入下一次循环。 当满足特定条件时,继续循环组件会跳过当前迭代的后续逻辑,从而减少不必要的计算。
示例:跳过未激活的用户。
目标:遍历
UserList
,跳过Status="Inactive"
的用户,处理其他用户数据。逻辑步骤 遍历 UserList
如果 UserItem.Status == "Inactive"
,执行Continue Loop
组件直接进入下一次循环,不执行当前用户的处理逻辑 处理 Active
状态的用户执行效果:
Status="Inactive"
的用户不会被处理,逻辑只针对Active
用户执行。
跳出循环
立即终止整个循环块,不再执行剩余的遍历。
示例:找到符合条件的用户后退出循环。
目标:遍历
UserList
,找到UserId=1001
的用户后立即终止循环。逻辑步骤 遍历 UserList
如果 UserItem.Id == 1001
,执行跳出循环终止循环,不再继续遍历 执行后续逻辑 执行效果:当
UserId=1001
被找到时,立即停止遍历UserList
,不再检查后续用户。