2020-09-22 17:49发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我正在为Scheduler实现自定义UI,并且有一个登陆页面,该页面显示了在计划之前用户可用的所有报告和实例。 有没有一种查询CMS的方式来查找我需要扫描该用户可以访问的文档的所有文件夹?
您好Leonid,
我能想到的最简单的解决方案是以Actor身份登录,并让CMS处理与用户有权访问的内容有关的所有安全性。
执行此操作的一种方法是使用受信任的身份验证 ,这样您就可以在应用程序中以该用户身份登录CMS,而不必知道用户密码。 您只需在代码中传入用户名,CMS名称和共享密钥,然后为该用户生成一个新会话即可。
在该新用户会话中,生成一个登录令牌,然后使用 BIP平台REST API ,以返回用户有权访问的文件夹和对象。 甚至有一个API都将返回文件夹列表或某些类型的信息对象。
这将大大降低必须弄清楚用户可以访问哪些资源的复杂性。 如果您真的想走这条路,则可以使用Platform ObjectPrincipal API在存储库中的每个对象上返回用户的有效权利和角色,以查看用户是否有权访问它以及访问的级别(查看,刷新, 安排,修改等)。 这将有些困难,并且可能会给系统带来沉重的负担。
Dan
然后,您必须列出用户的文件夹。 正如Dan上文所述,您无需检查任何对象的权限。
如果没有权限,用户将不会在查询结果中获取Foler/Document。
" SELECT *从CI_INFOOBJECTS,其中SI_KIND ='文件夹'"
查询的结果将是文件夹列表(用户具有权限)。
然后,您必须循环每个文件夹并获取子项。
-
Bharath
如果您的UI使用用户的凭据登录,则他们将仅看到他们有权访问的文件夹和文档。
因此,您可以有一个查询,该查询根据用户登录的权限返回不同的结果,而不是试图弄清楚用户可以看到和看不到的内容。 一切都会为您完成。
您是否正在尝试类似于Fiorified BI Launchpad中的"显示全部"过滤器? ( https://blogs.sap.com /2017/05/16/fiorified-bi-launchpad-in-boe-4.2/)
我们的应用程序仅使用SAP报告。 我们正在实施的用例允许从UI调度与WebI不相关的现有报告。 该应用将使用BI SDK API集成。 我们设计的"报告仪表板"页面显示了通过自定义UI可供Actor使用的所有报告。 因此,我需要通过找到用户可访问的所有文件夹并对其进行扫描来获取报告的完整列表。 我可以找到该用户关联的所有用户组以及用户的个人文件夹,但不是所有文件夹。 我需要的是通过访问用户权限(针对文件夹)来编译完整的文件夹列表。 有任何想法吗 ??? 预先感谢!
如果您只想向用户显示报告列表,则只需查询" SI_KIND ='Folder'"即可。 想要以"树"格式为用户显示文件夹和报告,则需要使用递归将内容放在正确的位置。 从" root"文件夹开始,获取以根为父文件夹的所有文件夹的列表-SI_PARENTID =23。(注意:当前是4.x中根文件夹的SI_ID。在3.x和更低版本中, 它是0。因此此值将来可能会更改。)创建一个方法,对列表中的每个文件夹执行以下操作:
1。 获取该文件夹的所有子文件夹的列表。 2。 对于每个子文件夹,递归调用此方法以"遍历"文件夹树并将该文件夹添加到树中。 3。 获取文件夹的所有子文档的列表(SI_KIND <>"文件夹")。 4。 将每个文档添加到树中。
下面是我编写的从CMS数据库提取信息并将其保存到CSV文件的程序中的这段代码示例:
private void loadFolder(IInfoObject o)引发异常{ //处理该文件夹 _log.info("加载文件夹" + o.getTitle()); FolderInfo fldr =新的FolderInfo(o,accessLevels,doAdvSec,doEffectiveRights,treeLevel,_qh,false,_log); treeLevel ++; fldrIds.add(fldr.getId()); folder.put(o.getID(),fldr); //现在遍历其子文件夹 字符串qry =" query://{从CI_INFOOBJECTS中选择*,其中(SI_KIND ='文件夹'或SI_KIND ='FavoritesFolder'),并且" +" SI_PARENTID =%d和SI_NAME <>"按SI_NAME的用户文件夹"顺序}"; _qh.forEachResult(String.format(qry,fldr.getId()),新的InfoObjectWorker(){ public void doWork(IInfoObject o)引发异常{ 尝试{ debugStr = String.format(" loadFolder:%d-%s",o.getID(),o.getTitle()); *******************这是递归部分************************** 如果(!folders.containsKey(o.getID())){ loadFolder(o); _log.info(String.format("已加载文件夹%s",o.getTitle())); } *******************递归结束**************************** ******** }捕获(SDKException e){ _log.error("错误加载文件夹" + o.getTitle()+"。Err=" + e.getDetailMessage()); } } }); treeLevel--; 如果((doReports || doScheds || doFavorites)&&(!noRptFolders.contains(fldr.getTitle()。trim()))){ debugStr =" loadReports:"; loadReports(fldr.getId()); debugStr =" loadFolder:"; } }
-戴尔
最多设置5个标签!
您好Leonid,
我能想到的最简单的解决方案是以Actor身份登录,并让CMS处理与用户有权访问的内容有关的所有安全性。
执行此操作的一种方法是使用受信任的身份验证 ,这样您就可以在应用程序中以该用户身份登录CMS,而不必知道用户密码。 您只需在代码中传入用户名,CMS名称和共享密钥,然后为该用户生成一个新会话即可。
在该新用户会话中,生成一个登录令牌,然后使用 BIP平台REST API ,以返回用户有权访问的文件夹和对象。 甚至有一个API都将返回文件夹列表或某些类型的信息对象。
这将大大降低必须弄清楚用户可以访问哪些资源的复杂性。 如果您真的想走这条路,则可以使用Platform ObjectPrincipal API在存储库中的每个对象上返回用户的有效权利和角色,以查看用户是否有权访问它以及访问的级别(查看,刷新, 安排,修改等)。 这将有些困难,并且可能会给系统带来沉重的负担。
Dan
然后,您必须列出用户的文件夹。 正如Dan上文所述,您无需检查任何对象的权限。
如果没有权限,用户将不会在查询结果中获取Foler/Document。
" SELECT *从CI_INFOOBJECTS,其中SI_KIND ='文件夹'"
查询的结果将是文件夹列表(用户具有权限)。
然后,您必须循环每个文件夹并获取子项。
-
Bharath
如果您的UI使用用户的凭据登录,则他们将仅看到他们有权访问的文件夹和文档。
因此,您可以有一个查询,该查询根据用户登录的权限返回不同的结果,而不是试图弄清楚用户可以看到和看不到的内容。 一切都会为您完成。
Dan
您是否正在尝试类似于Fiorified BI Launchpad中的"显示全部"过滤器? ( https://blogs.sap.com /2017/05/16/fiorified-bi-launchpad-in-boe-4.2/)
我们的应用程序仅使用SAP报告。 我们正在实施的用例允许从UI调度与WebI不相关的现有报告。 该应用将使用BI SDK API集成。 我们设计的"报告仪表板"页面显示了通过自定义UI可供Actor使用的所有报告。 因此,我需要通过找到用户可访问的所有文件夹并对其进行扫描来获取报告的完整列表。 我可以找到该用户关联的所有用户组以及用户的个人文件夹,但不是所有文件夹。 我需要的是通过访问用户权限(针对文件夹)来编译完整的文件夹列表。 有任何想法吗 ??? 预先感谢!
如果您只想向用户显示报告列表,则只需查询" SI_KIND ='Folder'"即可。 想要以"树"格式为用户显示文件夹和报告,则需要使用递归将内容放在正确的位置。 从" root"文件夹开始,获取以根为父文件夹的所有文件夹的列表-SI_PARENTID =23。(注意:当前是4.x中根文件夹的SI_ID。在3.x和更低版本中, 它是0。因此此值将来可能会更改。)创建一个方法,对列表中的每个文件夹执行以下操作:
1。 获取该文件夹的所有子文件夹的列表。
2。 对于每个子文件夹,递归调用此方法以"遍历"文件夹树并将该文件夹添加到树中。
3。 获取文件夹的所有子文档的列表(SI_KIND <>"文件夹")。
4。 将每个文档添加到树中。
下面是我编写的从CMS数据库提取信息并将其保存到CSV文件的程序中的这段代码示例:
-戴尔
一周热门 更多>