Foreach案例
以Foreach实现动态调薪需求的案例;
需求场景
需求说明:
以“人员酬薪”为例,通过调薪方案(新入职人员不调薪),对每个人员的工资进行调整。
调薪操作前后对比:
1. 准备工作
- 案例演示
- 1.添加数据库表
- 2.添加窗体
- 3.绑定实体
- 4.配置事件与规则
①“人员酬薪信息”窗体
②“调薪方案”窗体
本案例中先创建表,再通过表生成对应的实体,依照命名规范,更改实体编码名称。如下:
窗体 | 数据库表 |
---|---|
人员薪酬信息表 | |
调薪方案表 |
添加2个普通窗体(分别:人员酬薪信息和调薪方案),依照界面原型,添加相关控件至窗体面板,根据界面布局规范和控件命名规范,进行布局;
“人员酬薪信息”窗体,具体布局如下:
“调薪方案”窗体,具体布局如下:
添加对应的实体(从表选择生成对应实体,依照命名规范,更改实体编码名称),如下:
①“人员酬薪信息”窗体,添加ENT_EmployeeSalaryInfo(人员薪酬信息表)
实体,并列表控件与实体进行绑定;
②“调薪方案”窗体,添加ENT_SalaryPlan(调薪方案)
实体,并列表控件与实体进行绑定;
在“人员酬薪信息”窗体中,对应的操作(事件)与规则列表:
编号 | 功能描述 | 操作(事件) | 规则 |
---|---|---|---|
1 | 默认列出所有人员酬薪信息 | 窗体加载 | 从数据库获取数据到实体 |
2 | 新增人员酬薪信息记录 | 按钮单击 | 新增实体记录 |
3 | 删除人员酬薪信息记录 | 按钮单击 | 删除实体记录 |
4 | 保存人员酬薪信息数据 | 按钮单击 | 保存实体到数据库 |
5 | 打开调薪方案进行调薪,并刷新页面数据 | 按钮单击 | 后面进行配置 |
在“调薪方案”窗体中,对应的操作(事件)与规则列表:
编号 | 功能描述 | 操作(事件) | 规则 |
---|---|---|---|
1 | 默认列出调薪方案信息 | 窗体加载 | 从数据库获取数据到实体 |
2 | 新增调薪方案记录 | 按钮单击 | 新增实体记录 |
3 | 删除调薪方案记录 | 按钮单击 | 删除实体记录 |
4 | 保存调薪方案数据 | 按钮单击 | 保存实体到数据库 |
5 | 开始调薪 | 按钮单击 | 后面进行配置 |
2. 规则链配置(重点)
- 案例演示
- 1.创建服务端方法
- 2.添加方法变量
- 3.配置“循环调薪”规则链
- 4.从数据库获取数据到实体
- 5.Foreach循环的配置(重点)
案例演示:
在构件方法中,创建服务端方法:“循环调薪”。
ServerFunc_ForeachIncrement(循环调薪)
在构件方法-服务端方法“循环调薪”中定义3个方法变量:
编号 | 方法变量 | 变量类型 | |
---|---|---|---|
1 | VAR_ENT_EmployeeSalaryInfo | 人员薪酬信息 | 实体 |
2 | VAR_ENT_SalaryPlan | 调薪方案 | 实体 |
3 | VAR_ENT_Temp_SalaryPlan | 对应调薪方案(单行数据) | 实体 |
其中,定义的实体变量,添加的字段请参考对应的表字段信息。
在构件方法-服务端方法“循环调薪”中,配置规则链:
从数据库获取【人员薪酬信息】和【调薪方案】数据保存到方法变量对应的实体。
①定义循环实体及循环变量:
- 循环实体:被遍历的对象(实体集合);
- 循环变量:正在处理的当前元素(每次循环从循环实体中获取1个实体进行处理,自动遍历所有实体)。
②配置“实体间复制记录”规则
将符合条件的调薪方案实体复制至对应调薪方案(单行数据)实体;
筛选条件:
判断Foreach循环体中每一条【人员薪酬信息】数据(EmployeeSalaryInfo)的【工龄】(WorkAge)值,在“调薪方案”中处于哪个工龄区域,然后获取满足条件的【调薪方案】实体(VAR_ENT_SalaryPlan)的数据复制给方法变量实体(VAR_ENT_Temp_SalaryPlan)。
筛选条件逻辑符 | 左括号 | 字段 | 运算符 | 值 | 右括号 |
---|---|---|---|---|---|
( | VAR_ENT_SalaryPlan.WorkAgeSmall | < | LV.EmployeeSalaryInfo.WorkAge | ) | |
and | ( | VAR_ENT_SalaryPlan.WorkAgeBig | >= | LV.EmployeeSalaryInfo.WorkAge | ) |
LV.EmployeeSalaryInfo.WorkAge
大于工龄VAR_ENT_SalaryPlan.WorkAgeSmall
- 并且(and)
LV.EmployeeSalaryInfo.WorkAge
小于等于工龄VAR_ENT_SalaryPlan.WorkAgeBig
③IF判断1:是否处于调薪工龄区域
判断方法变量实体(VAR_ENT_Temp_SalaryPlan)的记录数是否大于0,如果判断结果为True,将执行后面循环体的规则;
GetEntityRowCountFunc("BR_VAR_PARENT.VAR_ENT_Temp_SalaryPlan")>0
④IF判断2:是否新入职
满足IF判断1后,执行IF判断2。
判断循环变量实体(EmployeeSalaryInfo)的记录是否“新入职”,如果判断结果为True,将执行“中断循环”的规则,即对新入职员工不做调薪方案处理;
LV.EmployeeSalaryInfo.Remark=="新入职"
⑤配置“中断循环”规则
满足IF判断2("新入职"不调薪)后,采取【continue】的中断方式。
⑥配置“给循环变量赋值”规则,实现调薪赋值的功能:
主要是将循环变量的当前薪资,加上方法变量实体(VAR_ENT_Temp_SalaryPlan)的调薪值(AddMoney)。
当前薪资加上调薪值的表达式:
⑦配置“清除实体记录”规则:
清除方法变量实体(VAR_ENT_Temp_SalaryPlan),确保每次循环之前,该实体记录数为空。
注意:如果不清除(VAR_ENT_Temp_SalaryPlan),则导致下一次循环IF判断1继续使用上一次循环的数据进行判断。
3. 开始调薪
- 案例演示
- 1.调薪方案窗体
- 2.人员酬薪信息窗体
在“调薪方案”窗体中,对应的操作(事件)与规则列表:
在“人员酬薪信息”窗体中,对应的操作(事件)与规则列表:
①打开窗体并返回数据
②IF(“确定选择”退出窗体)
③IF(“确定选择”退出窗体) == TRUE,执行方法(窗体加载事件):
4. 启动测试页面流程
案例演示:
测试步骤:
①部署构件到测试服务;
②在浏览器中刷新当前功能页面,选择正确的构件及窗体预览页面;
③开始单元测试。