我要求将某些电子邮件标记为机密。除非您具有特定角色,否则这些电子邮件不应在CRM系统中可见。我创建了一个' Confidential'在电子邮件实体上标记并在电子邮件实体的RetrieveMultiple上创建一个插件,该插件会过滤掉所有包含“电子邮件”的电子邮件。 = true。
但是,电子邮件记录仍然可以在'活动'下看到。我在活动指针实体的retrievemultiple上创建了另一个插件,但是我无法创建一个显示所有活动(包括电子邮件)的查询,除了标记为' Confidential'的电子邮件。任何人都可以帮我解决这个问题吗?这就是我创造的
QueryExpression objQueryExpression1 = (QueryExpression)context.InputParameters["Query"];
objQueryExpression1.LinkEntities.Add(new LinkEntity("activitypointer", "email", "activityid", "activityid", JoinOperator.LeftOuter));
objQueryExpression1.LinkEntities[0].EntityAlias = "filteredemails";
objQueryExpression1.LinkEntities[0].LinkCriteria.AddCondition("csiro_confidential", ConditionOperator.Equal, true);
答案 0 :(得分:1)
您好,您可以这样做,
QueryExpression objQueryExpression1 = (QueryExpression)context.InputParameters["Query"];
if (objQueryExpression1.EntityName == "email")
{
objQueryExpression1.Criteria = new FilterExpression(LogicalOperator.And)
{
Conditions =
{
new ConditionExpression("new_confidential",ConditionOperator.NotEqual,true)
}
};
}
else if (objQueryExpression1.EntityName == "activitypointer")
{
QueryExpression e = new QueryExpression("email")
{
Criteria = new FilterExpression(LogicalOperator.And)
{
Conditions =
{
new ConditionExpression("csiro_confidential",ConditionOperator.NotEqual,true)
}
}
};
var filteredOutEmails = service.RetrieveMultiple(e).Entities.Select(xc => xc.Id.ToString()).ToArray();
objQueryExpression1.Criteria.AddCondition("activityid", ConditionOperator.NotIn,filteredOutEmails);
}
context.InputParameters["Query"] = objQueryExpression1;
为电子邮件和 activitypointer 实体注册您的插件 使用同步模式进行预操作
答案 1 :(得分:0)
这是一个带有ActivityPointer的known behavior,因为您创建的自定义属性(过滤器)专用于一种类型的活动。即你的情况下的电子邮件。
在电子邮件视图或仅与电子邮件相关的查询中,这很有效。其他活动不了解此自定义属性& ActivityPointer也是如此。
您必须为individual activity类型执行OUTERJOIN(您在系统中使用的是什么?)&撰写查询。
尝试这样的事情:
QueryExpression objQueryExpression1 = (QueryExpression)context.InputParameters["Query"];
objQueryExpression1.LinkEntities.Add(new LinkEntity("activitypointer", "email", "activityid", "activityid", JoinOperator.LeftOuter));
objQueryExpression1.LinkEntities[0].EntityAlias = "filteredemails";
objQueryExpression1.LinkEntities[0].LinkCriteria.AddCondition("csiro_confidential", ConditionOperator.NotEqual, true);
objQueryExpression1.LinkEntities.Add(new LinkEntity("activitypointer", "task", "activityid", "activityid", JoinOperator.LeftOuter));
objQueryExpression1.LinkEntities[1].EntityAlias = "filteredTasks";
objQueryExpression1.LinkEntities[1].LinkCriteria.AddCondition("csiro_newfield", ConditionOperator.Equal, true);