2014-02-11 26 views
0

我刚刚发现了这个伟大的站点,并且想要提前感谢所有人提供任何帮助。CRM 2011插件 - 查询与数组中的值匹配的记录

我正在研究一个插件,用于更新联系人的电子邮件地址,其中联系人的电子邮件与数组中的某个电子邮件相匹配。我们使用第三方营销工具发送大量电子邮件活动。我们希望获取所有我们拥有的软反弹电子邮件,并更新CRM并清除系统中的错误电子邮件。我有一个想法创建一个插件,我声明所有电子邮件地址反弹的字符串数组。然后运行电子邮件地址与数组中任何一个值匹配的联系人查询。如果它匹配,我会简单地更新电子邮件地址字段。是这样的可能吗?

我知道如何设置数组和查询记录,但是我似乎找不到一个示例,查询查找联系人电子邮件地址以匹配数组中的任何一个值。我只找到了一些例子,从数组中找到一个特定的值,比如'contact.emailaddress =“[email protected]”'。

再次感谢您的帮助。

+0

发布您的代码。 – Daryl

回答

0

这是可能的,但你必须通过整个阵列。

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

第二部分:你已经知道如何查询联系人实体特定的e-mail地址

第三部分:只是重复的例子,你发现找contact.emailaddress =“[email protected]”为您拥有的电子邮件地址阵列中的每个项目。

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路线:(更多资讯:http://msdn.microsoft.com/en-us/library/gg328117.aspx

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"]); 
    } 
+1

我希望能有更高效的解决方案。如果有500个电子邮件地址,则无需再次手动输入数组中的每个电子邮件地址即可节省大量时间以检查值。 我希望的像 变种QP =从ServiceContext.CreateQuery( “联系人”) p,其中P [ “电子邮件”]包含(阵列[]值。) 选择页。; 或类似的东西。 – Trevor

+0

好的,所以也许你可以尝试一个使用IN操作符的FetchXML查询?您将不得不稍后处理数组,但FetchXML只会触发一次,并为您提供在IN条件下具有电子邮件的所有联系人。这里有一个链接给你一些它的语法:http://social.microsoft.com/Forums/en-US/9fef6bd5-3ac4-4764-a8d7-ed31458923e5/operatorin-fetch-xml-ms-crm-2011?forum = crmdevelopment –

+0

我会研究一下,谢谢。我刚才的另一个想法,也许有点极端和荒谬,因为我们有43k联系人,是查询所有联系人并检索电子邮件地址,然后检查该值是否包含在数组中,如果是,则删除它。 – Trevor

相关问题