2013-05-16 81 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是更新前聯繫人的快照。

但是,您爲什麼不使用提供的審計功能?