SAP BPC最佳实践-在BPC NW中何时使用Shared Query Engine BADI
时间:2011-04-10 来源:李查德
前文曾经写过关于BPC Write back BADI的应用,对于BPC系统的读写接口来说,都提供了可供用户自定义开发的BADI接口,SQE的BADI会在系统查询后调用,此时用户可以根据需求进一步筛选数据。比较典型的应用是矩阵式的安全模型。BPC的Member Access Profile只提供了对独立的维度成员权限控制,当用户需要在不同的两个维度上作交叉的成员权限控制时,Member Access Profile就不能够满足需求了。举例如下:地区维度有成员美国(US)和欧洲(EMEA),账户维度有成员个人费用(Personal Costs)和广告费用(Advertising Costs)。某用户只被允许去查看美国的个人费用和欧洲的广告费用。
BPC的Member Access Profile只能针对某一个维度的某些成员赋予权限控制,如果用户可以访问地区维度的美国和欧洲,以及账户维度的个人费用和广告费用,那么他就可以看到美国的广告费用以及欧洲的个人费用。而这是我们需求中所不允许的。
下面将从BW端新建SQE的BADI讲起,直到在BPC中新建report来检查是否实现了此功能。
一、登录BW端,进入SE18界面:
二、显示这个BADI的定义,展开定义树:
三、创建此BADI定义的一个实现体:
四、输入enhancement implementation的名字和描述:
五、此时,需要指定如需这个BADI要传输则开发包是什么,或者不参与传输时作为local object存储:
六、指定BADI implementation的名字、描述及实现类,同样也要指定开发包:
七、现在就新建出了一个BADI implementation,但是还没有激活的内容:
八、打开BADI implementation的菜单树:
九、双击下面的"Filter Val":
十、选中编辑按钮,然后点击"Combination":
十一、选中显示的两个参数:
十二、双击"Application_ID"这一行,然后输入filter的值:
十三、然后为"APPSET_ID"输入filter值,保存并激活已经更改的这些对象;
十四、在BADI implementation中双击"Implementing Class":
十五、双击implementing class的名字:
十六、选择编辑这个类,然后双击"POST_PROCESS"方法名,加入实现方法代码:
具体代码在附件中,激活刚刚新建的类。接下来就可以在BPC的报表中看到如上需求的结果了。
/Files/libihui422/SQE_BADI_SAMPLE.txt
一、为用户创建两个Member Access Profile,一个叫US_MAP,可以访问地区维度的US和账户维度的个人费用(CE0004000)。另一个叫EMEA_MAP,可以访问地区维度的EMEA和账户维度的广告费用(CE0004200):
二、先展示一下当我们前面新建的SQE BADI没有生效时,两条规则对于同一个用户是叠加的,用户可以读取到US和EMEA里面两个账户的所有值:
三、当新建的SQE BADI生效后,报表内容就改变了: