オンプレミスのデータベースをDynamics 365オンラインに同期する方法

アナ・ネト 会社情報, コネクタ, 製品とソリューション, 技術的なこと コメント

記事の最終更新日2020年5月5日

ある成長企業では、Microsoft Dynamics CRMをオンプレミスで使用しており、ERP(Dynamics NAV)、SharePoint、会計システムと連携しています。確かに、D365オンラインやAzureクラウドへの移行にはメリットがあると考えています。しかし、マイクロソフトは、オンプレミスのDynamics CRMのデータベースとDynamics 365をオンラインで同期させるための実用的なソリューションを提供していません。マイクロソフトが助けてくれないなら、どうやってDynamics 365とデータを同期させるのでしょうか? これがDynamics 365データベースに接続するための彼らのソリューションです。

Dynamics CRMのオンプレミスからD365オンラインへの移行

を持つことは可能ですが Dynamics 365 オンプレミス展開Microsoft Dynamics CRMのオンプレミスからDynamics 365オンラインへの移行は、最近ではほとんどの企業にとって魅力的なものとなっているようです。

Dynamics 365のオンライン対オンプレミスを検討していると、以下のように見えてきます。 Dynamics 365オンラインのSaaS(Software as a Service)モデルは、明確なメリットをもたらします。

  • ハードウェアやインフラを購入する必要はなく、メンテナンスの必要もありません。
  • ソフトウェアのライセンスは、通常、1回限りの多額の座席ごとの購入ではなく、継続的な従量課金モデルで行われます。
  • SaaSは多くの場合、ユニバーサル・アクセスを提供しており、インターネットに接続している場所であれば、どのデバイス(デスクトップ、ラップトップ、携帯電話)からでもソフトウェアに接続することができます。
  • 初期費用は、オンプレミスの機器やソフトを購入するよりもかなり安くなるのが一般的です。
  • 高可用性SLA(例:Microsoft Dynamics 365 99.9% アップタイムSLA

つまり、オンプレミスのデータベースをオンラインでDynamics 365に同期するのはとても簡単なはずですよね?

理想的には、Microsoft Dynamics CRMオンプレミスからD365オンラインに移行するには、ローカルのMicrosoft Dynamics CRM SQL DatabaseバックエンドからリモートのMicrosoft D365 SQLデータベースに直接データを転送することができます。また、もしあなたがすでにD365を持っていて、Dynamics 365をオンプレミスからオンラインに移行したいと思っていたら、もっと簡単に移行することができるはずです。

しかし、実際にはそう単純ではありません。

あなたはマイクロソフトからDynamics 365オンラインに移動するために得るもの

現在、顧客のマイクロソフトクラウドソリューションの導入を支援するため、マイクロソフトはFastTrackのページでサポートを提供している。Microsoft 365、Dynamics 365、またはAzureの対象となるサブスクリプションをお持ちのお客様は、サブスクリプションの有効期間中、追加費用なしでFastTrackをご利用いただけます(記事の最後にリンクがあります)。 移行しようとしているものについて、現在の適格基準を確認する必要があります。マイクロソフトはシート数でベースにすることもあれば、収益でベースにすることもあります。

2019年4月、マイクロソフトも「Microsoft Dynamics CRM on-premises to Dynamics 365 Online Migration」という45ページに及ぶPDFドキュメントを公開し、必要なことを説明しています(ダウンロードリンクは記事の最後にあります)。このドキュメントでは、"これまで、お客様がオンプレミスの導入をDynamics 365(オンライン)に簡単に移行できる仕組みはありませんでした。"と告白しています。

オンラインデータベースとオンプレミスを同期する際の問題点

理想的なソリューションは、Dynamics CRMのオンプレミスとのデータベース同期をDynamics 365で実現することだと考えています。

問題は、一般的にSaaSサービスのバックエンドデータベースを外部に公開することは悪しき慣習とされており、かなりのセキュリティリスクをもたらす可能性があるということです。そのため、マイクロソフトはD365オンラインのバックエンドデータベースへのアクセスを提供していません。代わりに、D365オンラインでデータのやりとりを行うために、マイクロソフトは公式のAPIサービスを提供しています。

APIサービスは、内部のビジネスルールや制約を壊さないというメリットをもたらします。このように、APIサービスはクライアントアプリケーションがパフォーマンスを妨げないことを保証します。さらに、バックエンドデータベースのデータの整合性と一貫性を維持するのに役立ちます。
APIを介してデータを操作するプロセスを開発するには、プログラミングのスキルと時間が必要です。特に、正しいパラメータを設定し、そのようなインターフェースが提供するメソッドや関数を適切に呼び出すために、ドキュメントを掘り下げていく時間が必要です。

SQLのスキルを活用して、通常のDBMS(データベース管理システム)と同じようにD365 APIと対話することができるとしたらどうでしょうか?

Dynamics 365がSQL Server Management Studioとデータベースを同期させればいいのでは?

ローカルDBMSやクライアントアプリケーションからD365オンラインへの接続

へようこそD365 Database Sync Solution!オンプレミスのデータベースをD365クラウドに同期させるための具体的なソリューションです。Connecting Softwareの統合プラットフォーム「Connect Bridge」をベースにしています。

Connect Bridge は、ANSI標準のSQL構文を適切なAPIコールに変換します。データへのアクセスがAPIコールで行われるようにすることで、(気にする必要はありませんが)ターゲットシステムの整合性を確保します。さらに、標準的なSELECT、INSERT、UPDATE、DELETEステートメントを使って、どのターゲットシステムとも簡単に通信することができます。

そのため、ローカルDBMSや任意のクライアントアプリケーションからD365オンラインに接続してデータを入れることができます。

オンプレミスのDynamics CRMからD365オンラインに移行している企業にとっては、オンプレミスのSQLデータベースに対してプロセス全体が書き込まれていた場合に特に便利です。幸いなことに、Connect Bridgeをポートフォリオに追加することで、これらのプロセスを再利用できるようになりました。

では、いよいよ実例をご紹介しましょう。

任意のデータベースからDynamics 365オンラインへ

この例では、Microsoftの有名なAdventure Works DW (Datawarehouse)データベースを使用します。ダウンロードはこちら).既存のプロセスを簡単にMicrosoft Dynamics 365 Online()に統合する方法をご紹介します。此処の情報)を使用しています。

