本期要点: SuccessFactors标准PDF生成功能 定制MDF与附件上传 SFSF群发自定义邮件 Python程序批量生成附件 Python程序兼容32位Win7
介个需求,举个咩例子好呢A公司上了SuccessFactors的员工中心(EC)模块,但是在线下算工资,现在想让员工能在系统上查工资一种方案是搞个定制个MDF对象并放在员工简档这个MDF中,给每个工资项(比如基本工资、奖金、扣款、税前工资总额、五险一金扣除、个税扣除、实发工资等等)都搞一个字段,每个月批量导入一次金额。
介个方法都OK,就是可能没那么靓仔,而且每次想多显示一个项目就要多配置一个字段,都不是好Flexible那有没有可能搞好看一点,比如一个PDF的工资单,最好还能加密呢?呐,需求已经有了,想法也有一点了,。
首先我们还是要考虑SFSF有没有能拿来用用的标准功能毕竟花钱买的系统,要物尽其用;出钱请的顾问,得人尽其才这么点小需求,也是很通用的,难道这么大个系统都搞不定?SucceessFactors标准的PDF生成功能。
首先我们来回顾一下,SuccessFactors各个模块中有哪些标准的文档生成及分发功能:1.员工中心模块——文档生成EC模块的文档生成(Document Generation)可以读取员工数据,包括从定制MDF取数,甚至可以通过Business Rule写取数的逻辑规则。
文档生成的模板编辑与字段匹配界面
文档生成功能生成的PDF(简单示例)这个功能适合生成收入证明、在职证明、离职证明及各种通知信可以自助下载,也可以批量将PDF通过邮件发送给每个人2.调薪/奖金分配模块——通知信在完成调薪或奖金分配活动后,可以为参与的每名员工生成调薪通知信(Compensation Statements)或者奖金分配通知信(Bouns Assignment Statement)。
生成之后,可以群发邮件提醒员工上系统查看。员工在员工档案中能看到自己过往的通知信:
用得多的是这种比较朴素的,里面包含一些调薪表单上的字段:
标准的调薪通知信编辑界面与效果(示例)也可以搞得浮夸妖艳一点,但是通常都不会实施成这个样子:
高定通知信的效果示例3.工资核算——工资单工资单(Payslip)这种东西,SFSF的工资核算(Payroll)当然有标准的在Payroll后台调整样式,薪酬核算生成工资单,在SFSF端员工可以在员工简档的工资核算信息(Payroll Information)区间查看各月的工资单,并以PDF格式下载。
用得多的是这种比较朴素的,在Payroll后台使用事物代码PE51编辑样式。
标准工资单的编辑界面与SFSF端展示界面。也可以搞得浮夸妖艳一点,在Payroll后台使用用SMART FORM,但是通常都不会实施成这个样子:
高定工资单的编辑界面与SFSF端展示界面此外在预入职(ONB)等模块也有一些能抽取数据生成PDF表单的标准功能,但跟我们的需求差得有点远,就不硬套了综上所述,易得,这些功能都不完全适合我们的需求,所以我们打算另起炉灶。
线下生成PDF+批量上传MDF的方案1.在线下批量生成加密的PDF文件
生成的思路和标准的文档生成(Document Generation)功能其实非常类似搞一个模板,然后用数据替换掉模板中的占位标记符(文档生成叫Placeholder,系统里有的地方又叫Token有的地方又叫Tag)。
不过数据源从系统数据库变成了线下Excel工资单Excel里除了表头每一行都生成一个加密的PDF这个程序后面再详细介绍2.定制MDF并批量上传附件自定义一个MDF对象,包括User型的字段用于绑定工号、Attachment型的字段用于上传附件,文本型字段用于写一些说明文字。
我不建议用父子型的对象,时间长了无论是展示还是批量维护都会更加困难时间约束我选Basic(有生效日期)为这个MDF设置UI并放置到员工档案中,设置权限只有薪酬管理员可以编辑,员工只能查看自己的记录然后薪酬管理员将这个MDF的CSV数据模板和PDF文件一起打包成ZIP压缩包,再上传SuccessFactors实现批量上传。
详情请参考:KBA 2257047,《尚无KBA——SFSF上传ZIP压缩包报错》另外通过批导还能批量修改、删除记录及附件3.群发邮件最后再群发邮件给更新的工资单的人,通知他们上系统下载,还要通知他们PDF密码的规则。
这里要借用SFSF的欢迎邮件功能(Send User Welcome Email),编辑内容并批量发送:
自定义收件人分组请参考:KBA 2627552这个功能支持标准邮件(E-Mail Notification Templates)里的Token,可以读取简单的员工信息同时,这个功能还支持HTML富文本编辑。
,支持字体大小、颜色等调整及插入链接等。但这个填邮件正文的框框又不是富文本编辑器,难道我还要去学HTML语法?Duck不必,用系统里文档生成的编辑器就好了,一件转HTML,贴过来就好了。
最后邮件内容的实际效果,还是得多发几遍测试、再调整这个方案的优势:模板样式调整简单无论是高定版薪酬通知信还是SMART FORM工资单,做过PDF模板调整就会知道那玩意儿要调整起来有多费时,还要去买PDF编辑软件,Adobe Acrobat那叫一个贵呀。
用Word编辑模板它不香吗?想加个图片就加个图片,文字想怎么对齐就怎么对齐不用做字段匹配程序都是自动匹配的要加一个字段,Excel多加一列、Word模板里加个占位替换符就好了,不用改程序,也不用改配置,老人小孩一学就会。
一键生成SFSF里的那些标准的PDF生成功能,比如调薪通知信,都是嵌在业务流程中的,有它功能的本来用途,并不是随意想生成就能生成的这个方案线下线上结合,想怎么生,就怎么生能加密虽然这种方式——下载一个加密PDF,并不是最好的工资单保密方式,但也比没有好是不,我就是能,看把我能的。
Python程序我这个Python程序的思路、写法和使用的库可能都不是最好的,毕竟是现抄现用,只求在最短的时间把功能都组装起来:
程序的思路前文已经说明,这里主要介绍用过的库和踩过的坑1.读取Excel文件中的数据用的库是xlrd,好用,没遇到坑2.Word处理用的库是docx,顾名思义只支持docx格式不支持doc格式用Excel中每一行的数据替换掉Word模板中对应的占位符,然后生成出一个Word版本的通知信。
用这个的坑是如果直接用它的text.replace函数文字的格式会丢失3.Word转PDF用的库是win32com,这里实际上是在调用Windows打开MS Word并使用Word的另存为PDF功能所以,不用Windows的,没装MS Office的朋友需要另寻出路了,Open Office似乎也是有API可以调用的。
如果你用的MS Office 2007之前的版本,不好意思你的Word没有另存为PDF功能如果你用的MS Office 2007,默认也是没有另存为PDF功能的,需要去安装一个The Microsoft Save as PDF or XPS add-in (SaveAsPDFandXPS.exe)的插件。
这玩意年代太久远微软都不提供官方下载了,好在还是比较容易找到的这个库的坑是,搜网上代码的时候看到的都是import win32com,用pip下载安装这个库的时候却告诉我win32com不存在,原来人家其实叫pywin32。
4.PDF加密得到最终的成品,并存放在"attachemnts"文件夹中用的库是pypdf4,可能网上找到资料pypdf2,在我用到的功能上新旧版本这两个库没差别这个库的坑是,当程序在32位Win7上运行时,它是处理不了中文内容的,遇到中文就会直接报错Illegal character。
按照这个链接的方法可以解决:https://github.com/danpe1327/CheeseTool/tree/master/watermark居然是直接改这个库的源代码,这让我想起了在SAP ERP上第一次改标准ABAP代码的紧张与刺激。
还好一次改成,没遇到Dump5.删除中间文件包括生成的Word文件和未加密的PDF文件,用标准的OS库中的标准函数删除就好了6.打包成EXE因为不太可能给每个要用这个功能的HR都装一套Python环境,所以要打包将Python程序打包成一个exe可执行文件,用户一键执行。
用的是pyinstaller,打包很简单搞定之后发给用户,用户告诉我报错,这是64位的程序,他是32位的Windows系统万万没想到本以为只需要纠结要用Python 3还是Python 2,没想到还要考虑64位还是32位。
网上有同时安装32位和64位Python的教程,不算复杂,可以在32位的安装路径下,把Python改名位Python32、pyinstaller改名位pyinstaller32,保证不会用错还有所有的库都要在32位这边重新安装,才能有Python32执行程序,最后再用pyinstaller32重新打包。
看到这里,你应该对我们HR用的电脑有所了解了写Python的程序实际应用的时候自然是会有很多坑的朋友圈、公众号各种一杯奶茶钱学Python办公自动化的培训班,并不一定会教你这些我这个程序的最终版本也就是80行代码,前前后后却是好几天。
不过如果日常工作中有明确的需求,Python确实是一种入门容易的编程语言👇最后,关于自助查询工资单这个需求,朋友们你们用的什么方案?或者什么产品?欢迎留言点“在看”,帮助助力强尼不断从坑里爬出来👇
亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。