MS CRM Online自定义视图 - 需要在特定用户的View中显示特定记录(基于团队)

时间:2017-03-20 08:39:23

标签: dynamics-crm dynamics-crm-online

我有实体"工作订单"我为其定义了许多自定义视图。工作订单可以包含状态记录为"活动,取消,关闭,进行,提交"我的要求是 - 目前登录属于特定团队的用户"销售代表"应该能够在视图上看到所有记录。这可以很容易地完成,但如果当前登录的用户不属于"销售代表"团队,她不应该看到"取消"视图中的记录,但她应该可以看到所有其他记录。如果可能,我如何使用自定义过滤器实现此目的?或者通过代码更改?

2 个答案:

答案 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)

听起来没有先进的发现可以做到这一点。但是,您可以使用安全角色来实现它。如果您可以将已取消的工单分配给特定团队,然后组织您的安全设置,以便非销售代表的用户无法查看该特定团队的工单,那么它可能会有效。不幸的是,您必须重新分配已取消的工单,这并不总是一种选择。

否则,您可能必须单独查看已取消的工作单,开箱即用的高级查找应该允许您呈现一个空白网格,而您不在正确的团队中。但现在显然你没有提出工作订单的全部视图。

一般情况下,我会使用安全选项,然后让它工作。任何其他选择只是一个止损。用户始终可以创建自定义视图,因此,如果您不使用安全角色锁定访问权限,则仍可以间接方式访问数据。