0

「連絡先」エンティティが変更されるたびに、変更前の古い「連絡先」エンティティのすべてのデータを含む「履歴連絡先」エンティティが作成される監査プラグインを作成したいと考えています。

私の質問は、「連絡先」から「アカウント」への検索フィールドがある場合、この検索を特定の「アカウント」に取得し、「履歴連絡先」エンティティの検索フィールドに配置するにはどうすればよいですか?


プラグインを完成させましたが、新しい問題が発生しました。

「連絡先」エンティティの「名」フィールドは空白にすることができます。

「履歴上の連絡先」エンティティには、必須ではありませんが、プライマリ フィールドとして「名」があります。

「履歴上の連絡先」エンティティを作成するときに「名」がない場合、エラーがスローされます。これがなぜなのかわかりません。

フィールドに「制約なし」とラベル付けされている場合でも、エンティティを作成するためにプライマリ フィールドは必要ですか?

4

2 に答える 2

0

次の 2 つのオプションがあります。

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) すぐに使用できる監査機能を使用します。あなたが探しているものかもしれないし、そうでないかもしれませんが、それについての詳細はここここで読むことができます

于 2013-05-16T13:15:49.640 に答える
0

フォローしているかどうかわかりません。何かが変更されたときに連絡先の完全なコピーを作成していますか? Post Execute of Update メッセージの Pre Image を使用すると、これを行うのは非常に簡単です。Pre Image は、更新前の連絡先のスナップショットです。

しかし、提供されている監査機能を使用していないのはなぜですか?

于 2013-05-16T08:36:42.560 に答える