[英]How to populate related lookup field CRM 2011
我想创建一个审计插件,无论何时更改“联系人”实体,都将创建一个“历史联系人”实体,该实体具有更改前的旧“联系人”实体的所有数据。
我的问题是,如果我在“联系人”到“帐户”中有一个查找字段,如何将查找到特定的“帐户”并将其放在“历史联系人”实体的查找字段中?
我完成了插件,但是现在有一个新问题。
“联系人”实体的“名字”字段中可以为空白。
尽管不需要,“历史联系人”实体将“名字”作为其主要字段。
如果在创建“历史联系人”实体时没有“名字”,则会引发错误。 我不知道为什么会这样。
即使该字段被标记为“无约束”,我也需要一个主字段来创建实体吗?
我不确定是否要遵循。 您正在创建联系人的完整副本吗? 要做到这一点非常简单,只需在更新执行后消息上显示一个前映像即可。 Pre Image是更新之前联系人的快照。
但是,为什么不使用提供的审核功能呢?
您有两种选择:
1)按照以下步骤创建一个插件:
public void Execute(IServiceProvider serviceProvider)
{
var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
var service = ((IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory))).CreateOrganizationService(context.UserId);
var originalContact = context.InputParameters["Target"] as Entity;
var newContact = new Entity("new_historicalcontact");
if (originalContact.Contains("firstname"))
{
newContact.Add("new_firstname", orginalContact["firstname"]);
}
if (originalContact.Contains("emailaddress1"))
{
newContact.Add("new_emailaddress1", orginalContact["emailaddress1"]);
}
if (originalContact.Contains("parentcustomerid"))
{
newContact.Add("new_parentcustomerid", orginalContact["parentcustomerid"]);
}
//etc etc for other properties
service.Create(newContact);
}
如果您不熟悉插件,那么这里有很多教程,您可以从我在此问题中给出的建议开始
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.