Dynamics CRM 4.0 には、監査用の属性 createdon, createdby, modifiedon, modifiedby (作成日、作成者、修正日、修正者) があります。この属性値はDynamics CRM のインフラストラクチャが自動で更新します。アドオンプログラムなどで値を直接設定することはできません。

監査機能としてはよいのですが、旧システムからデータを移行したい場合、データの作成された日付を維持して移行を行いたい要望が有ると思います。その場合、レコード作成日"overriddencreatedon"属性に作成日として指定したい日付をしてエンティティのレコードを作成します。これにより、エンティティレコードの作成日(createdon)をDynamics CRM上でレコードを作成した日付ではなく、overriddencreatedon で指定した日付にすることができます。

作成日を指定できるのは、レコードを新規作成するときのみです。修正日、修正者、作成者は変更できません。

今回にサンプルの動作確認は、 オールインワン環境で構築した Dynamics CRM 4.0 UR 11 適用済み環境で行っています。

1. サンプルプログラム

以下プログラムのサンプルです。取引先企業エンティティレコードをレコード作成日(overriddencreatedon) を指定して作成しています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Crm.Sdk;

namespace OverriddencreatedonTest
{
    class Program
    {
        static void Main(string[] args)
        {
            CrmService service = CreateService();
            CreateAccount(service);
        }
        /// <summary>
        /// 作成日を指定して取引先企業を作成
        /// </summary>
        /// <param name="service"></param>
        private static void CreateAccount(CrmService service)
        {
            account a = new account();
            a.name = "移行取引先企業";
            a.overriddencreatedon = CrmDateTime.FromUser(DateTime.Parse("2000/01/01"));
            service.Create(a);
        }
        /// <summary>
        /// On-Premise 接続
        /// </summary>
        /// <returns></returns>
        private static CrmService CreateService()
        {
            CrmService service = new CrmService();
            service.CrmAuthenticationTokenValue = new CrmAuthenticationToken();
            service.CrmAuthenticationTokenValue.AuthenticationType = 0;
            service.CrmAuthenticationTokenValue.OrganizationName = "TEST";
            service.UseDefaultCredentials = true;
            service.Url = "http://localhost/MSCRMServices/2007/CrmService.asmx";

            return service;
        }
    }
}

 

レコードを作成して属性を確認すると次のようになります。作成日にレコード作成日で指定した日付が設定されています。修正日とレコード作成日はエンティティレコードの作成日付になっています。

2.まとめ

説明は以上です。今回のサンプルではプログラムからレコード作成日を指定してました。同じことを、インポートウィザードでファイルの作成日日時として指定したい列をレコード作成日にマップすることで作成日を指定することもできるようになります。

不明点などがありましたらご連絡ください。