SAP HCM 结构化授权函数
导读
结构化授权:结构化授权是SAPHR模块的一个特殊权限校验模块,因为在HCM系统中不单单是权限对象授权,还有组织ID授权,今天分享的一个案例是关于GOS的文件存储权限控制的方案。
作者:vivi,来源:osinnovation
1 故事背景
在PA30中,上面有一排按钮,其中有个是今天的“主人公”,附件上传的功能,客户的想法是控制人有这个上传的功能,但是找半天也没找到对应的权限对象能控制这个,后来经过一段时间调查,发现这个按钮SAP没有单独的授权对象控制显示与隐藏。在国网做项目的时候,当时存附件是从gos迁移到文件服务系统,所以想法就是应该有增强的地方控制,要不然当时怎能存储的还到文件服务系统。
2 解决方案
首先想到还是响应的badi,经过九九八十一难,非常不容易找到一个badi,还要感谢自己原来的知识储备,因为知道附件存储是GOS服务,所以在debug代码的时候非常艰难的看到这个名称。badi的名称是GOS_SRV_SELECT.这个badi增强的参数有点不好看懂,因为HR的增强,关于人员编号的参数都是PERNR,但是这个增强的输入参数IS_LPOR,一开始还觉得这个增强不对,后来才发现pernr会赋值给这个变量。
3 增强实现
确认增强后,就是实现代码,增强有遇到一个问题,就是代码不知道如何写,参考的代码都是空的,后来去看这个ET_OPTIONS内表的结构,发现有sign、option、low的相关参数,这个时候就联想到range内表的填充值,不断查资料与尝试,low值填充VIEW_ATTA到内表et_options中,系统就会隐藏页面中的按钮。现在这个按钮是可以隐藏,但是还是带来一个问题,就是权限的控制,就是什么人能看,什么人不能看(这里还不能简单的PFCG授权,因为还涉及到组织授权),所以这个时候还需要结构化授权,这个结构化授权的逻辑是SAP系统登录账号能否查看PA30中的员工数据,如果员工数据都不能查看,肯定就不能看附件,所以就需要找到一个函数,输入登录账号与员工变量两个参数,如果授权成功,就允许查看附件,如果不允许就不能查看附件,就实现下面的代码。
DATA:
ls_option TYPE sgos_sels.
ls_option-sign = 'E'.
ls_option-option = 'EQ'.
ls_option-low = 'VIEW_ATTA'.
APPEND ls_option TO et_options.
后面终于发现SAP有一个很好用的函数,HR_CHECK_AUTHORITY_PERNR这个函数能解决此问题。函数有下面这个参数,TCLAS是A,b表示招聘,pernr是员工编号,begda是授权的开始时间,endda是授权的结束时间,uname是登录SAP系统的系统账号,如果SAP登录账号在OOSB与oosp配置结构化授权,name此处就不会弹出NO_AUTHORIZATION_FOR_PERNR的提示,否则就会提示无读取权限。所以这个函数解决我结构化授权的查询工作。