`
何必如此
  • 浏览: 55433 次
社区版块
存档分类
最新评论

规则引擎Visual Rules Solution开发基础教程【连载9】--VisualRules实例二(下)

阅读更多
VisualRules实例二(下)


         书接上回,在这篇实例的最后一部分介绍一下“员工月工资管理”的相关内容。

一、员工月工资管理需求

         我们以月为单位来计算员工的月工资,首先我们定义的一个初始化逻辑,根据员工的入职时间,将当月在职的员工的基本工资初始化到月工资表中。
         初始化之后,就有了员工工资的基本信息,然后设置员工当月的奖金以及惩罚金额。根据这些设置最后计算员工工资数据。
         最后员工就可以查询自己的月工资信息了。
         在工资管理工程下面,建立一个员工月工资规则组。该规则组下面维护月工资相关的规则包。
         我们首先需要建立一个月工资初始化的规则包,这个规则包传入月份后,就可以初始化月工资数据。
         我们再做一个月工资维护的规则包。这个规则包,显示员工的月基本工资、奖金、惩罚金额。
计算工资规则包,根据录入的数据,计算月工资、扣款、实发工资。
         最后再作一个查询功能,根据员工姓名,查询员工的月工资清单。


二、月工资初始化规则包

         首先我们在规则组下面新建一个月工资初始化的规则包,然后将该规则包的外部调用名命名为wage.salary.init。
         这个初始化的规则,是根据需要计算的月份,从员工信息表中将入职日期在该月之前的员工的基本工资取出来,作为员工的基本数据,然后将这些数据初始化到员工该月的基本工资。
         最后将这些月工资数据,更新到月工资表中。






1.定义数据源

         我们在规则包的对象库中,添加一个hr数据源,然后在其下面导入月工资表。另外我们在建立一个取入职日期在该月之前的员工的基本工资的sql查询。如下所示:




         这个sql可以通过向导生成,然后将sql语句做相应的修改,变量名称如果需要可读性强些,也可以进行定义。

2.定义内存表

         我们可以在hr数据源下面也可以直接在对象库下面建立内存表。本例中我们在hr数据源下面建立月工资的内存表。
         如下所示,右键点击hr数据源,选择“添加计算表格”:





         然后将内存表的显示名称改为“月工资内存表”,如下所示:




         点击确定后,系统会在hr数据源下面建立一个月工资内存表。下面我们需要定义月工资内存表的列信息。这些列信息,可以从月工资表的字段复制过来。在本例中,我们只需要初始化员工编号、年、月、基本工资,奖金和惩罚我们都设置为0,当月工资为基本工资,所得税和税后工资暂时都设为0,表示还没有进行计算。
         首先到月工资表的也工资表结构,选中所有的表的字段,然后右键选择复制:




         然后点击月工资内存表,在其编辑窗口,右键选择“粘贴”:




         粘贴后,会在内存表中,设定完和月工资表一致的列信息。我们选中所有的列,并且在前面打上勾,这样会将所有的列设成是可以选中的:




3.定义变量

         初始化月工资表,需要输入设置的月的年份和月份。我们分别定义变量sayear,samonth两个变量在对象库的传入数据中:




         我们在本例的业务逻辑处理时,需要根据年份和月份取得该月的最后一天,因此我们需要定义一个临时变量,这个临时变量存储该月最后一天。





         另外我们再定义一个外部方法 ,这个方法用于根据年份和月份,取得该月的最后一天。此方法在com.flagleader.util.DateUtil中的getCurMonthLastDay方法定义:点击对象库的外部调用中的添加按钮,弹出类名的输入框:




         然后在类名的输入框中输入com.flagleader.util.DateUtil,点击回车后,出现类的静态方法的选择窗体,在此选择窗体中,选择getCurMonthLastDay方法:




         点击确定后,在外部调用里面就会增加一个方法,我们将其显示名称修改为“取{arg1}年 {arg2}月的最后一天”,如下所示:



4.定义规则

         定义完了对象库之后,我们来定义操作这些数据的逻辑。首先我们根据传入的年份和月份,然后取得入职日期在该月最后一天之前的那些员工的基本工资,然后这些员工信息添加到月工资内存表中。在将内存表中员工的其他信息进行初始化。最后将这些员工信息,存入数据库表中。

(1)有效月份判断规则集

         首先定义一个校验是否输入有限的年份和月份的规则集:




(2)读取员工信息规则

         我们在规则集下面建立一个规则,名为读取员工信息,我们先设置该月最后一天,赋值给临时变量:




         设置完之后,我们根据该月最后一天执行取员工的基本工资的sql查询语句:




         我们在将查询后的数据,导入到月工资内存表中:




         添加了将查询结果“请点击选择”中的数据根据设定的列对应关系全部导入到表格(月工资内存表)中的方法后,我们点击“请点击选择”,然后再输入框中,选择“入职日期之前的员工基本信息”查询作为来源列表数据,列的对应关系,如下所示进行设置:




         点击确定后,就设置了将查询的结果集数据导入到内存表中的操作。
(3)初始化月工资数据规则

         接下来我们需要初始化月工资数据,我们要把月工资内存表中的奖金设为0,惩罚设为0,月工资设为已经分配的基本工资,所得税扣款设为0,税后工资设为0。
         先添加一个规则,命名为初始化月工资。然后通过其属性窗口,将其中的遍历表格属性打上勾,选择表格属性,选择“月工资内存表”。如下所示:






         设置完后,我们再设置具体的逻辑,我们设置多个赋值语句,被赋值的为月工资内存表的列,如下所示:




         最后我们将内存表的数据写入数据库,我们建立一个名为“写入数据库”的规则。将其遍历表格属性打上勾,选择表格属性,选择“月工资内存表”。
         我们通过向导设置表的赋值语句,并且赋值语句的值的来源,选自月工资内存表,如下,我们先选择右键点击“写入数据库”规则,选择“对表字段赋值向导”:





         然后我们选择“月工资表”下面所有的字段,并且将包含插入操作和包含更新操作打上勾,如下所示:




         点击确定后,会自动添加插入表语句,由于月工资内存表的所属年和所属月字段和输入的年和月一致,因此缺省选择的根据变量赋值给表字段的操作,不用做修改。如下所示:




5.定义页面

         业务逻辑定义完毕后,我们需要定义调用页面。这个页面通过在维护月工资数据时发起,因此我们将其设置为判断处理页面,并且设置成无错就直接返回到table.jsp页面。




         init.jsp页面不能单独显示,在table.jsp通过提交调用。

三、月工资维护规则包

         我们需要通过输入年月来查询该月的月工资数据,可以通过初始化月工资数据,可以看到该月所有员工的月工资数据,并且进行修改维护。可以对这些维护的数据,自动计算所得税和税后工资,可以将修改的数据保存到数据库中。
         我们在员工月工资规则组下面,新建一个名为“月工资维护”的规则包,将其外部调用名定义为 wage.salary.table。


1.定义数据源

         我们在对象库下面新建一个hr数据源,并且在hr数据源下面建立一个查询,如下所示:




         这是根据所属年和月,查询该月的工资表数据。

2.定义内存表

         由于我们需要以纵横表格的形式来显示数据,因此在纵轴上我们希望显示员工姓名,在横轴上我们希望显示月份。这样我们在取得的数据中,需要包含一列信息是月份信息的。因此我们定义一个内存表,增加一列信息,用于表示月份信息。
         我们在hr数据源下面,增加一个名为“员工月工资内存表”的计算表格,然后设置其信息如下所示:





         其中monthinfo为我们需要增加的月份信息,其他字段可以直接从sql查询中得到。

3.定义变量

         我们再定义需要的变量,本例中根据输入年和输入月,来查询得到月工资表,因此需要定义输入年和输入月两个变量。另外需要定义一个salarylist变量,用于从内存表中取值,另外我们还需要定义一个变量表示数据是查询页面提交上来的:




4.定义规则

         具体的业务逻辑如下,首先是根据传入年和月查询该月工资表,将该工资表赋值给内存表,将其中的月信息描述成中文,最后将此数据返回给salarylist变量传到页面。

(1)提交查询规则集

         我们定义一个规则集,其进入条件是提交不为空,并且输入年和月信息合法:





(2)读取表数据规则

         我们在规则集下面新建一个“读取表数据”的规则,规则逻辑为先根据输入年和月执行sql语句,再将sql查询的结果集赋值给内存表。




         其中列对应关系为:




(3)更新月描述信息规则

         我们在规则集下面,建立一个“更新月描述信息”规则,将此规则属性的遍历表格属性打上勾,选择表格属性,选择“员工月工资内存表”。
         然后我们在具体的逻辑中,增加一条赋值语句,被赋值为内存表的月份信息。我们需要将月份信息设置为 输入年+“年”+输入月+“月”这种形式。由于输入年和输入月为数值型,而月份信息的类型为字符串型。因此需要先设置,可以将数值型设置为字符串型。
         定义的赋值语句如下:





         然后我们点击工程菜单中的设置,如下所示:




         然后我们将编辑选项中的“自动转换其他类型为字符串”打上勾,如下所示:




         这样我们就可以在赋值语句中选择到输入年和输入月:




         设置完成后,如下所示:




(4)取内存表数据规则

         最后我们定义一个取内存表数据的规则,将内存表的数据赋值给salarylist变量,赋值语句如下所示:




         属性栏设置为:








5.定义table.jsp页面

         我们用xy纵横表格来显示月工资表,首先我们在规则包下面新建一个jsp页面,然后设置该jsp页面的模板文件为“纵横表格显示”,显示导航属性为“显示并包含返回按钮”,检索条件为“不显示”,快速检索为“不显示”,提交页面为table.jsp,保存页面为“save.jsp”,查询页面为“select.jsp”:




         然后我们设置页面的字段信息,我们将输入年的录入方式设置为“隐含字段”,将输入月的录入方式设置为“隐含字段”,将月工资表的输出方式设置为“纵横表格”,将提交的录入方式设置为“不设置”,如下所示:




         接下来,我们为月工资表的纵横表格,设置纵轴、横轴和中间值的信息。首先我们右键点击月工资表,在弹出的菜单中,选择“添加列字段向导”:




         然后弹出的选择窗体中,我们选择“员工月工资内存表”下面一些列作为显示,其中员工姓名在纵轴上显示,月份信息在横轴上显示。




         这样会在月工资表的纵横表格下面,建立值信息,缺省情况下,这些值都被设置成中间值,我们需要做以下的修改:当月基本工资、当月奖金、惩罚扣除的录入方式设置为“文本输入框”,员工姓名的字段类型设置为“纵横显示”,月份信息的字段类型设置为“横轴显示”,然后调整“月份信息”,“员工姓名”位置:




         接下来我们设置字段的扩展属性,我们将月工资表纵横表格的扩展属性做如下的修改:exportExcel属性设置为true,表示可以直接可以生成Excel数据。valuetop属性设置为true,将值设成是横向排列。hiddencolamount属性设置为true,表示隐藏汇总的列信息。




         在纵横表格的中间值中,当月工资是由当月基本工资+奖金+惩罚得到的。其中惩罚为负数。因此当月工资我们设成是公式。
         我们在当月工资字段的扩展属性中,将其formula属性设置为 @3+@4+@5:





         接下来,我们需要为页面增加一个“初始化”按钮,因此我们在jsp页面的页面元素窗体中,点击添加按钮,在弹出的输入框中输入如下:




         添加确定后,会增加一个页面元素,我们将其扩展属性做如下的设置:




         table.jsp我们设置完后,我们需要一个select.jsp来调用它。

6.设定select.jsp页面

         我们在规则包下面添加一个jsp页面,并且将其名称设置为wage/salary/select.jsp,另外我们将其模板文件设置为“录入提交页面”,另外我们将提交页面设置为“table.jsp”页面:




         我们设置页面的字段信息,由于select.jsp页面不处理salarylist,因此将此字段删除。我们要将年和月合并在一起显示,因此我们要通过扩展属性来进行设置。首先我们将sayear的录入方式设置为“文本输入框”,并且其显示名称设置为“请选择:”,另外我们将samonth的录入方式设置为“下拉式菜单选择框”,将其显示名称设置为空。我们将提交设置“提交按钮”,如下所示:




         接下来我们设置sayear的扩展属性,我们将其width设置为40,将posfix设置为年,表示后缀显示为年,hasnext设置为samonth:




         我们在设置samonth的扩展属性,我们将其postfix的属性设置为“月”,并且我们添加多个“单个菜单项”,分别用于表示下拉选择1到12月,如下所示:




         定义完页面后保存,通过jsp web浏览器打开select.jsp,出现如下界面:




         点击提交后,出现2009年3月的月工资表,但是是空白的:




         点击初始化后,再查询,就出现如下界面:




         这样就初始设置了这些员工的基本工资等信息。

三、月工资表保存规则包

         在月工资表维护界面,当修改了基本工资、奖金、惩罚等数据后,点击保存。需要激活保存规则包。点击保存时,首先需要根据基本工资、奖金、惩罚计算月工资,然后根据月工资计算所得税,最后计算实发工资,最后把这些数据存到月工资表中。
         我们在员工月工资规则组下面建立“月工资表保存”规则包,并把其外部调用名设置为 wage.salary.save


1.设定数据源

         我们在规则包的对象库中建立hr数据源,并且导入hr_salary表。

2.设定内存表

         我们定义一个内存表和月工资维护的员工月工资内存表一致,因此我们直接从月工资维护规则包中复制过来。
         首先我们在月工资维护规则包中,右键点击员工月工资内存表,选择复制。





         然后我们在月工资表保存规则包中的hr数据源,右键点击,并选择“粘贴”:




3.定义变量

         我们从月工资维护规则包的对象库中,直接复制sayear,samonth,salarylist三个变量。





         另外我们保存之后,需要根据所得税表格计算工资,因此我们定义一些临时变量来进行设置,可以直接从原先例子中计算所得税规则包中直接复制过来,这样就可以直接复制原先的规则来用。




4.定义规则

         我们的业务逻辑是当输入了有效的年月之后,我们首先将传入的salarylist重新导入到内存表中,然后逐条数据进行处理。在处理一条员工工资数据时,先将数据的值赋值给临时变量,然后通过计算所得税的那些规则来进行计算。最后将计算结果再赋值给内存表。最后将内存表的数据更新到数据库中。

(1)有效输入年月规则集

         我们定义有效输入年月规则集,进入条件如下:




(2)导入工资数据规则

         接下来我们定义导入工资数据规则,执行内存表的以下方法:




(3)逐条处理内存表记录规则

         我们将前面的例子中已经完成的计算所得税的规则包的“月工资大于零”的规则集整个复制过来,粘贴到“有效年月”的规则集下:




         粘贴后,我们将月工资大于零规则集的遍历表格属性打上勾,并且将选择表格设为“月工资内存表”。另外我们将进入条件设为空。




(4)修改计算应纳税所得额

         我们将计算应纳税所得额规则,做一下修改。添加上将内存表中的当月工资数据赋值给临时变量:




(5)修改计算税后工资规则

         设置税率的决策表不做调整,我们在计算税后工资的规则中增加将临时变量的值,再赋值给内存表:




(5)写入数据库规则

         最后我们在增加一个写入数据库的规则,将此内存表的数据更新到数据库中:




         以上完成了业务逻辑的设置。如下所示:




5.定义页面

         最后我们设置保存页面,由于保存页面是一个没有界面的操作,是直接根据月工资维护页面的提交数据,然后更新数据库。最后直接再返回页面进行显示。因此我们将此页面设定为判断处理页面:




         这样保存好,在月工资维护页面,当修改了数据后,点击保存,计算所得税和税后工资。




         再查询就可以看到修改奖金、惩罚扣除后的数据信息了:




         提交后就可以查看到具体的工资情况:




         上面这些例子讲述了利用VisualRules进行数据库开发的操作。
  • 大小: 34 KB
  • 大小: 18.1 KB
  • 大小: 12.6 KB
  • 大小: 16.9 KB
  • 大小: 15.2 KB
  • 大小: 30.5 KB
  • 大小: 12.4 KB
  • 大小: 5 KB
  • 大小: 14 KB
  • 大小: 487 Bytes
  • 大小: 9 KB
  • 大小: 1.8 KB
  • 大小: 44.4 KB
  • 大小: 6.8 KB
  • 大小: 30.4 KB
  • 大小: 32.3 KB
  • 大小: 4.4 KB
  • 大小: 15.7 KB
  • 大小: 21.9 KB
  • 大小: 12.3 KB
  • 大小: 8.5 KB
  • 大小: 15.8 KB
  • 大小: 23.4 KB
  • 大小: 14.3 KB
  • 大小: 6 KB
  • 大小: 21.8 KB
  • 大小: 39.3 KB
  • 大小: 7.2 KB
  • 大小: 3.9 KB
  • 大小: 4.8 KB
  • 大小: 27.1 KB
  • 大小: 11.6 KB
  • 大小: 4.1 KB
  • 大小: 15.8 KB
  • 大小: 4.8 KB
  • 大小: 3 KB
  • 大小: 64.8 KB
  • 大小: 11.4 KB
  • 大小: 21 KB
  • 大小: 8.7 KB
  • 大小: 8.6 KB
  • 大小: 14.4 KB
  • 大小: 29.8 KB
  • 大小: 22.1 KB
  • 大小: 26 KB
  • 大小: 23.8 KB
  • 大小: 7.7 KB
  • 大小: 9.8 KB
  • 大小: 8.5 KB
  • 大小: 10.4 KB
  • 大小: 18.5 KB
  • 大小: 24.2 KB
  • 大小: 12.2 KB
  • 大小: 5.5 KB
  • 大小: 23.2 KB
  • 大小: 16.8 KB
  • 大小: 8.5 KB
  • 大小: 5.5 KB
  • 大小: 14 KB
  • 大小: 17 KB
  • 大小: 19.5 KB
  • 大小: 19.7 KB
  • 大小: 10.9 KB
  • 大小: 28.7 KB
  • 大小: 27.2 KB
  • 大小: 35.9 KB
  • 大小: 10.2 KB
  • 大小: 5.9 KB
  • 大小: 29.3 KB
  • 大小: 16.4 KB
  • 大小: 27.7 KB
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics