关于 CRM 系统中权限控制设计的一些思路

网友投稿 652 2022-05-30

当试图打开一个Opportunity时,

系统会进行如下一系列的权限检查:

1. 检查Authorization object CRM_ORD_OP:

此处会检查当前user的partner function和partner function category的设置情况:

如果检查失败,会抛出error message:

2. 进行第二轮针对CRM_ORD_LP的检查:

3. 如果再失败,进行第三轮对CRM_OPP的权限检查:

45代表Allow:

4. 如果再失败,进行第四轮对CRM_ORD_RS的权限检查:

如果都失败,将看到如下错误信息:

可以用一张图概括:

1. 使用业务角色ANALYTICSPRO登录WebClient UI:

2. 点击新建按钮:

为新建的报表分配一个HANA Live Query:

指定Query的参数:

上图WebClient UI选择的参数都定义在HANA studio里:

给报表添加属性:

添加measure:

之后报表即可在WebClient UI里成功渲染:

并且也能在CRM Fiori的Customer Report应用里看到该report。

如果想获得更多关于上图提到的Fiori应用,请查看我的公众号文章 SAP Fiori应用的三种部署方式

SAP的Fiori应用是通过OData和后台交互的。在使用Fiori应用时您可能会遇到这样的错误消息:

这个错误消息没有包含有助于partner或者客户定位问题根源的线索。

下面是如何在后台找出问题根源的步骤。

1. 在Fiori前台系统上使用事务码/IWFND/ERROR_LOG找到当前OData出错对应的错误日志:

关于Fiori前后台系统的区分,参考我的微信公众号文章SAP Fiori应用的三种部署方式

2. 点击工具栏上的按钮"Active Source"。然后我们会被自动带到抛出错误消息的代码位置,即下图的第86行。这个代码是Fiori前台系统进行出错处理的框架代码,我们就在第86行设置一个断点。

返回Fiori UI重现错误,断点触发,默认的调用栈是上图设置的断点,即方法HANDLE_RFC_FAILURE内部。此时我们跳到调用栈的外面一层,即方法CALL_BACKEND, 如下图所示。这个方法的exceptions参数lv_rfc_message的内容即具体的错误消息。

如果您够细心,您或许会发现有的SAP Fiori应用的footerbar区域内的按钮有高亮显示,有的则没有。

如何自己分析这两种按钮的实现原理?

还是借助Chrome Development Tool。更多Chrome development tool的使用技巧,参考我的博客

Chrome Development Tool tips used in my daily work

使用network tab可以观察到实现高亮实现的CSS class:

记下这个css class的名称sapMBtnEmphasized:

由此可见,这个class是在如下代码处设置的:

关于 CRM 系统中权限控制设计的一些思路

只要Fiori应用程序的controller是继承自BaseDetailController,则edit button一定会highlight:

一个很小的tip:比如我想把UI5表格控件里的每列设置成宽度根据显示的内容自适应,需要知道应该调用控件的哪个方法来实现。

一种办法当然是查SAP帮助文档,得知需要调用控件的公有方法setAutoSizable。

另一种办法是在debugger里研究,因为根据经验,这种公有方法的名称按照惯例一般都是以set开头,如下图:

根据经验从调试器里的set自动完成列表里的所有条目定位到应该调用setAutoResizable这个方法。下一个问题就是这个方法到底应该传什么参数进去。

直接在调试器里执行方法getMetadata, 展开返回的结果:

在_mProperties的autoResizable里得知这个set方法应该传一个boolean类型的参数进去:

反思

这种思路是在runtime时获取控件的元数据,这和Java的反射,ABAP的RTTI实际上异曲同工。

API ERP

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:一文搞懂python的内建函数,自己添加一个print函数
下一篇:OBS中配置子账号权限实践
相关文章