[align=center][size=x-large][b]VisualRules实例二(下)[/b][/size][/align]
[size=medium] 书接上回,在这篇实例的最后一部分介绍一下[b]“员工月工资管理”[/b]的相关内容。[/size]
[size=large][b]一、员工月工资管理需求[/b][/size]
[size=medium] 我们以月为单位来计算员工的月工资,首先我们定义的一个初始化逻辑,根据员工的入职时间,将当月在职的员工的基本工资初始化到月工资表中。
初始化之后,就有了员工工资的基本信息,然后设置员工当月的奖金以及惩罚金额。根据这些设置最后计算员工工资数据。
最后员工就可以查询自己的月工资信息了。
在工资管理工程下面,建立一个员工月工资规则组。该规则组下面维护月工资相关的规则包。
我们首先需要建立一个月工资初始化的规则包,这个规则包传入月份后,就可以初始化月工资数据。
我们再做一个月工资维护的规则包。这个规则包,显示员工的月基本工资、奖金、惩罚金额。
计算工资规则包,根据录入的数据,计算月工资、扣款、实发工资。
最后再作一个查询功能,根据员工姓名,查询员工的月工资清单。[/size]
[b][size=medium]二、月工资初始化规则包[/size][/b]
[size=medium] 首先我们在规则组下面新建一个月工资初始化的规则包,然后将该规则包的外部调用名命名为wage.salary.init。
这个初始化的规则,是根据需要计算的月份,从员工信息表中将入职日期在该月之前的员工的基本工资取出来,作为员工的基本数据,然后将这些数据初始化到员工该月的基本工资。
最后将这些月工资数据,更新到月工资表中。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4079/bad90d73-7599-3d75-9674-580d629fd677.png[/img]
[/align]
[size=medium][b]1.定义数据源[/b][/size]
[size=medium] 我们在规则包的对象库中,添加一个hr数据源,然后在其下面导入月工资表。另外我们在建立一个取入职日期在该月之前的员工的基本工资的sql查询。如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4081/1f46c152-11af-38d1-82f0-788b93433b8a.png[/img]
[/align]
[size=medium] 这个sql可以通过向导生成,然后将sql语句做相应的修改,变量名称如果需要可读性强些,也可以进行定义。[/size]
[b][size=medium]2.定义内存表[/size][/b]
[size=medium] 我们可以在hr数据源下面也可以直接在对象库下面建立内存表。本例中我们在hr数据源下面建立月工资的内存表。
如下所示,右键点击hr数据源,选择“添加计算表格”:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4083/183cfeda-b8ff-3be5-9e4d-3104ab8c09f6.png[/img]
[/align]
[size=medium] 然后将内存表的显示名称改为“月工资内存表”,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4085/2fb50513-e8ec-3242-b13d-90cbbb621453.png[/img]
[/align]
[size=medium] 点击确定后,系统会在hr数据源下面建立一个月工资内存表。下面我们需要定义月工资内存表的列信息。这些列信息,可以从月工资表的字段复制过来。在本例中,我们只需要初始化员工编号、年、月、基本工资,奖金和惩罚我们都设置为0,当月工资为基本工资,所得税和税后工资暂时都设为0,表示还没有进行计算。
首先到月工资表的也工资表结构,选中所有的表的字段,然后右键选择复制:[/size]
[align=center][img]http://dl2.iteye.com/upload/attachment/0112/4087/4fa161b2-88c1-3858-85b0-bf206921381a.png[/img][/align]
[size=medium] 然后点击月工资内存表,在其编辑窗口,右键选择“粘贴”:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4089/d6d4f150-b87c-3328-bd7e-f46ad2d84c0b.png[/img]
[/align]
[size=medium] 粘贴后,会在内存表中,设定完和月工资表一致的列信息。我们选中所有的列,并且在前面打上勾,这样会将所有的列设成是可以选中的:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4091/ce89484f-a451-302c-9f03-7fba0d692349.png[/img]
[/align]
[size=medium][b]3.定义变量[/b][/size]
[size=medium] 初始化月工资表,需要输入设置的月的年份和月份。我们分别定义变量sayear,samonth两个变量在对象库的传入数据中:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4093/3ebe55f0-0a88-3f02-a2f9-2e10d2103d17.png[/img]
[/align]
[size=medium] 我们在本例的业务逻辑处理时,需要根据年份和月份取得该月的最后一天,因此我们需要定义一个临时变量,这个临时变量存储该月最后一天。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4095/07b7985f-c880-397c-b9d8-ee44b5fb74fb.png[/img]
[/align]
[size=medium] 另外我们再定义一个外部方法[img]http://dl2.iteye.com/upload/attachment/0112/4097/f14009ff-ecb4-3976-a2dd-fea637768719.bmp[/img] ,这个方法用于根据年份和月份,取得该月的最后一天。此方法在com.flagleader.util.DateUtil中的getCurMonthLastDay方法定义:点击对象库的外部调用中的添加按钮,弹出类名的输入框:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4099/92952c6a-3b1d-3971-a225-630ec5a713d5.png[/img]
[/align]
[size=medium] 然后在类名的输入框中输入com.flagleader.util.DateUtil,点击回车后,出现类的静态方法[img]http://dl2.iteye.com/upload/attachment/0112/4101/53d6a980-23ae-381c-81ee-545a97a84075.png[/img]的选择窗体,在此选择窗体中,选择getCurMonthLastDay方法:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4103/e4c8f18f-7762-3183-a3f6-d9a7ed9aa609.png[/img]
[/align]
[size=medium] 点击确定后,在外部调用里面就会增加一个方法,我们将其显示名称修改为“取{arg1}年 {arg2}月的最后一天”,如下所示:[/size]
[align=center][img]http://dl2.iteye.com/upload/attachment/0112/4105/f8c8716e-0782-3c5a-a4ee-573e2199f87a.png[/img][/align]
[size=medium][b]4.定义规则[/b][/size]
[size=medium] 定义完了对象库之后,我们来定义操作这些数据的逻辑。首先我们根据传入的年份和月份,然后取得入职日期在该月最后一天之前的那些员工的基本工资,然后这些员工信息添加到月工资内存表中。在将内存表中员工的其他信息进行初始化。最后将这些员工信息,存入数据库表中。[/size]
[size=medium][b](1)有效月份判断规则集[/b][/size]
[size=medium] 首先定义一个校验是否输入有限的年份和月份的规则集:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4107/c2b4f7b7-93fe-3382-ba27-9877eb87115c.png[/img]
[/align]
[size=medium][b](2)读取员工信息规则[/b][/size]
[size=medium] 我们在规则集下面建立一个规则,名为读取员工信息,我们先设置该月最后一天,赋值给临时变量:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4109/e6cf8d3d-aa1a-300e-a7d4-c6d28597e238.png[/img]
[/align]
[size=medium] 设置完之后,我们根据该月最后一天执行取员工的基本工资的sql查询语句:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4111/28a4787a-18c9-3f1d-8b57-af45788ed580.png[/img]
[/align]
[size=medium] 我们在将查询后的数据,导入到月工资内存表中:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4113/7af2ae86-32d1-3a50-8906-094b87a89c15.png[/img]
[/align]
[size=medium] 添加了将查询结果“请点击选择”中的数据根据设定的列对应关系全部导入到表格(月工资内存表)中的方法后,我们点击“请点击选择”,然后再输入框中,选择“入职日期之前的员工基本信息”查询作为来源列表数据,列的对应关系,如下所示进行设置:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4115/270ef58d-c898-34c7-b06a-37feb8db8e6e.png[/img]
[/align]
[size=medium] 点击确定后,就设置了将查询的结果集数据导入到内存表中的操作。[/size]
[size=medium][b](3)初始化月工资数据规则[/b][/size]
[size=medium] 接下来我们需要初始化月工资数据,我们要把月工资内存表中的奖金设为0,惩罚设为0,月工资设为已经分配的基本工资,所得税扣款设为0,税后工资设为0。
先添加一个规则,命名为初始化月工资。然后通过其属性窗口,将其中的遍历表格属性打上勾,选择表格属性,选择“月工资内存表”。如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4117/dab68ec5-4d12-3592-881c-1571c52d48da.png[/img]
[/align]
[size=medium] 设置完后,我们再设置具体的逻辑,我们设置多个赋值语句,被赋值的为月工资内存表的列,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4119/dadcc847-f773-30fd-a668-85465753b40a.png[/img]
[/align]
[size=medium] 最后我们将内存表的数据写入数据库,我们建立一个名为“写入数据库”的规则。将其遍历表格属性打上勾,选择表格属性,选择“月工资内存表”。
我们通过向导设置表的赋值语句,并且赋值语句的值的来源,选自月工资内存表,如下,我们先选择右键点击“写入数据库”规则,选择“对表字段赋值向导”:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4121/2c8763e7-219d-319c-adc3-5416f95b1fa5.png[/img]
[/align]
[size=medium] 然后我们选择“月工资表”下面所有的字段,并且将包含插入操作和包含更新操作打上勾,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4123/57ebfb00-abe2-3c9c-8071-b9f79dc83f8b.png[/img]
[/align]
[size=medium] 点击确定后,会自动添加插入表语句,由于月工资内存表的所属年和所属月字段和输入的年和月一致,因此缺省选择的根据变量赋值给表字段的操作,不用做修改。如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4125/d3203921-2d1b-38b4-ab15-7da3ea598c65.png[/img]
[/align]
[size=medium][b]5.定义页面[/b][/size]
[size=medium] 业务逻辑定义完毕后,我们需要定义调用页面。这个页面通过在维护月工资数据时发起,因此我们将其设置为判断处理页面,并且设置成无错就直接返回到table.jsp页面。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4129/fd759a27-9ecf-341e-b897-536d16b07636.png[/img]
[/align]
[size=medium] init.jsp页面不能单独显示,在table.jsp通过提交调用。[/size]
[size=medium][b]三、月工资维护规则包[/b][/size]
[size=medium] 我们需要通过输入年月来查询该月的月工资数据,可以通过初始化月工资数据,可以看到该月所有员工的月工资数据,并且进行修改维护。可以对这些维护的数据,自动计算所得税和税后工资,可以将修改的数据保存到数据库中。
我们在员工月工资规则组下面,新建一个名为“月工资维护”的规则包,将其外部调用名定义为 wage.salary.table。
[/size]
[size=medium][b]1.定义数据源[/b][/size]
[size=medium] 我们在对象库下面新建一个hr数据源,并且在hr数据源下面建立一个查询,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4131/4ee7c991-8b0d-3f3f-8a1c-dd8ef26136b4.png[/img]
[/align]
[size=medium] 这是根据所属年和月,查询该月的工资表数据。[/size]
[size=medium][b]2.定义内存表[/b][/size]
[size=medium] 由于我们需要以纵横表格的形式来显示数据,因此在纵轴上我们希望显示员工姓名,在横轴上我们希望显示月份。这样我们在取得的数据中,需要包含一列信息是月份信息的。因此我们定义一个内存表,增加一列信息,用于表示月份信息。
我们在hr数据源下面,增加一个名为“员工月工资内存表”的计算表格,然后设置其信息如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4133/fec6f8d8-1b18-3373-8126-d3e3e82e5eee.png[/img]
[/align]
[size=medium] 其中monthinfo为我们需要增加的月份信息,其他字段可以直接从sql查询中得到。[/size]
[size=medium][b]3.定义变量[/b][/size]
[size=medium] 我们再定义需要的变量,本例中根据输入年和输入月,来查询得到月工资表,因此需要定义输入年和输入月两个变量。另外需要定义一个salarylist变量,用于从内存表中取值,另外我们还需要定义一个变量表示数据是查询页面提交上来的:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4135/2e8c35be-f8c7-3864-9ac2-bc53f6482c57.png[/img]
[/align]
[size=medium][b]4.定义规则[/b][/size]
[size=medium] 具体的业务逻辑如下,首先是根据传入年和月查询该月工资表,将该工资表赋值给内存表,将其中的月信息描述成中文,最后将此数据返回给salarylist变量传到页面。[/size]
[b][size=medium](1)提交查询规则集[/size][/b]
[size=medium]
我们定义一个规则集,其进入条件是提交不为空,并且输入年和月信息合法:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4137/58b7243c-09f6-375d-b8f8-73426e94e659.png[/img]
[/align]
[size=medium][b](2)读取表数据规则[/b][/size]
[size=medium] 我们在规则集下面新建一个“读取表数据”的规则,规则逻辑为先根据输入年和月执行sql语句,再将sql查询的结果集赋值给内存表。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4139/4d87dfb7-df6d-3a6e-8062-a60e9d48211e.png[/img]
[/align]
[size=medium] 其中列对应关系为:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4141/714f728b-7de4-3935-b2e5-ed386b0d3128.png[/img]
[/align]
[size=medium][b](3)更新月描述信息规则[/b][/size]
[size=medium] 我们在规则集下面,建立一个“更新月描述信息”规则,将此规则属性的遍历表格属性打上勾,选择表格属性,选择“员工月工资内存表”。
然后我们在具体的逻辑中,增加一条赋值语句,被赋值为内存表的月份信息。我们需要将月份信息设置为 输入年+“年”+输入月+“月”这种形式。由于输入年和输入月为数值型,而月份信息的类型为字符串型。因此需要先设置,可以将数值型设置为字符串型。
定义的赋值语句如下:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4143/b5b65610-60ec-329b-a1a8-41b33bd610ec.png[/img]
[/align]
[size=medium] 然后我们点击工程菜单中的设置,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4145/7c42d6da-1c20-3906-9835-a0bf309291c4.png[/img]
[/align]
[size=medium] 然后我们将编辑选项中的“自动转换其他类型为字符串”打上勾,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4147/ac4d1c30-0ada-3d7a-a906-079f6d528080.png[/img]
[/align]
[size=medium] 这样我们就可以在赋值语句中选择到输入年和输入月:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4149/dcc551b0-fd2f-3d62-a6ca-4f84fd6d8941.png[/img]
[/align]
[size=medium] 设置完成后,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4151/e7ce2b30-4b89-3c95-9591-25afe4cabd99.png[/img]
[/align]
[size=medium][b](4)取内存表数据规则[/b][/size]
[size=medium] 最后我们定义一个取内存表数据的规则,将内存表的数据赋值给salarylist变量,赋值语句如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4153/e62c97cb-e7a2-3c6f-8186-f7b2785e8765.png[/img]
[/align]
[size=medium] 属性栏设置为:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4155/9c004c5e-b07b-327a-975f-cc5d71b6f035.png[/img]
[/align]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4157/44b4b18a-d19b-3a55-8079-d9d3f40cff16.png[/img]
[/align]
[size=medium][b]5.定义table.jsp页面[/b][/size]
[size=medium] 我们用xy纵横表格来显示月工资表,首先我们在规则包下面新建一个jsp页面,然后设置该jsp页面的模板文件为“纵横表格显示”,显示导航属性为“显示并包含返回按钮”,检索条件为“不显示”,快速检索为“不显示”,提交页面为table.jsp,保存页面为“save.jsp”,查询页面为“select.jsp”:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4159/81079f15-62e2-3312-a0d6-426a6dadd9f7.png[/img]
[/align]
[size=medium] 然后我们设置页面的字段信息,我们将输入年的录入方式设置为“隐含字段”,将输入月的录入方式设置为“隐含字段”,将月工资表的输出方式设置为“纵横表格”,将提交的录入方式设置为“不设置”,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4161/fa134fa5-4cae-3a3a-962e-835b0f1b7040.png[/img]
[/align]
[size=medium] 接下来,我们为月工资表的纵横表格,设置纵轴、横轴和中间值的信息。首先我们右键点击月工资表,在弹出的菜单中,选择“添加列字段向导”:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4163/312a9e01-a7ba-3dd0-a2ca-1c3469e0de34.png[/img]
[/align]
[size=medium] 然后弹出的选择窗体中,我们选择“员工月工资内存表”下面一些列作为显示,其中员工姓名在纵轴上显示,月份信息在横轴上显示。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4165/bd1bad5f-5095-3546-969d-54728a148378.png[/img]
[/align]
[size=medium] 这样会在月工资表的纵横表格下面,建立值信息,缺省情况下,这些值都被设置成中间值,我们需要做以下的修改:当月基本工资、当月奖金、惩罚扣除的录入方式设置为“文本输入框”,员工姓名的字段类型设置为“纵横显示”,月份信息的字段类型设置为“横轴显示”,然后调整“月份信息”,“员工姓名”位置:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4167/7c8cfc71-1601-3d07-b006-aa56d93f4f34.png[/img]
[/align]
[size=medium] 接下来我们设置字段的扩展属性,我们将月工资表纵横表格的扩展属性做如下的修改:exportExcel属性设置为true,表示可以直接可以生成Excel数据。valuetop属性设置为true,将值设成是横向排列。hiddencolamount属性设置为true,表示隐藏汇总的列信息。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4169/99cf6675-af8a-3214-b964-26c66c2e72c4.png[/img]
[/align]
[size=medium] 在纵横表格的中间值中,当月工资是由当月基本工资+奖金+惩罚得到的。其中惩罚为负数。因此当月工资我们设成是公式。
我们在当月工资字段的扩展属性中,将其formula属性设置为 @3+@4+@5:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4171/94d77aa0-2a0b-3843-8605-dacb8eac0556.png[/img]
[/align]
[size=medium] 接下来,我们需要为页面增加一个“初始化”按钮,因此我们在jsp页面的页面元素窗体中,点击添加按钮,在弹出的输入框中输入如下:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4173/d20c2d49-d1d3-3304-99ff-39bd04ff14db.png[/img]
[/align]
[size=medium] 添加确定后,会增加一个页面元素,我们将其扩展属性做如下的设置:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4175/fec1b0ff-b74d-3fad-8d1c-5dbc1375846d.png[/img]
[/align]
[size=medium] table.jsp我们设置完后,我们需要一个select.jsp来调用它。[/size]
[size=medium][b]6.设定select.jsp页面[/b][/size]
[size=medium] 我们在规则包下面添加一个jsp页面,并且将其名称设置为wage/salary/select.jsp,另外我们将其模板文件设置为“录入提交页面”,另外我们将提交页面设置为“table.jsp”页面:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4177/9e21129a-af9d-350f-8af5-697989b1d213.png[/img]
[/align]
[size=medium] 我们设置页面的字段信息,由于select.jsp页面不处理salarylist,因此将此字段删除。我们要将年和月合并在一起显示,因此我们要通过扩展属性来进行设置。首先我们将sayear的录入方式设置为“文本输入框”,并且其显示名称设置为“请选择:”,另外我们将samonth的录入方式设置为“下拉式菜单选择框”,将其显示名称设置为空。我们将提交设置“提交按钮”,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4179/668ad957-2960-337b-a9b9-53a040ec95e3.png[/img]
[/align]
[size=medium] 接下来我们设置sayear的扩展属性,我们将其width设置为40,将posfix设置为年,表示后缀显示为年,hasnext设置为samonth:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4181/f19d43df-c0bd-3d82-814b-a0bb4335a4cf.png[/img]
[/align]
[size=medium] 我们在设置samonth的扩展属性,我们将其postfix的属性设置为“月”,并且我们添加多个“单个菜单项”,分别用于表示下拉选择1到12月,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4183/1121c5e7-dfe8-3431-881e-8268a4c14043.png[/img]
[/align]
[size=medium] 定义完页面后保存,通过jsp web浏览器打开select.jsp,出现如下界面:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4185/0ea360c7-e4a0-337b-992a-2bfc7dfe9211.png[/img]
[/align]
[size=medium] 点击提交后,出现2009年3月的月工资表,但是是空白的:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4187/a6660398-4435-3a19-8baa-e177259e6d65.png[/img]
[/align]
[size=medium] 点击初始化后,再查询,就出现如下界面:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4189/e114c85a-8442-34de-8c28-290112b591da.png[/img]
[/align]
[size=medium] 这样就初始设置了这些员工的基本工资等信息。[/size]
[size=medium][b]三、月工资表保存规则包[/b][/size]
[size=medium] 在月工资表维护界面,当修改了基本工资、奖金、惩罚等数据后,点击保存。需要激活保存规则包。点击保存时,首先需要根据基本工资、奖金、惩罚计算月工资,然后根据月工资计算所得税,最后计算实发工资,最后把这些数据存到月工资表中。
我们在员工月工资规则组下面建立“月工资表保存”规则包,并把其外部调用名设置为 wage.salary.save[/size]
[size=medium][b]1.设定数据源[/b][/size]
[size=medium] 我们在规则包的对象库中建立hr数据源,并且导入hr_salary表。[/size]
[size=medium][b]2.设定内存表[/b][/size]
[size=medium] 我们定义一个内存表和月工资维护的员工月工资内存表一致,因此我们直接从月工资维护规则包中复制过来。
首先我们在月工资维护规则包中,右键点击员工月工资内存表,选择复制。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4191/5f6af8fb-6f88-3712-ad19-15c818520822.png[/img]
[/align]
[size=medium] 然后我们在月工资表保存规则包中的hr数据源,右键点击,并选择“粘贴”:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4193/0ee9e27c-b85f-3de5-8632-f209f2a4d5ae.png[/img]
[/align]
[size=medium][b]3.定义变量[/b][/size]
[size=medium] 我们从月工资维护规则包的对象库中,直接复制sayear,samonth,salarylist三个变量。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4195/de365978-b490-3d79-9c6e-ac5ea384b6d7.png[/img]
[/align]
[size=medium] 另外我们保存之后,需要根据所得税表格计算工资,因此我们定义一些临时变量来进行设置,可以直接从原先例子中计算所得税规则包中直接复制过来,这样就可以直接复制原先的规则来用。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4197/1cfc4ae8-4788-3a28-a62d-0d9e8a43aade.png[/img]
[/align]
[size=medium][b]4.定义规则[/b][/size]
[size=medium] 我们的业务逻辑是当输入了有效的年月之后,我们首先将传入的salarylist重新导入到内存表中,然后逐条数据进行处理。在处理一条员工工资数据时,先将数据的值赋值给临时变量,然后通过计算所得税的那些规则来进行计算。最后将计算结果再赋值给内存表。最后将内存表的数据更新到数据库中。[/size]
[size=medium][b](1)有效输入年月规则集[/b][/size]
[size=medium] 我们定义有效输入年月规则集,进入条件如下:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4199/edf53d80-c74c-3226-972b-40db9427b802.png[/img]
[/align]
[size=medium][b](2)导入工资数据规则[/b][/size]
[size=medium] 接下来我们定义导入工资数据规则,执行内存表的以下方法:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4201/d9b68628-ec55-32ce-a504-cf5580669471.png[/img]
[/align]
[size=medium][b](3)逐条处理内存表记录规则[/b][/size]
[size=medium] 我们将前面的例子中已经完成的计算所得税的规则包的“月工资大于零”的规则集整个复制过来,粘贴到“有效年月”的规则集下:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4203/7570cea4-f23e-319e-82f5-ab98860cdb62.png[/img]
[/align]
[size=medium] 粘贴后,我们将月工资大于零规则集的遍历表格属性打上勾,并且将选择表格设为“月工资内存表”。另外我们将进入条件设为空。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4205/96092870-5164-3940-95d5-795f8df39d55.png[/img]
[/align]
[size=medium][b](4)修改计算应纳税所得额[/b][/size]
[size=medium] 我们将计算应纳税所得额规则,做一下修改。添加上将内存表中的当月工资数据赋值给临时变量:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4207/e40d9b8f-dcbb-31f4-91cf-f1122aa0bd48.png[/img]
[/align]
[b][size=medium](5)修改计算税后工资规则[/size][/b]
[size=medium] 设置税率的决策表不做调整,我们在计算税后工资的规则中增加将临时变量的值,再赋值给内存表:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4209/d67d4428-4571-396b-bc39-a89491d7244d.png[/img]
[/align]
[size=medium][b](5)写入数据库规则[/b][/size]
[size=medium] 最后我们在增加一个写入数据库的规则,将此内存表的数据更新到数据库中:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4211/6c1413d1-ab2f-32a3-8879-9654322dc06e.png[/img]
[/align]
[size=medium] 以上完成了业务逻辑的设置。如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4213/ad0dce69-14d5-3233-b426-304212f7437e.png[/img]
[/align]
[size=medium][b]5.定义页面[/b][/size]
[size=medium] 最后我们设置保存页面,由于保存页面是一个没有界面的操作,是直接根据月工资维护页面的提交数据,然后更新数据库。最后直接再返回页面进行显示。因此我们将此页面设定为判断处理页面:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4215/7e785104-20ff-3728-8bfa-fbf4900cbf20.png[/img]
[/align]
[size=medium] 这样保存好,在月工资维护页面,当修改了数据后,点击保存,计算所得税和税后工资。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4217/fb227d69-42fd-3ece-923f-c02e5d70eafe.png[/img]
[/align]
[size=medium] 再查询就可以看到修改奖金、惩罚扣除后的数据信息了:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4219/75cfb8b6-61bd-3e72-9421-8717f38090aa.png[/img]
[/align]
[size=medium] 提交后就可以查看到具体的工资情况:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4221/28f69de3-3265-35e2-acf0-ece01e7f41fa.png[/img]
[/align]
[size=medium] 上面这些例子讲述了利用VisualRules进行数据库开发的操作。[/size]
[size=medium] 书接上回,在这篇实例的最后一部分介绍一下[b]“员工月工资管理”[/b]的相关内容。[/size]
[size=large][b]一、员工月工资管理需求[/b][/size]
[size=medium] 我们以月为单位来计算员工的月工资,首先我们定义的一个初始化逻辑,根据员工的入职时间,将当月在职的员工的基本工资初始化到月工资表中。
初始化之后,就有了员工工资的基本信息,然后设置员工当月的奖金以及惩罚金额。根据这些设置最后计算员工工资数据。
最后员工就可以查询自己的月工资信息了。
在工资管理工程下面,建立一个员工月工资规则组。该规则组下面维护月工资相关的规则包。
我们首先需要建立一个月工资初始化的规则包,这个规则包传入月份后,就可以初始化月工资数据。
我们再做一个月工资维护的规则包。这个规则包,显示员工的月基本工资、奖金、惩罚金额。
计算工资规则包,根据录入的数据,计算月工资、扣款、实发工资。
最后再作一个查询功能,根据员工姓名,查询员工的月工资清单。[/size]
[b][size=medium]二、月工资初始化规则包[/size][/b]
[size=medium] 首先我们在规则组下面新建一个月工资初始化的规则包,然后将该规则包的外部调用名命名为wage.salary.init。
这个初始化的规则,是根据需要计算的月份,从员工信息表中将入职日期在该月之前的员工的基本工资取出来,作为员工的基本数据,然后将这些数据初始化到员工该月的基本工资。
最后将这些月工资数据,更新到月工资表中。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4079/bad90d73-7599-3d75-9674-580d629fd677.png[/img]
[/align]
[size=medium][b]1.定义数据源[/b][/size]
[size=medium] 我们在规则包的对象库中,添加一个hr数据源,然后在其下面导入月工资表。另外我们在建立一个取入职日期在该月之前的员工的基本工资的sql查询。如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4081/1f46c152-11af-38d1-82f0-788b93433b8a.png[/img]
[/align]
[size=medium] 这个sql可以通过向导生成,然后将sql语句做相应的修改,变量名称如果需要可读性强些,也可以进行定义。[/size]
[b][size=medium]2.定义内存表[/size][/b]
[size=medium] 我们可以在hr数据源下面也可以直接在对象库下面建立内存表。本例中我们在hr数据源下面建立月工资的内存表。
如下所示,右键点击hr数据源,选择“添加计算表格”:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4083/183cfeda-b8ff-3be5-9e4d-3104ab8c09f6.png[/img]
[/align]
[size=medium] 然后将内存表的显示名称改为“月工资内存表”,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4085/2fb50513-e8ec-3242-b13d-90cbbb621453.png[/img]
[/align]
[size=medium] 点击确定后,系统会在hr数据源下面建立一个月工资内存表。下面我们需要定义月工资内存表的列信息。这些列信息,可以从月工资表的字段复制过来。在本例中,我们只需要初始化员工编号、年、月、基本工资,奖金和惩罚我们都设置为0,当月工资为基本工资,所得税和税后工资暂时都设为0,表示还没有进行计算。
首先到月工资表的也工资表结构,选中所有的表的字段,然后右键选择复制:[/size]
[align=center][img]http://dl2.iteye.com/upload/attachment/0112/4087/4fa161b2-88c1-3858-85b0-bf206921381a.png[/img][/align]
[size=medium] 然后点击月工资内存表,在其编辑窗口,右键选择“粘贴”:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4089/d6d4f150-b87c-3328-bd7e-f46ad2d84c0b.png[/img]
[/align]
[size=medium] 粘贴后,会在内存表中,设定完和月工资表一致的列信息。我们选中所有的列,并且在前面打上勾,这样会将所有的列设成是可以选中的:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4091/ce89484f-a451-302c-9f03-7fba0d692349.png[/img]
[/align]
[size=medium][b]3.定义变量[/b][/size]
[size=medium] 初始化月工资表,需要输入设置的月的年份和月份。我们分别定义变量sayear,samonth两个变量在对象库的传入数据中:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4093/3ebe55f0-0a88-3f02-a2f9-2e10d2103d17.png[/img]
[/align]
[size=medium] 我们在本例的业务逻辑处理时,需要根据年份和月份取得该月的最后一天,因此我们需要定义一个临时变量,这个临时变量存储该月最后一天。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4095/07b7985f-c880-397c-b9d8-ee44b5fb74fb.png[/img]
[/align]
[size=medium] 另外我们再定义一个外部方法[img]http://dl2.iteye.com/upload/attachment/0112/4097/f14009ff-ecb4-3976-a2dd-fea637768719.bmp[/img] ,这个方法用于根据年份和月份,取得该月的最后一天。此方法在com.flagleader.util.DateUtil中的getCurMonthLastDay方法定义:点击对象库的外部调用中的添加按钮,弹出类名的输入框:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4099/92952c6a-3b1d-3971-a225-630ec5a713d5.png[/img]
[/align]
[size=medium] 然后在类名的输入框中输入com.flagleader.util.DateUtil,点击回车后,出现类的静态方法[img]http://dl2.iteye.com/upload/attachment/0112/4101/53d6a980-23ae-381c-81ee-545a97a84075.png[/img]的选择窗体,在此选择窗体中,选择getCurMonthLastDay方法:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4103/e4c8f18f-7762-3183-a3f6-d9a7ed9aa609.png[/img]
[/align]
[size=medium] 点击确定后,在外部调用里面就会增加一个方法,我们将其显示名称修改为“取{arg1}年 {arg2}月的最后一天”,如下所示:[/size]
[align=center][img]http://dl2.iteye.com/upload/attachment/0112/4105/f8c8716e-0782-3c5a-a4ee-573e2199f87a.png[/img][/align]
[size=medium][b]4.定义规则[/b][/size]
[size=medium] 定义完了对象库之后,我们来定义操作这些数据的逻辑。首先我们根据传入的年份和月份,然后取得入职日期在该月最后一天之前的那些员工的基本工资,然后这些员工信息添加到月工资内存表中。在将内存表中员工的其他信息进行初始化。最后将这些员工信息,存入数据库表中。[/size]
[size=medium][b](1)有效月份判断规则集[/b][/size]
[size=medium] 首先定义一个校验是否输入有限的年份和月份的规则集:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4107/c2b4f7b7-93fe-3382-ba27-9877eb87115c.png[/img]
[/align]
[size=medium][b](2)读取员工信息规则[/b][/size]
[size=medium] 我们在规则集下面建立一个规则,名为读取员工信息,我们先设置该月最后一天,赋值给临时变量:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4109/e6cf8d3d-aa1a-300e-a7d4-c6d28597e238.png[/img]
[/align]
[size=medium] 设置完之后,我们根据该月最后一天执行取员工的基本工资的sql查询语句:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4111/28a4787a-18c9-3f1d-8b57-af45788ed580.png[/img]
[/align]
[size=medium] 我们在将查询后的数据,导入到月工资内存表中:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4113/7af2ae86-32d1-3a50-8906-094b87a89c15.png[/img]
[/align]
[size=medium] 添加了将查询结果“请点击选择”中的数据根据设定的列对应关系全部导入到表格(月工资内存表)中的方法后,我们点击“请点击选择”,然后再输入框中,选择“入职日期之前的员工基本信息”查询作为来源列表数据,列的对应关系,如下所示进行设置:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4115/270ef58d-c898-34c7-b06a-37feb8db8e6e.png[/img]
[/align]
[size=medium] 点击确定后,就设置了将查询的结果集数据导入到内存表中的操作。[/size]
[size=medium][b](3)初始化月工资数据规则[/b][/size]
[size=medium] 接下来我们需要初始化月工资数据,我们要把月工资内存表中的奖金设为0,惩罚设为0,月工资设为已经分配的基本工资,所得税扣款设为0,税后工资设为0。
先添加一个规则,命名为初始化月工资。然后通过其属性窗口,将其中的遍历表格属性打上勾,选择表格属性,选择“月工资内存表”。如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4117/dab68ec5-4d12-3592-881c-1571c52d48da.png[/img]
[/align]
[size=medium] 设置完后,我们再设置具体的逻辑,我们设置多个赋值语句,被赋值的为月工资内存表的列,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4119/dadcc847-f773-30fd-a668-85465753b40a.png[/img]
[/align]
[size=medium] 最后我们将内存表的数据写入数据库,我们建立一个名为“写入数据库”的规则。将其遍历表格属性打上勾,选择表格属性,选择“月工资内存表”。
我们通过向导设置表的赋值语句,并且赋值语句的值的来源,选自月工资内存表,如下,我们先选择右键点击“写入数据库”规则,选择“对表字段赋值向导”:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4121/2c8763e7-219d-319c-adc3-5416f95b1fa5.png[/img]
[/align]
[size=medium] 然后我们选择“月工资表”下面所有的字段,并且将包含插入操作和包含更新操作打上勾,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4123/57ebfb00-abe2-3c9c-8071-b9f79dc83f8b.png[/img]
[/align]
[size=medium] 点击确定后,会自动添加插入表语句,由于月工资内存表的所属年和所属月字段和输入的年和月一致,因此缺省选择的根据变量赋值给表字段的操作,不用做修改。如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4125/d3203921-2d1b-38b4-ab15-7da3ea598c65.png[/img]
[/align]
[size=medium][b]5.定义页面[/b][/size]
[size=medium] 业务逻辑定义完毕后,我们需要定义调用页面。这个页面通过在维护月工资数据时发起,因此我们将其设置为判断处理页面,并且设置成无错就直接返回到table.jsp页面。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4129/fd759a27-9ecf-341e-b897-536d16b07636.png[/img]
[/align]
[size=medium] init.jsp页面不能单独显示,在table.jsp通过提交调用。[/size]
[size=medium][b]三、月工资维护规则包[/b][/size]
[size=medium] 我们需要通过输入年月来查询该月的月工资数据,可以通过初始化月工资数据,可以看到该月所有员工的月工资数据,并且进行修改维护。可以对这些维护的数据,自动计算所得税和税后工资,可以将修改的数据保存到数据库中。
我们在员工月工资规则组下面,新建一个名为“月工资维护”的规则包,将其外部调用名定义为 wage.salary.table。
[/size]
[size=medium][b]1.定义数据源[/b][/size]
[size=medium] 我们在对象库下面新建一个hr数据源,并且在hr数据源下面建立一个查询,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4131/4ee7c991-8b0d-3f3f-8a1c-dd8ef26136b4.png[/img]
[/align]
[size=medium] 这是根据所属年和月,查询该月的工资表数据。[/size]
[size=medium][b]2.定义内存表[/b][/size]
[size=medium] 由于我们需要以纵横表格的形式来显示数据,因此在纵轴上我们希望显示员工姓名,在横轴上我们希望显示月份。这样我们在取得的数据中,需要包含一列信息是月份信息的。因此我们定义一个内存表,增加一列信息,用于表示月份信息。
我们在hr数据源下面,增加一个名为“员工月工资内存表”的计算表格,然后设置其信息如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4133/fec6f8d8-1b18-3373-8126-d3e3e82e5eee.png[/img]
[/align]
[size=medium] 其中monthinfo为我们需要增加的月份信息,其他字段可以直接从sql查询中得到。[/size]
[size=medium][b]3.定义变量[/b][/size]
[size=medium] 我们再定义需要的变量,本例中根据输入年和输入月,来查询得到月工资表,因此需要定义输入年和输入月两个变量。另外需要定义一个salarylist变量,用于从内存表中取值,另外我们还需要定义一个变量表示数据是查询页面提交上来的:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4135/2e8c35be-f8c7-3864-9ac2-bc53f6482c57.png[/img]
[/align]
[size=medium][b]4.定义规则[/b][/size]
[size=medium] 具体的业务逻辑如下,首先是根据传入年和月查询该月工资表,将该工资表赋值给内存表,将其中的月信息描述成中文,最后将此数据返回给salarylist变量传到页面。[/size]
[b][size=medium](1)提交查询规则集[/size][/b]
[size=medium]
我们定义一个规则集,其进入条件是提交不为空,并且输入年和月信息合法:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4137/58b7243c-09f6-375d-b8f8-73426e94e659.png[/img]
[/align]
[size=medium][b](2)读取表数据规则[/b][/size]
[size=medium] 我们在规则集下面新建一个“读取表数据”的规则,规则逻辑为先根据输入年和月执行sql语句,再将sql查询的结果集赋值给内存表。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4139/4d87dfb7-df6d-3a6e-8062-a60e9d48211e.png[/img]
[/align]
[size=medium] 其中列对应关系为:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4141/714f728b-7de4-3935-b2e5-ed386b0d3128.png[/img]
[/align]
[size=medium][b](3)更新月描述信息规则[/b][/size]
[size=medium] 我们在规则集下面,建立一个“更新月描述信息”规则,将此规则属性的遍历表格属性打上勾,选择表格属性,选择“员工月工资内存表”。
然后我们在具体的逻辑中,增加一条赋值语句,被赋值为内存表的月份信息。我们需要将月份信息设置为 输入年+“年”+输入月+“月”这种形式。由于输入年和输入月为数值型,而月份信息的类型为字符串型。因此需要先设置,可以将数值型设置为字符串型。
定义的赋值语句如下:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4143/b5b65610-60ec-329b-a1a8-41b33bd610ec.png[/img]
[/align]
[size=medium] 然后我们点击工程菜单中的设置,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4145/7c42d6da-1c20-3906-9835-a0bf309291c4.png[/img]
[/align]
[size=medium] 然后我们将编辑选项中的“自动转换其他类型为字符串”打上勾,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4147/ac4d1c30-0ada-3d7a-a906-079f6d528080.png[/img]
[/align]
[size=medium] 这样我们就可以在赋值语句中选择到输入年和输入月:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4149/dcc551b0-fd2f-3d62-a6ca-4f84fd6d8941.png[/img]
[/align]
[size=medium] 设置完成后,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4151/e7ce2b30-4b89-3c95-9591-25afe4cabd99.png[/img]
[/align]
[size=medium][b](4)取内存表数据规则[/b][/size]
[size=medium] 最后我们定义一个取内存表数据的规则,将内存表的数据赋值给salarylist变量,赋值语句如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4153/e62c97cb-e7a2-3c6f-8186-f7b2785e8765.png[/img]
[/align]
[size=medium] 属性栏设置为:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4155/9c004c5e-b07b-327a-975f-cc5d71b6f035.png[/img]
[/align]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4157/44b4b18a-d19b-3a55-8079-d9d3f40cff16.png[/img]
[/align]
[size=medium][b]5.定义table.jsp页面[/b][/size]
[size=medium] 我们用xy纵横表格来显示月工资表,首先我们在规则包下面新建一个jsp页面,然后设置该jsp页面的模板文件为“纵横表格显示”,显示导航属性为“显示并包含返回按钮”,检索条件为“不显示”,快速检索为“不显示”,提交页面为table.jsp,保存页面为“save.jsp”,查询页面为“select.jsp”:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4159/81079f15-62e2-3312-a0d6-426a6dadd9f7.png[/img]
[/align]
[size=medium] 然后我们设置页面的字段信息,我们将输入年的录入方式设置为“隐含字段”,将输入月的录入方式设置为“隐含字段”,将月工资表的输出方式设置为“纵横表格”,将提交的录入方式设置为“不设置”,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4161/fa134fa5-4cae-3a3a-962e-835b0f1b7040.png[/img]
[/align]
[size=medium] 接下来,我们为月工资表的纵横表格,设置纵轴、横轴和中间值的信息。首先我们右键点击月工资表,在弹出的菜单中,选择“添加列字段向导”:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4163/312a9e01-a7ba-3dd0-a2ca-1c3469e0de34.png[/img]
[/align]
[size=medium] 然后弹出的选择窗体中,我们选择“员工月工资内存表”下面一些列作为显示,其中员工姓名在纵轴上显示,月份信息在横轴上显示。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4165/bd1bad5f-5095-3546-969d-54728a148378.png[/img]
[/align]
[size=medium] 这样会在月工资表的纵横表格下面,建立值信息,缺省情况下,这些值都被设置成中间值,我们需要做以下的修改:当月基本工资、当月奖金、惩罚扣除的录入方式设置为“文本输入框”,员工姓名的字段类型设置为“纵横显示”,月份信息的字段类型设置为“横轴显示”,然后调整“月份信息”,“员工姓名”位置:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4167/7c8cfc71-1601-3d07-b006-aa56d93f4f34.png[/img]
[/align]
[size=medium] 接下来我们设置字段的扩展属性,我们将月工资表纵横表格的扩展属性做如下的修改:exportExcel属性设置为true,表示可以直接可以生成Excel数据。valuetop属性设置为true,将值设成是横向排列。hiddencolamount属性设置为true,表示隐藏汇总的列信息。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4169/99cf6675-af8a-3214-b964-26c66c2e72c4.png[/img]
[/align]
[size=medium] 在纵横表格的中间值中,当月工资是由当月基本工资+奖金+惩罚得到的。其中惩罚为负数。因此当月工资我们设成是公式。
我们在当月工资字段的扩展属性中,将其formula属性设置为 @3+@4+@5:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4171/94d77aa0-2a0b-3843-8605-dacb8eac0556.png[/img]
[/align]
[size=medium] 接下来,我们需要为页面增加一个“初始化”按钮,因此我们在jsp页面的页面元素窗体中,点击添加按钮,在弹出的输入框中输入如下:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4173/d20c2d49-d1d3-3304-99ff-39bd04ff14db.png[/img]
[/align]
[size=medium] 添加确定后,会增加一个页面元素,我们将其扩展属性做如下的设置:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4175/fec1b0ff-b74d-3fad-8d1c-5dbc1375846d.png[/img]
[/align]
[size=medium] table.jsp我们设置完后,我们需要一个select.jsp来调用它。[/size]
[size=medium][b]6.设定select.jsp页面[/b][/size]
[size=medium] 我们在规则包下面添加一个jsp页面,并且将其名称设置为wage/salary/select.jsp,另外我们将其模板文件设置为“录入提交页面”,另外我们将提交页面设置为“table.jsp”页面:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4177/9e21129a-af9d-350f-8af5-697989b1d213.png[/img]
[/align]
[size=medium] 我们设置页面的字段信息,由于select.jsp页面不处理salarylist,因此将此字段删除。我们要将年和月合并在一起显示,因此我们要通过扩展属性来进行设置。首先我们将sayear的录入方式设置为“文本输入框”,并且其显示名称设置为“请选择:”,另外我们将samonth的录入方式设置为“下拉式菜单选择框”,将其显示名称设置为空。我们将提交设置“提交按钮”,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4179/668ad957-2960-337b-a9b9-53a040ec95e3.png[/img]
[/align]
[size=medium] 接下来我们设置sayear的扩展属性,我们将其width设置为40,将posfix设置为年,表示后缀显示为年,hasnext设置为samonth:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4181/f19d43df-c0bd-3d82-814b-a0bb4335a4cf.png[/img]
[/align]
[size=medium] 我们在设置samonth的扩展属性,我们将其postfix的属性设置为“月”,并且我们添加多个“单个菜单项”,分别用于表示下拉选择1到12月,如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4183/1121c5e7-dfe8-3431-881e-8268a4c14043.png[/img]
[/align]
[size=medium] 定义完页面后保存,通过jsp web浏览器打开select.jsp,出现如下界面:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4185/0ea360c7-e4a0-337b-992a-2bfc7dfe9211.png[/img]
[/align]
[size=medium] 点击提交后,出现2009年3月的月工资表,但是是空白的:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4187/a6660398-4435-3a19-8baa-e177259e6d65.png[/img]
[/align]
[size=medium] 点击初始化后,再查询,就出现如下界面:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4189/e114c85a-8442-34de-8c28-290112b591da.png[/img]
[/align]
[size=medium] 这样就初始设置了这些员工的基本工资等信息。[/size]
[size=medium][b]三、月工资表保存规则包[/b][/size]
[size=medium] 在月工资表维护界面,当修改了基本工资、奖金、惩罚等数据后,点击保存。需要激活保存规则包。点击保存时,首先需要根据基本工资、奖金、惩罚计算月工资,然后根据月工资计算所得税,最后计算实发工资,最后把这些数据存到月工资表中。
我们在员工月工资规则组下面建立“月工资表保存”规则包,并把其外部调用名设置为 wage.salary.save[/size]
[size=medium][b]1.设定数据源[/b][/size]
[size=medium] 我们在规则包的对象库中建立hr数据源,并且导入hr_salary表。[/size]
[size=medium][b]2.设定内存表[/b][/size]
[size=medium] 我们定义一个内存表和月工资维护的员工月工资内存表一致,因此我们直接从月工资维护规则包中复制过来。
首先我们在月工资维护规则包中,右键点击员工月工资内存表,选择复制。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4191/5f6af8fb-6f88-3712-ad19-15c818520822.png[/img]
[/align]
[size=medium] 然后我们在月工资表保存规则包中的hr数据源,右键点击,并选择“粘贴”:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4193/0ee9e27c-b85f-3de5-8632-f209f2a4d5ae.png[/img]
[/align]
[size=medium][b]3.定义变量[/b][/size]
[size=medium] 我们从月工资维护规则包的对象库中,直接复制sayear,samonth,salarylist三个变量。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4195/de365978-b490-3d79-9c6e-ac5ea384b6d7.png[/img]
[/align]
[size=medium] 另外我们保存之后,需要根据所得税表格计算工资,因此我们定义一些临时变量来进行设置,可以直接从原先例子中计算所得税规则包中直接复制过来,这样就可以直接复制原先的规则来用。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4197/1cfc4ae8-4788-3a28-a62d-0d9e8a43aade.png[/img]
[/align]
[size=medium][b]4.定义规则[/b][/size]
[size=medium] 我们的业务逻辑是当输入了有效的年月之后,我们首先将传入的salarylist重新导入到内存表中,然后逐条数据进行处理。在处理一条员工工资数据时,先将数据的值赋值给临时变量,然后通过计算所得税的那些规则来进行计算。最后将计算结果再赋值给内存表。最后将内存表的数据更新到数据库中。[/size]
[size=medium][b](1)有效输入年月规则集[/b][/size]
[size=medium] 我们定义有效输入年月规则集,进入条件如下:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4199/edf53d80-c74c-3226-972b-40db9427b802.png[/img]
[/align]
[size=medium][b](2)导入工资数据规则[/b][/size]
[size=medium] 接下来我们定义导入工资数据规则,执行内存表的以下方法:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4201/d9b68628-ec55-32ce-a504-cf5580669471.png[/img]
[/align]
[size=medium][b](3)逐条处理内存表记录规则[/b][/size]
[size=medium] 我们将前面的例子中已经完成的计算所得税的规则包的“月工资大于零”的规则集整个复制过来,粘贴到“有效年月”的规则集下:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4203/7570cea4-f23e-319e-82f5-ab98860cdb62.png[/img]
[/align]
[size=medium] 粘贴后,我们将月工资大于零规则集的遍历表格属性打上勾,并且将选择表格设为“月工资内存表”。另外我们将进入条件设为空。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4205/96092870-5164-3940-95d5-795f8df39d55.png[/img]
[/align]
[size=medium][b](4)修改计算应纳税所得额[/b][/size]
[size=medium] 我们将计算应纳税所得额规则,做一下修改。添加上将内存表中的当月工资数据赋值给临时变量:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4207/e40d9b8f-dcbb-31f4-91cf-f1122aa0bd48.png[/img]
[/align]
[b][size=medium](5)修改计算税后工资规则[/size][/b]
[size=medium] 设置税率的决策表不做调整,我们在计算税后工资的规则中增加将临时变量的值,再赋值给内存表:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4209/d67d4428-4571-396b-bc39-a89491d7244d.png[/img]
[/align]
[size=medium][b](5)写入数据库规则[/b][/size]
[size=medium] 最后我们在增加一个写入数据库的规则,将此内存表的数据更新到数据库中:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4211/6c1413d1-ab2f-32a3-8879-9654322dc06e.png[/img]
[/align]
[size=medium] 以上完成了业务逻辑的设置。如下所示:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4213/ad0dce69-14d5-3233-b426-304212f7437e.png[/img]
[/align]
[size=medium][b]5.定义页面[/b][/size]
[size=medium] 最后我们设置保存页面,由于保存页面是一个没有界面的操作,是直接根据月工资维护页面的提交数据,然后更新数据库。最后直接再返回页面进行显示。因此我们将此页面设定为判断处理页面:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4215/7e785104-20ff-3728-8bfa-fbf4900cbf20.png[/img]
[/align]
[size=medium] 这样保存好,在月工资维护页面,当修改了数据后,点击保存,计算所得税和税后工资。[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4217/fb227d69-42fd-3ece-923f-c02e5d70eafe.png[/img]
[/align]
[size=medium] 再查询就可以看到修改奖金、惩罚扣除后的数据信息了:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4219/75cfb8b6-61bd-3e72-9421-8717f38090aa.png[/img]
[/align]
[size=medium] 提交后就可以查看到具体的工资情况:[/size]
[align=center]
[img]http://dl2.iteye.com/upload/attachment/0112/4221/28f69de3-3265-35e2-acf0-ece01e7f41fa.png[/img]
[/align]
[size=medium] 上面这些例子讲述了利用VisualRules进行数据库开发的操作。[/size]