python如何批量下载邮箱全部附件_Python+MDF实现员工自助下载加密PDF

本文介绍了如何利用Python批量生成并加密PDF工资单,结合SuccessFactors的MDF功能,让员工自助下载。通过定制MDF对象,上传附件,利用Python程序读取Excel数据,替换Word模板中的占位符,转换为PDF并加密,最后通过SFSF的邮件功能通知员工下载。
摘要由CSDN通过智能技术生成
5cc1b908a86b50ce9374b89f7556063e.png

本期要点:

  SuccessFactors标准PDF生成功能

  定制MDF与附件上传

  SFSF群发自定义邮件

  Python程序批量生成附件

  Python程序兼容32位Win7

597fa5f9418d020a2b26ea4a3467c85c.png

介个需求,举个咩例子好呢。。。

A公司上了SuccessFactors的员工中心(EC)模块,但是在线下算工资,现在想让员工能在系统上查工资。

一种方案是搞个定制个MDF对象并放在员工简档。这个MDF中,给每个工资项(比如基本工资、奖金、扣款、税前工资总额、五险一金扣除、个税扣除、实发工资等等)都搞一个字段,每个月批量导入一次金额。

介个方法都OK,就是可能没那么靓仔,而且每次想多显示一个项目就要多配置一个字段,都不是好Flexible。

那有没有可能搞好看一点,比如一个PDF的工资单,最好还能加密呢?

呐,需求已经有了,想法也有一点了,首先我们还是要考虑SFSF有没有能拿来用用的标准功能。

毕竟花钱买的系统,要物尽其用;出钱请的顾问,得人尽其才。

这么点小需求,也是很通用的,难道这么大个系统都搞不定?

SucceessFactors标准的PDF生成功能

首先我们来回顾一下,SuccessFactors各个模块中有哪些标准的文档生成及分发功能:

1.员工中心模块——文档生成

EC模块的文档生成(Document Generation)可以读取员工数据,包括从定制MDF取数,甚至可以通过Business Rule写取数的逻辑规则。

6581d3c4feaa05b3719907934c59cbdd.png

文档生成的模板编辑与字段匹配界面

2491728d6942eba5942c9085b114efb8.png

文档生成功能生成的PDF(简单示例)

这个功能适合生成收入证明、在职证明、离职证明及各种通知信。

可以自助下载,也可以批量将PDF通过邮件发送给每个人。

2.调薪/奖金分配模块——通知信

在完成调薪或奖金分配活动后,可以为参与的每名员工生成调薪通知信(Compensation Statements)或者奖金分配通知信(Bouns Assignment Statement)。

生成之后,可以群发邮件提醒员工上系统查看。

员工在员工档案中能看到自己过往的通知信:

cf51fd6be498aac96908b83fc08c354c.png

用得多的是这种比较朴素的,里面包含一些调薪表单上的字段:

5411ac7cc0267dec88afa396356f0abb.png

标准的调薪通知信编辑界面与效果(示例)

也可以搞得浮夸妖艳一点,但是通常都不会实施成这个样子:

1cc82d57276a11f639724c07479e5e01.png

高定通知信的效果示例

3.工资核算——工资单

工资单(Payslip)这种东西,SFSF的工资核算(Payroll)当然有标准的。

在Payroll后台调整样式,薪酬核算生成工资单,在SFSF端员工可以在员工简档的工资核算信息(Payroll Information)区间查看各月的工资单,并以PDF格式下载。

用得多的是这种比较朴素的,在Payroll后台使用事物代码PE51编辑样式。

e43f8889e5c0d34ee3f3ec9bfeb9b113.png

标准工资单的编辑界面与SFSF端展示界面。

也可以搞得浮夸妖艳一点,在Payroll后台使用用SMART FORM,但是通常都不会实施成这个样子:

d35d9533a7d89438bfe0aa470a18199a.png

高定工资单的编辑界面与SFSF端展示界面

此外在预入职(ONB)等模块也有一些能抽取数据生成PDF表单的标准功能,但跟我们的需求差得有点远,就不硬套了。

综上所述,易得,这些功能都不完全适合我们的需求,所以我们打算另起炉灶。

线下生成PDF+批量上传MDF的方案

1.在线下批量生成加密的PDF文件

fd3a75ed4f31f16d6fc24d0df393380d.png

生成的思路和标准的文档生成(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),编辑内容并批量发送:

23d0544f3f8d1e7d9b9390db1084a97f.png

自定义收件人分组请参考:KBA 2627552。

这个功能支持标准邮件(E-Mail Notification Templates)里的Token,可以读取简单的员工信息。

同时,这个功能还支持HTML富文本编辑,支持字体大小、颜色等调整及插入链接等。

但这个填邮件正文的框框又不是富文本编辑器,难道我还要去学HTML语法?

Duck不必,用系统里文档生成的编辑器就好了,一件转HTML,贴过来就好了。

ec9bf140e7763c358400ec2d33ee64f7.png

最后邮件内容的实际效果,还是得多发几遍测试、再调整。

这个方案的优势:

  • 模板样式调整简单。无论是高定版薪酬通知信还是SMART FORM工资单,做过PDF模板调整就会知道那玩意儿要调整起来有多费时,还要去买PDF编辑软件,Adobe Acrobat那叫一个贵呀。用Word编辑模板它不香吗?想加个图片就加个图片,文字想怎么对齐就怎么对齐。

  • 不用做字段匹配。
    程序都是自动匹配的。要加一个字段,Excel多加一列、Word模板里加个占位替换符就好了,不用改程序,也不用改配置,老人小孩一学就会。

  • 一键生成。SFSF里的那些标准的PDF生成功能,比如调薪通知信,都是嵌在业务流程中的,有它功能的本来用途,并不是随意想生成就能生成的。
    这个方案线下线上结合,想怎么生,就怎么生。

  • 能加密。
    虽然这种方式——下载一个加密PDF,并不是最好的工资单保密方式,但也比没有好是不,我就是能,看把我能的。

Python程序

我这个Python程序的思路、写法和使用的库可能都不是最好的,毕竟是现抄现用,只求在最短的时间把功能都组装起来:

637abe2eab5316480c31047bc0cc1043.png

程序的思路前文已经说明,这里主要介绍用过的库和踩过的坑。

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代码的紧张与刺激。还好一次改成,没遇到Dump。

5.删除中间文件

包括生成的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确实是一种入门容易的编程语言。

?最后,关于自助查询工资单这个需求,朋友们你们用的什么方案?或者什么产品?欢迎留言。

点“在看”,帮助助力强尼不断从坑里爬出来?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值