SSMSを使用している場合(エスエルサーバーマネジメントスタジオ) を使用して SQL Server Database を管理する場合は、オブジェクト エクスプローラ ウィンドウでデータベースのスキーマを確認できます。

オブジェクトエクスプローラウィンドウでのデータベースのスキーマ

Connect Bridgeプラットフォーム は、コネクタを介して任意のターゲットシステムへのLinked Server接続を簡単に作成することができます。400 以上のコネクタがすぐに利用可能です。ここでは、Dynamics 365 コネクタに焦点を当てます。以下は、CRM/ERP/会計領域のコネクタの選択です。

コネクタ - CRM / ERP / 会計領域

以下に、SSMSで既に作成されているLinkedサーバー接続を示します。

SSMSで既に作成されているリンクサーバ接続

リンクされたサーバー接続には、わざわざ「Zs_202F」という名前を付けていることに注意してください。D365_CRM.そして、TreeViewのcatalogsノードを展開すると、従来のデータベースにアクセスしたときと同じように、Dynamics 365で提供されているスキーマ全体を見ることができます。

これがあれば、ユーザビリティを活用して、あらゆる種類の統合を作成したり、既存のプロセスをカスタマイズしたりすることができます。

D365クラウド同期ソリューションへのオンプレミスの適用性

さて、あなたは疑問に思うかもしれません:そもそもなぜこのようなことをする必要があるのでしょうか?

ここでは、あなたが関連する可能性がある2つの一般的なシナリオを紹介します。

シナリオ1.

Microsoft Dynamics CRM On-Premisesを使用している会社に勤務していますが、Microsoft Dynamics 365 Onlineへの移行作業を行っています。弊社のSQL ServerデータベースからMicrosoft Dynamics CRM On-PremisesのSQL Serverデータベースに直接統合しているものがいくつかあります。

しかし、Microsoft Dynamics 365 Onlineのデータベースに直接接続することができません。

  • Microsoft社のDynamics CRM SDKを使用して、すべてのプロセスを一から作成しなければならないのでしょうか?
  • Web API を使用してすべてのプロセスをゼロから作成しなければならないのでしょうか?
  • これって全部C#を覚えないとできないのかな?

シナリオ2.

私は、SQL Serverデータベースをバックエンドとした独自のERPシステムを持っている会社で働いています。顧客関係管理システムとしてMicrosoft Dynamics 365 CRMを採用することにしました。

