C# 如何填充相关的查找字段CRM 2011
我想创建一个审计插件,每当一个“联系人”实体被更改时,就会创建一个“历史联系人”实体,该实体包含更改前旧“联系人”实体的所有数据 我的问题是,如果我在“联系人”到“帐户”中有一个查找字段,我如何将此查找获取到特定的“帐户”,并将其放置在“历史联系人”实体的查找字段中C# 如何填充相关的查找字段CRM 2011,c#,plugins,dynamics-crm-2011,lookup,entityreference,C#,Plugins,Dynamics Crm 2011,Lookup,Entityreference,我想创建一个审计插件,每当一个“联系人”实体被更改时,就会创建一个“历史联系人”实体,该实体包含更改前旧“联系人”实体的所有数据 我的问题是,如果我在“联系人”到“帐户”中有一个查找字段,我如何将此查找获取到特定的“帐户”,并将其放置在“历史联系人”实体的查找字段中 我完成了插件,但现在有一个新问题 “联系人”实体的“名字”字段可以为空 “历史联系人”实体的主要字段为“名字”,但不是必需的 如果在创建“历史联系人”实体时没有“名字”,则会抛出错误。我不知道这是为什么 我是否需要一个主字段来创建
我完成了插件,但现在有一个新问题 “联系人”实体的“名字”字段可以为空 “历史联系人”实体的主要字段为“名字”,但不是必需的 如果在创建“历史联系人”实体时没有“名字”,则会抛出错误。我不知道这是为什么
我是否需要一个主字段来创建一个实体,即使该字段被标记为“无约束”?我不确定我是否遵循。当某些内容发生更改时,您正在创建联系人的完整副本?要做到这一点,在更新消息的执行后使用一个预映像非常简单。预映像是更新前联系人的快照 但是为什么不使用提供的审核功能呢?您有两个选择: 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);
}
如果你不熟悉插件,有很多教程,你可以从我给你的推荐开始
2) 使用现成的审核功能。可能是也可能不是你正在寻找的,但你可以阅读更多关于这一点的信息