用sdk在内容库中创建目录及设置目录权限
背景 :Cognos与系统集成;
用java提供程序进行Cognos身份认证使系统用一套用户、角色设置;
对于高级用户在Cognos中可以设计报表并将报表保存至自己的目录。
因此在给用户赋予高级角色时,有以下功能需求:
1、在Cgonos中创建目录;
2、对该目录进行权限设置,该用户具有读、写、执行、遍历的权限,其他用户只能读、执行。
SDK:
创建目录及设置权限在Cognos的 SDK sample已经给出了实现例子。
Cognos中创建目录 sample.HandlersCS.CSHandlers
给目录设置权限 sample.Security.Capabilities
经测试改写sample程序实现赋予用户高级权限时创建目录及设置权限的功能,但同时发现页面响应时间明显延长。
经过分析及断点调试,感觉主要是以下两处:
1、连接到Cognos server获取ContentManagerService_Port。
2、给目录赋予用户权限时会调用java 提供程序进行用户信息的获取。
不知各位是否有什么好办法以提高响应。
ps.关于第二条还有以下插曲。
因考虑到一致性,最开始的实现方式是将用户角色设置的数据库操作纳入到事物中进行处理。先角色设置操作然后sdk调用创建目录及设置权限,一旦出错(主要是考虑Cognos 内容库的操作)就回滚。测试发现sdk操作权限设置始终无法成功(获取用户对象超时返回null),经断点调试才知
connection.getCMService().query(
new SearchPathMultipleObject("CAMID("TESTAuth:u:testuserid")"),
new PropEnum[] { PropEnum.searchPath, PropEnum.policies },
new Sort[] {},
new QueryOptions());
方法中会获取用户信息,而JAVA提供程序中获取该条用户信息的数据已经加锁导致超时。