Dynamics crm 自动将联系人映射到帐户
我想向帐户添加一个字段,显示该帐户的电子邮件域,例如@BT.com。然后,我有一个电子表格,其中列出了所有帐户及其电子邮件域。我想做的是,当一个新联系人添加到Dynamics时,它会检查同一电子邮件域的电子表格(显然电子邮件中没有联系人名称),然后将联系人分配到链接到该域的帐户。你知道我会怎么做吗。谢谢开发CRM插件可能是最好的机会。在创建或更新联系人后(所谓的事件后阶段),注册要在启用时调用的插件。并在插件中更新联系人实体的Dynamics crm 自动将联系人映射到帐户,dynamics-crm,Dynamics Crm,我想向帐户添加一个字段,显示该帐户的电子邮件域,例如@BT.com。然后,我有一个电子表格,其中列出了所有帐户及其电子邮件域。我想做的是,当一个新联系人添加到Dynamics时,它会检查同一电子邮件域的电子表格(显然电子邮件中没有联系人名称),然后将联系人分配到链接到该域的帐户。你知道我会怎么做吗。谢谢开发CRM插件可能是最好的机会。在创建或更新联系人后(所谓的事件后阶段),注册要在启用时调用的插件。并在插件中更新联系人实体的parentaccountid属性,以指向您选择的帐户 在代码方面,它
parentaccountid
属性,以指向您选择的帐户
在代码方面,它类似于(免责声明:未测试):
//IPluginExecutionContext上下文=null;
//IOOrganizationService organizationService=null;
var contact=(实体)context.InputParameters[“Target”];
var email=organizationService.Retrieve(“contact”、contact.Id、新列集(“emailaddress1”)).GetAttributeValue(“emailaddress1”);
字符串主机;
尝试
{
var地址=新邮件地址(电子邮件);
host=address.host;
}
抓住
{
返回;
}
var查询=新查询表达式(“账户”);
query.TopCount=1;
//或者无论帐户上的电子邮件域字段的名称是什么
query.Criteria.AddCondition(“emailaddress1”,ConditionOperator.Contains,“@”+主机);
var entities=organizationService.RetrieveMultiple(查询).entities;
如果(entities.Count!=0)
{
联系人[“parentaccountid”]=实体[0]。ToEntityReference();
}
组织服务。更新(联系);
开发CRM插件可能是最好的机会。在创建或更新联系人后(所谓的事件后阶段),注册要在启用时调用的插件。并在插件中更新联系人实体的parentaccountid
属性,以指向您选择的帐户
在代码方面,它类似于(免责声明:未测试):
//IPluginExecutionContext上下文=null;
//IOOrganizationService organizationService=null;
var contact=(实体)context.InputParameters[“Target”];
var email=organizationService.Retrieve(“contact”、contact.Id、新列集(“emailaddress1”)).GetAttributeValue(“emailaddress1”);
字符串主机;
尝试
{
var地址=新邮件地址(电子邮件);
host=address.host;
}
抓住
{
返回;
}
var查询=新查询表达式(“账户”);
query.TopCount=1;
//或者无论帐户上的电子邮件域字段的名称是什么
query.Criteria.AddCondition(“emailaddress1”,ConditionOperator.Contains,“@”+主机);
var entities=organizationService.RetrieveMultiple(查询).entities;
如果(entities.Count!=0)
{
联系人[“parentaccountid”]=实体[0]。ToEntityReference();
}
组织服务。更新(联系);
我把昂德雷的代码清理了一下,重新考虑了手术前的因素。我还更新了逻辑以仅匹配活动帐户记录,并将查询移动到try/catch中。我不熟悉MailAddress对象,我个人只会使用字符串映射逻辑
var target = (Entity)context.InputParameters["Target"];
try
{
string host = new MailAddress(target.emailaddress1).Host;
var query = new QueryExpression("account");
query.TopCount = 1;
// or whatever the name of email domain field on account is
query.Criteria.AddCondition("emailaddress1", ConditionOperator.Contains, "@" + host);
query.Criteria.AddCondition("statecode", ConditionOperator.Equals, 0); //Active records only
var entities = organizationService.RetrieveMultiple(query).Entities;
if (entities.Count != 0)
{
target["parentaccountid"] = entities[0].ToEntityReference();
}
}
catch
{
//Log error
}
我把昂德雷的代码清理了一下,重新考虑了手术前的因素。我还更新了逻辑以仅匹配活动帐户记录,并将查询移动到try/catch中。我不熟悉MailAddress对象,我个人只会使用字符串映射逻辑
var target = (Entity)context.InputParameters["Target"];
try
{
string host = new MailAddress(target.emailaddress1).Host;
var query = new QueryExpression("account");
query.TopCount = 1;
// or whatever the name of email domain field on account is
query.Criteria.AddCondition("emailaddress1", ConditionOperator.Contains, "@" + host);
query.Criteria.AddCondition("statecode", ConditionOperator.Equals, 0); //Active records only
var entities = organizationService.RetrieveMultiple(query).Entities;
if (entities.Count != 0)
{
target["parentaccountid"] = entities[0].ToEntityReference();
}
}
catch
{
//Log error
}
如果dynamics在线,您应该尝试Flow如果dynamics在线,您应该尝试Flow您可以在操作前进行此类检查,避免进行检索以获取电子邮件地址(因为它已经在目标中),并避免对联系人本身进行更新。我不知道MailAddress是否能在沙盒插件中工作,但一个正则表达式就足够了。有趣的语法.Entities在RetrieveMultiple之后,99%的时间仅使用Entities属性作为EntityCollection,这简化了对结果的访问(作为Count属性),它还允许您执行以下有趣的操作:Account[]Companys=\u pluginWrapper.Service.RetrieveMultiple(query).Entities.Select(o=>o.ToEntity()).ToArray();您可以在操作前进行此类检查,避免进行检索以获取电子邮件地址(因为它已经在目标中),并避免对联系人本身进行更新。我不知道MailAddress是否能在沙盒插件中工作,但一个正则表达式就足够了。有趣的语法.Entities在RetrieveMultiple之后,99%的时间仅使用Entities属性作为EntityCollection,这简化了对结果的访问(作为Count属性),它还允许您执行以下有趣的操作:Account[]Companys=\u pluginWrapper.Service.RetrieveMultiple(query).Entities.Select(o=>o.ToEntity()).ToArray();