ERPシステムの既存のデータをCRMに自動で入力し、双方の整合性を保つことができるようにしたいと考えています。

これを手動で行うことは、エンティティ(アカウント、連絡先、製品など)ごとに数万件のレコードの話をしているので、ほとんど不可能と思われます。また、SQL言語(Structured Query Language)での作業は快適です。

ただし、他のプログラミング言語やフレームワーク(C#、Web API's、Rest Servicesなど)についての深い経験はありません。

  • コンサルタント会社に依頼しないとできないのでしょうか?
  • 私のビジネスの変化や成長に合わせて、新しい機能を追加したり、維持したりするために、このコンサルタント会社に頼ってもいいのでしょうか?

ありがたいことに、上記のすべての答えは「いいえ」です。この時点で上記の例の使い方はベルを鳴らしているのかもしれません。

提示されたアプローチにより、既存のスキルやプロセスを大幅に活用することができます。

まだ納得していませんか?以下のステップバイステップの例を見てみましょう。

アドベンチャーワークスのデータベーステーブルDimCustomerからDynamics 365オンラインアカウントを入力します。

準備
以下のトリガーを作成します。

--*****************************************************************************

CREATE TRIGGER [dbo].[OnDimCustomerInsert] ON [dbo].[DimCustomer] AFTER INSERT

AS

BEGIN

       SET                               NOCOUNT ON

 

       DECLARE @SQL                      VARCHAR(255)

       DECLARE @AccountId                VARCHAR(255)

       DECLARE @FirstName                VARCHAR(255)

       DECLARE @LastName                 VARCHAR(255)

       DECLARE @MiddleName               VARCHAR(255)

      

       SELECT @FirstName       = [FirstName],

              @LastName        = [LastName],

              @MiddleName      = [MiddleName]

       FROM INSERTED;

       SELECT @SQL = FORMATMESSAGE('INSERT INTO ACCOUNT (Name) VALUES(''%s''); SELECT SCOPE_IDENTITY();',

       @FirstName + '-' + '-' + @LastName)

      

       CREATE TABLE #AccountId(ID VARCHAR(255))

       INSERT #AccountId

       EXEC(@SQL) AT D365_CRM

 

       SELECT @AccountId = ID from #AccountId

       UPDATE DimCustomer SET CustomerAlternateKey = @AccountId where FirstName = @FirstName and MiddleName = @MiddleName and LastName = @LastName

 

       PRINT @FirstName + ' ' + @MiddleName + ' ' + @LastName;

END

--*****************************************************************************

CREATE TRIGGER [dbo].[OnDimCustomerUpdate] ON [dbo].[DimCustomer] AFTER UPDATE

AS

BEGIN

       SET                               NOCOUNT ON

 

       DECLARE @SQL                      VARCHAR(255)

       DECLARE @AccountId                VARCHAR(255)

       DECLARE @FirstName                VARCHAR(255)

       DECLARE @LastName                 VARCHAR(255)

       DECLARE @MiddleName               VARCHAR(255)

      

       SELECT @AccountId       = [CustomerAlternateKey],

              @FirstName       = [FirstName],

              @LastName        = [LastName],

              @MiddleName      = [MiddleName]

       FROM INSERTED;

 

       SELECT @SQL = FORMATMESSAGE('UPDATE ACCOUNT SET Name=''%s'' WHERE ACCOUNTID=''%s''', @FirstName + '-' + '-' + @LastName, @AccountId)

       EXEC(@SQL) AT D365_CRM;

       PRINT @FirstName + ' ' + @MiddleName + ' ' + @LastName;

 

END


SSMSオブジェクトエクスプローラウィンドウには、以下の2つの新しいトリガーが含まれているはずです。

SSMSオブジェクトエクスプローラウィンドウの2つの新しいトリガー

Dynamics 365 Online インスタンスを開き、モジュール Sales -> Accounts に移動します。

Dynamics 365 アカウント

テスト中。

SSMSで新しいクエリウィンドウを開き、以下を貼り付けます。


INSERT INTO [AdventureWorksDW].[dbo].[DimCustomer] (FirstName, MiddleName, LastName, CustomerAlternateKey) values ('ABC Technology', '' ,'GMB', 'CT0001');

INSERT INTO [AdventureWorksDW].[dbo].[DimCustomer] (FirstName, MiddleName, LastName, CustomerAlternateKey) values ('Billy Charity', '' ,'SA', 'CT0002');

INSERT INTO [AdventureWorksDW].[dbo].[DimCustomer] (FirstName, MiddleName, LastName, CustomerAlternateKey) values ('Tom Cat', '' ,'ORG', 'CT0003');

 

SELECT * FROM DimCustomer WHERE FirstName = 'ABC Technology';

SELECT * FROM DimCustomer WHERE FirstName = 'Billy Charity';

SELECT * FROM DimCustomer WHERE FirstName = 'Tom Cat';


SSMSでF5を押すか、実行ボタンを押してスクリプトを実行します。

DimCustomerテーブルに3つの追加レコードが挿入されているはずです。

DimCustomer テーブルに挿入された 3 つの追加レコード

Dynamics 365 販売 -> アカウントに戻り、画面をリフレッシュします。ビンゴ!

Dynamics 365で作成された3つの新規アカウント

Dynamics 365で3つの新規アカウントが作成されました、かっこいいですよね?

しかし、そこで待ってください、テーブルDimCustomerのフィールドCustomerAlternateKeyには奇妙な数字があります。これは、最初に挿入した値ではありません。

代わりにDynamics 365で生成されたアカウントの固有IDを持っています。どうしてそんなことが可能なのでしょうか?

トリガーOnDimCustomerInsertを密接に見れば、SELECT SCOPE_IDENTITY();は、テーブルDimCustomerを更新するために使用されるアカウントIDを返す責任があることに気づくでしょう。

これは、テーブルDimCustomerのレコードが変更されたときにDynamics 365の既存のアカウントの更新を実行するために重要になります。

ポイントを証明するために、SSMSで以下のコードを実行して作成されたレコードを更新してください。

3つのアカウントのアップデートを実行した後、ここではDynamics 365での結果です。

UPDATE [AdventureWorksDW].[dbo].[DimCustomer] SET LastName = 'LTD' WHERE CustomerAlternateKey = 'account(9a1bc5cb-6ad7-e811-a96f-000d3a2cb90b)';

NOTE: REPLACE THE STRING account(9a1bc5cb-6ad7-e811-a96f-000d3a2cb90b) WITH THE VALUES GENERATED IN YOUR ENVIRONMENT.

Dynamics 365 アップデート実行後のアカウント

いいね!

結論

上記の例は非常にシンプルなものですが、このようなアプローチのメリットを可視化することは難しくありません。

  • プロセスのメンテナンスは一元化され、分離されている
  • トリガーを変更することでプロセスを強化することは簡単です。
  • 新しい技術やプログラミング言語を学ぶ必要はありません。

以上です。楽しんでいただけたでしょうか。

ご意見、ご要望がございましたら、下記の欄にご記入ください。

この記事を書いている私と同じように、Connect Bridgeプラットフォームを使って楽しんでいただければ幸いです。

Connect Bridgeをご利用いただく理由

短い動画を見てみましょう。

Connect Bridgeプレゼンテーションビデオ

記事の最終更新日2020年5月5日

アナ・ネト - テクニカルアドバイザー, 著者

アナ・ネト
技術顧問@Connecting Software

著者。

私は1997年からソフトウェアエンジニアをしていますが、最近は文章を書いたり、人前で話したりすることが好きになりました。  この投稿の内容やConnect Bridgeに関する質問やコメントはありますか? 是非、ご意見をお聞かせください

 ana@connecting-software.com


投稿者です。 ジェファーソン 高橋健二 MBA

コメント 3

  1. 面白そうだ - ビジネスルールの施行についてはどうですか? 例えば、我々はビジネスセントラルに私たちのPOS(SQLテーブルのデータ)からトランザクションを取得する必要があります - 販売はD365に存在しない顧客や製品が含まれていますので、どのような使用例についてはどうですか?

  2. 投稿
    作者

    やあ ポール

    POSから取得したデータをSQLテーブルで取得し、それが理解できる構造に従っている場合は Connect Bridge をクリックして、すべてをBusiness Centralに取り込むことができます。販売にD365に存在しない顧客や製品が含まれている場合、何をすべきかを決める必要があります。

    このオプションをご希望の方は、ご指定のメールでご連絡いたします。

    アナ・ネト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です