2013-05-16 33 views
0

我想创建一个审计插件,只要“联系”实体发生变化,就会创建一个“历史联系人”实体,其中包含旧的“联系人”实体的所有数据更改。如何填充相关的查询字段CRM 2011

我的问题是,如果我有一个查询字段在“联系”到“帐户”,我该如何获得这个查找到特定的“帐户”,并将其放置在“历史联系人”实体的查找字段?


我完成了插件,但现在出现了一个新问题。

“联系人”实体在“名字”字段中可以有空白。

“历史联系”实体具有“名字”作为其主要字段,尽管它不是必需的。

如果在创建“历史联系人”实体时没有“名字”,则会引发错误。我不知道这是为什么。

即使字段被标记为“没有约束”,我是否还需要主字段来创建实体?

回答

0

你有两个选择:

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); 
} 

,如果你不熟悉的插件,也有很多教程你身边,你可以从我给出的建议开始,如this question

2)使用开箱即用的审计功能。可能或不可能是你正在寻找,但你可以阅读更多关于该herehere

0

我不确定我关注。当有事情发生变化时,您正在创建联系人的完整副本?要做到这一点,在Post Execute of Update消息上使用Pre Image非常简单。 Pre Image是更新前联系人的快照。

但是,您为什么不使用提供的审计功能?