C# CRM 2011插件-查询与数组中的值匹配的记录

C# CRM 2011插件-查询与数组中的值匹配的记录,c#,dynamics-crm-2011,C#,Dynamics Crm 2011,我刚刚发现了这个很棒的网站,我想提前感谢大家的帮助 我正在开发一个插件,可以更新联系人的电子邮件地址,其中联系人的电子邮件与数组中的一封电子邮件匹配。我们使用第三方营销工具发送大量电子邮件活动。我们希望接收所有的软反弹电子邮件,并更新CRM,清除系统中的坏电子邮件。我有一个想法,创建一个插件,在这里我声明了一个字符串数组,其中包含所有反弹的电子邮件地址。然后运行电子邮件地址与数组中任意一个值匹配的联系人查询。如果匹配,我将简单地更新电子邮件地址字段。这样的事情可能吗 我知道如何设置数组和查询记录

我刚刚发现了这个很棒的网站,我想提前感谢大家的帮助

我正在开发一个插件,可以更新联系人的电子邮件地址,其中联系人的电子邮件与数组中的一封电子邮件匹配。我们使用第三方营销工具发送大量电子邮件活动。我们希望接收所有的软反弹电子邮件,并更新CRM,清除系统中的坏电子邮件。我有一个想法,创建一个插件,在这里我声明了一个字符串数组,其中包含所有反弹的电子邮件地址。然后运行电子邮件地址与数组中任意一个值匹配的联系人查询。如果匹配,我将简单地更新电子邮件地址字段。这样的事情可能吗

我知道如何设置数组和查询记录,但我似乎找不到这样一个示例:查询在哪里查找联系人电子邮件地址以匹配数组中的任何一个值。我只找到从数组中查找特定值的示例,如“contact.emailaddress=”name@email.com“


再次感谢您的帮助

有可能是的,但您必须逐步遍历整个阵列

第一部分:我假设你知道如何识别插件中的数组

第二部分:您已经知道如何查询特定电子邮件地址的联系人实体

第三部分:只需重复找到联系人的示例。emailaddress=”name@email.com“对于电子邮件地址数组中的每个项目

foreach (string email in emailAddressArrayFrom3rdPartyTool)
{
    //Query for the contacts that match that e-mail address here
    //Update Contacts so that the e-mail address is removed.
}
您还可以定义一个列表,并在其中填充要更新的联系人。然后,您可以在跟踪所有记录后调用更新

更新:您还可以通过获取XML路径:(更多信息请参见此处:)

string fetch=@”
此处列出阵列电子邮件
此处列出阵列电子邮件
此处列出阵列电子邮件
"; 
EntityCollection结果=_serviceProxy.RetrieveMultiple(新的FetchExpression(fetch));
foreach(result.Entities中的var c)
{
System.Console.WriteLine(c.Attributes[“name”]);
}

我希望找到更有效的解决方案。当有500个电子邮件地址时,在数组中再次手动键入每个电子邮件地址以检查值不会节省太多时间。我希望在ServiceContext.CreateQuery(“contact”)中的p中有类似var qp=的内容,其中p[“email”].contains(array[].Value)选择p;或者类似的东西。好的,那么您可以尝试使用IN操作符进行FetchXML查询?您需要对数组进行一点后期处理,但FetchXML只会触发一次,并为您提供具有处于in状态的电子邮件的所有联系人。这里有一个链接可以为您提供一些语法:我将对此进行研究,谢谢。我刚才的另一个想法可能有点极端和荒谬,因为我们有43k个联系人,就是查询所有联系人并检索电子邮件地址,然后检查数组中是否包含该值,如果包含,则将其删除。是的,我会避免这样做。。如果必须使用沙盒插件,则在尝试进行任何集合比较时会受到限制。现在,如果您想直接查询SQL,然后在插件中发布更新。。那是一个非常不同的游戏。是的,我没有任何经验。我会在谷歌上搜索一下,然后仔细阅读。谢谢
string fetch = @"
   <fetch mapping='logical'>
     <entity name='contact'> 
        <attribute name='contactId'/> 
           <filter> 
              <condition attribute='emailaddress' operator='in'>
                    <value>List of Array emails here</value>
                    <value>List of Array emails here</value>
                    <value>List of Array emails here</value>
                </condition>
           </filter> 
     </entity> 
   </fetch> "; 

EntityCollection result = _serviceProxy.RetrieveMultiple(new FetchExpression(fetch));

foreach (var c in result.Entities)
   {
   System.Console.WriteLine(c.Attributes["name"]);
   }