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

MS CRM Online Custom View - Need to show specific records in View for specific users (based on team)

我有一个实体 "Work Order",我为其定义了许多自定义视图。工单可以有状态为 "active ,cancelled, closed, inprogress, submitted" 等的记录。我的要求是 - 当前登录的用户属于特定团队 "sales representative" 应该能够看到 view.This 上的所有记录可以完成很容易,但是如果当前登录的用户不属于 "sales representative" 团队,她应该看不到 "cancelled" 条记录,但她应该可以看到所有其他记录。如果可能的话,我怎样才能使用自定义过滤器来实现这一点?还是通过代码更改?

高级查找听起来不太可能。不过,您也许可以使用安全角色来实现它。如果您可以将已取消的工作订单分配给特定团队,然后组织您的安全设置,使非销售代表的用户无法看到来自该特定团队的工作订单,那么它可能会奏效。不幸的是,您将不得不重新分配已取消的工作订单,这并不总是一种选择。

否则,您可能需要为已取消的工作订单使用单独的视图,开箱即用的高级查找应该允许您显示空白网格,表明您不在正确的团队中。但现在显然你没有呈现工作订单的整体视图。

一般来说,我会选择安全选项,让它正常工作。任何其他选择都只是权宜之计。用户始终可以创建自定义视图,因此如果您不使用安全角色锁定访问权限,仍然可以通过间接方式访问数据。

可以使用自定义代码执行此操作。无需质疑 "why" 你想这样做(可能是敏感信息或其他什么?),你可以使用在预操作事件上注册的 RetrieveMultiple 插件来实现它。在此插件中,传入的输入参数之一称为 "Query" 并将具有 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 并检索您要检查的必要信息。