c# - CRM 2016 RetrieveMultiple 用于过滤电子邮件的插件

标签 c# linq plugins dynamics-crm dynamics-crm-2016

我需要将某些电子邮件标记为 secret 。除非您具有特定角色,否则这些电子邮件不应在 CRM 系统中可见。我在电子邮件实体上创建了一个“ secret ”标志,并在电子邮件实体的 RetrieveMultiple 上创建了一个插件,用于过滤掉所有“ secret ”= true 的电子邮件。

但是,电子邮件记录在“事件”下仍然可见。我在 activitypointer 实体的 retrievemultiple 上创建了另一个插件,但我无法创建一个查询来显示除标记为“ secret ”的电子邮件之外的所有事件(包括电子邮件)。谁能帮我解决这个问题的 linq 查询?这是我创造的

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);

最佳答案

你好,你可以按照下面的方式做,

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;  

Register Your plugin for both email and activitypointer entities, on Pre-operation with Synchronous mode

附上截图enter image description here

关于c# - CRM 2016 RetrieveMultiple 用于过滤电子邮件的插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46944711/

相关文章:

c# - ASP.NET应用程序架构

c# - 使用 Linq 表达式作为具有父/子查询的规范模式

c# - 林克 "Object reference not set to an instance of an object."

jenkins - Jenkins Pipeline Artifactory插件错误:无法读取生成的生成信息

python - 在编译时提供函数元数据的大多数 Pythonic 方式?

c# - 什么是 C# 中的 NZEC 错误以及它在以下代码片段中的位置

c# - 使用 CsvHelper 编写 header ? C#

java - Maven 初学者问题 - 虽然项目设置有些复杂

c# - 我如何以编程方式(使用反射?)更改方法体并将我的更改保存回磁盘

c# - 使用依赖注入(inject)在构造函数之外创建类的新实例