NC65薪资发放项目客开
2019-12-27 本文已影响0人
把酒对牛
需求
客户要求【人力资本】模块的有关【薪资发放】单据能够支持审批流,如【社保缴交】、【考勤月报】等。
分析
这些单据都是根据各自模块的【xx项目】动态执行公式取数到界面上来的,标准产品并不支持审批流。经过沟通,直接在【社保】、【考勤】、【绩效】等模块,各自增加一个单据,由客户自己手动录入数据,并提交审批。然后在【薪酬管理】的【薪资发放项目】中,将【项目数据来源】设置为对应的单据字段。
实现
以【绩效】为例,开发【绩效审批项目】单据。
- 薪资发放项目添加字段
- 元数据class_item.bmf
添加【是否绩效审批项目】、【绩效审批项目编号】。 - 代码
元数据发布之后界面会出现字段,但是保存不进去。原因是【薪资发放项目】有自己的数据库操作类nc.impl.wa.classitem.ClassitemDAO
,其中并没有我们新添加的字段,需要在getFileds()
里加上。并且WaClassItemVO
要添加新字段的get
和set
方法,否则取不到值。
- 薪资期间添加参照
- 数据库
在参照数据表bd_refinfo
中添加参照【薪资期间1】。
不知道为什么,元数据里有taxyear
和taxperiod
,但是数据库里并没有,所以要添加这两个字段,否则查询会报错。 - 元数据periodscheme.bmf
为子表【薪资期间】设置参照【薪资期间1】。
INSERT INTO "BD_REFINFO"("CODE", "DR", "ISNEEDPARA", "ISSPECIALREF", "METADATATYPENAME", "MODULENAME", "NAME", "PARA1", "PARA2", "PARA3", "PK_REFINFO", "REFCLASS", "REFSYSTEM", "REFTYPE", "RESERV1", "RESERV2", "RESERV3", "RESID", "RESIDPATH", "TS", "WHEREPART", "METADATANAMESPACE", "LAYER", "PK_COUNTRY", "PK_INDUSTRY") VALUES ('waperiod1', '0', NULL, NULL, 'PeriodVO', 'hrwa', '薪资期间1', NULL, NULL, NULL, 'hrwaZ7110000000XAY93', 'nc.ui.wa.ref.WaPeriodRefTreeModel', NULL, '1', NULL, NULL, NULL, '060130refinfo0018', '60130refinfo', '2019-11-29 22:58:26', NULL, 'hrwa', NULL, NULL, NULL);
alter table wa_period add taxyear char(4);
comment on column wa_period.taxyear is '纳税年度';
alter table wa_period add taxperiod char(2);
comment on column wa_period.taxperiod is '纳税期间';
- 单据绘制
单据要根据薪资发放项目动态加载字段,预留了30个数值型的字段,在列表态和卡片态初始化的时候,去查询符合条件的薪资发放项目,根据编码依次将表体的列名改为对应的薪资发放项目。即在ShowUpableBillForm
和ShowUpableBillListView
两个类的handleEvent
函数中处理。但是列表态没必要动态修改列名,反正导入导出是根据卡片的字段来的,列表态也无法确定pk_org
。 - 公式配置
为了能让薪资发放项目从新建的单据上取数,需要配置公式,公式的路径是home/resources/hr/wa/formula/wa_formula.xml
,该文件的编码是UTF-8
,但是系统是以GB2312
的格式读取的,所以配置中文的时候要以GB2312
的格式打开,标准产品不存在中文配置,名称都是以多语资源的形式录入的,最关键的是parapanel
、convertor
和process
三个配置项。
- 【项目数据来源】选择【其他系统】,并选中自定义的功能名称之后,会显示
parapanel
中定义的面板,在上面选择参数后保存。系统在保存的时候会用正则校验是否存在环状依赖,因此需要破坏系统的检测,可以将_
替换为约定的字符串,在解析的时候动态转换为正常的公式。 - 用户看到的公式,是经过
convertor
转换过的,实际存储在数据库里的,是parapanel
里生成的。 - 薪资发放计算的时候,会执行
process
解析公式,实际上就是将公式解析SQL语句代入到薪资发放的SQL语句当中去。
<entry>
<string>valueOfJXSPXM</string>
<function>
<defaultName>绩效审批项目</defaultName> <!-- 名称 -->
<displayName>valueOfJXSPXM()</displayName> <!-- 公式 -->
<hintMsgRes>取对象在指定绩效方案或期间中的绩效审批项目值</hintMsgRes> <!-- 解释 -->
<inputSigRes>绩效审批项目</inputSigRes>
<pattern>valueOfJXSPXM\(\w+\)</pattern> <!-- 公式格式校验 -->
<arguments>valueOfJXSPXM({0})</arguments> <!-- 公式参数 -->
<parapanel>nc.ui.hr.func.WAJxspxmPanel</parapanel> <!-- 公式配置界面 -->
<convertor>nc.ui.hr.func.WAJxspxmConvertor</convertor> <!-- 公式转换 -->
<group>PE</group> <!-- 所属系统 -->
<process>nc.impl.wa.func.WAJxspxmParse</process> <!-- 公式解析 -->
<productCode>UPP6013func</productCode>
</function>
</entry>