我有实体"工作订单"我为其定义了许多自定义视图。工作订单可以包含状态记录为"活动,取消,关闭,进行,提交"我的要求是 - 目前登录属于特定团队的用户"销售代表"应该能够在视图上看到所有记录。这可以很容易地完成,但如果当前登录的用户不属于"销售代表"团队,她不应该看到"取消"视图中的记录,但她应该可以看到所有其他记录。如果可能,我如何使用自定义过滤器实现此目的?或者通过代码更改?
答案 0 :(得分:2)
可以使用自定义代码执行此操作。没有质疑"为什么"您是否愿意这样做(可能是它的敏感信息?),您可以使用在操作前事件中注册的RetrieveMultiple插件来实现它。在这个插件中,传入的一个输入参数称为"查询"并将具有QueryExpression。您只需在插件中为此查询添加一个过滤器,就会过滤掉相关的行。像这样:
var query = (QueryExpression)context.InputParameters["Query"];
var condition= new ConditionExpression()
{
AttributeName = "statuscode",
Operator = ConditionOperator.NotIn,
Values = { 2, 3 } // Or whatever codes you want to filter!
};
query.Criteria.AddCondition(condition);
要检查当前用户,您可以从插件上下文中获取用户ID,并检索您想要检查的必要信息。
答案 1 :(得分:0)
听起来没有先进的发现可以做到这一点。但是,您可以使用安全角色来实现它。如果您可以将已取消的工单分配给特定团队,然后组织您的安全设置,以便非销售代表的用户无法查看该特定团队的工单,那么它可能会有效。不幸的是,您必须重新分配已取消的工单,这并不总是一种选择。
否则,您可能必须单独查看已取消的工作单,开箱即用的高级查找应该允许您呈现一个空白网格,而您不在正确的团队中。但现在显然你没有提出工作订单的全部视图。
一般情况下,我会使用安全选项,然后让它工作。任何其他选择只是一个止损。用户始终可以创建自定义视图,因此,如果您不使用安全角色锁定访问权限,则仍可以间接方式访问数据。