[size=6][b]如何实现EAS的【拥有者权限】和【主管权限】[/b][/size]
[color=Red]注:文章来源:121.32.28.234:8800/kdwiki/index.php?doc-view-107.html[/color]
问题:对于全新开发的EAS单据,客户经常会要求实现【拥有者权限】(即:用户自己只能看到自己所做的单据)和【主管权限】(即:上级领导能看到其下属所做的单据)。
具体的实现方法如下:
方法一:通过EAS自带的特殊数据权限进行配置
1、 修改EAS权限配置文件:
eas\server\profiles\server1\config\EAS_PermissionConfiguration.xml 将新开发的单据添加到此配置文件中(这样才能在EAS客户端配置特殊数据权限时看到你开发的单据)
例:[code]<special-data-permission>
<name>com.kingdee.eas.custom.crm.base.app.Period</name>(注:单据实体路径)
<type>975F9A83</type>(注:BOSType)
</special-data-permission>[/code]添加完成后,记得保存
2、 打开EAS客户端,进入【系统平台】-【安全管理】-【权限管理】-打开【特殊数据权限】如下图(红色部分就是要在上面新添加配置的单据)
(这里经常会出现修改配置文件后,业务对象授权列表中却无法显示的情况。可能是由于缓存的原因导致。如果遇到这种情况,请试试重启服务器,再多搞搞几次就
会回来的。实现没办法的话,请参与以下文章解决:121.32.28.234:8800/kdwiki/index.php?doc-view-
100.html)
[img]http://121.32.28.234:8800/kdwiki/js/kindeditor/attached/20110406170409_30409.jpg[/img]
方法二:通过编写代码实现
方法一中的拥有者,只能选择到单据上的“制单人”和“最后修改人”这两个字段。在某些情况下,方法一是无法满足客户的需求的。例如:销售订单上有一个字段
是“销售员”,客户想通过这个字段来做拥有者权限过滤。那么,这个时候就只能通过编码的方式来实现了。以下介绍代码如何时实现拥有者权限和主管权限。
拥有者权限:只需要在单据序时簿查询时加上当前用户与相关字段(如:销售员)的比较即可,相对简单,不多说。
主管权限:实现代码如下:
/**
* 根据用户id查找用户职位长编码
* 主管权限调用
* @param userId 当前用户id
* @return 用户职位长编码
*/[code]public String getPositionLongNumberByUserId(Context ctx, String userId) {
// 根据用户查找用户职位长编码
StringBuffer lsql = new StringBuffer();
lsql.append("SELECT DISTINCT
PositionHierarchy.FLongNumber as longnumber FROM T_PM_USER U INNER JOIN
T_BD_Person Person");
lsql.append(" ON Person.FID = U.FPersonID INNER JOIN
T_ORG_PositionMember PositionMember ON Person.FID =
PositionMember.FPersonID");
lsql.append(" INNER JOIN T_ORG_Position Position ON
Position.FID = PositionMember.FPositionID INNER JOIN
T_ORG_PositionHierarchy");
lsql.append(" PositionHierarchy
ON PositionMember.FPositionID = PositionHierarchy.FChildID WHERE U.FID =
'").append(userId);
lsql.append("' AND PositionHierarchy.FHierarchyID = '00000000-0000-0000-0000-000000000001396FCAD0'");
ResultSet lrs;
StringBuffer filterLongNumber = new StringBuffer();
try {
lrs = DbUtil.executeQuery(ctx, lsql.toString());
while (lrs.next()) {
filterLongNumber.append(
" OR POSITIONHIERARCHY.FLONGNUMBER LIKE N'").append(lrs.getString("longnumber")).append("!%' ");
}
} catch (BOSException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
if (filterLongNumber.toString().length() == 0) {
return "-1";
}
return filterLongNumber.toString();
}[/code]/**
* 根据用户职位长编码查找用户的所有下级客户
* @param ctx
* @param positionLongNumber
* @return
*/[code]public List getPersionIdsByPositionLongNumber(Context ctx, String positionLongNumber) {
// 根据用户长编码查找用户下级
StringBuffer sql = new StringBuffer();
List personIds = new ArrayList();
sql.append("SELECT DISTINCT Person.FID as id FROM
T_PM_USER U INNER JOIN T_BD_Person Person ON Person.FID = U.FPersonID
INNER JOIN ");
sql.append(" T_ORG_PositionMember PositionMember ON
Person.FID = PositionMember.FPersonID INNER JOIN T_ORG_Position Position
");
sql.append(" ON Position.FID =
PositionMember.FPositionID INNER JOIN T_ORG_PositionHierarchy
PositionHierarchy ON ");
sql.append(" PositionMember.FPositionID = PositionHierarchy.FChildID WHERE ").append("(").append(
positionLongNumber.substring(positionLongNumber.indexOf("O") + 2)).append(")");
sql.append(" AND PositionHierarchy.FHierarchyID = '00000000-0000-0000-0000-000000000001396FCAD0'");
ResultSet prs;
try {
prs = DbUtil.executeQuery(ctx, sql.toString());
while (prs.next()) {
personIds.add(prs.getString("id"));
}
//添加当前用户本人
UserInfo user = ContextUtil.getCurrentUserInfo(ctx);
personIds.add(user.getPerson().getId().toString());
} catch (BOSException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return personIds;
}[/code]调用方法:[code]UserInfo user = ContextUtil.getCurrentUserInfo(ctx);//获取当前用户
String positionLongNumber = getPositionLongNumberByUserId(ctx, user.getId().toString());//获取当前用户的职位长编码
List lowerPersonList = getPersionIdsByPositionLongNumber(ctx,
positionLongNumber);//获取当前用户所能看到的所有下级用户的person id
表列[/code]最后,根据lowerPersonList列表,在单据序时簿的过滤条件中拼写SQL语句的过滤条件即可。
以下给出动态Web框架开发的单据添加主管权限的完整例子:
由于字数限制,完整例子请看:121.32.28.234:8800/kdwiki/index.php?doc-view-107.html
如何实现EAS的【拥有者权限】和【主管权限】
最新推荐文章于 2022-07-25 10:33:06 发布