Apache NiFi でDynamics 365 Business Central のデータにバッチ操作を実行

Jerod Johnson
Jerod Johnson
Senior Technology Evangelist
CData JDBC Driver を使用して、Apache NiFi でDynamics 365 Business Central のデータに接続してバッチ操作を実行。

Apache NiFi は、データルーティング、変換、およびシステム間連携ロジックを強力かつスケーラブルに構築できるプラットフォームです。CData JDBC Driver for Dynamics 365 Business Central と組み合わせることで、NiFi からリアルタイムDynamics 365 Business Central のデータを操作できるようになります。この記事では、CSV ファイルからデータを読み取り、Apache NiFi(バージョン1.9.0 以降)でCData JDBC Driver forDynamics 365 Business Central のデータを使用してバッチ操作(INSERT/UPDATE/DELETE)を実行する方法を説明します。

最適化されたデータ処理が組み込まれたCData JDBC Driver は、リアルタイムDynamics 365 Business Central のデータを扱う上で比類のないパフォーマンスを提供します。Dynamics 365 Business Central に複雑なSQL クエリを発行すると、ドライバーはフィルタや集計などのサポートされているSQL 操作をDynamics 365 Business Central に直接プッシュし、サポートされていない操作(主にSQL 関数やJOIN 操作)は組み込みSQL エンジンを利用してクライアント側で処理します。組み込みの動的メタデータクエリを使用すると、ネイティブデータ型を使ってDynamics 365 Business Central のデータを操作・分析できます。

JDBC URL の生成

Apache NiFi からDynamics 365 Business Central のデータに接続するには、JDBC URL が必要です。

組み込みの接続文字列デザイナー

JDBC URL の作成をサポートするために、Dynamics 365 Business Central JDBC Driver に組み込まれている接続文字列デザイナーが使用できます。JAR ファイルをダブルクリックするか、コマンドラインからJAR ファイルを実行します。

		java -jar cdata.jdbc.d365businesscentral.jar
	

接続プロパティを入力し、接続文字列をクリップボードにコピーします。

Dynamics 365 Business Central 接続プロパティの取得・設定方法

Dynamics 365 Business Central への認証には、User およびAccessKey プロパティが必要です。

データに接続するには、OrganizationUrl を指定します。OrganizationUrl は、 http://businesscentral.dynamics.com/abc123/ などのBusiness Central アカウントへのエンドポインであるか、Web サービスのルートを参照する必要があります。OrganizationUrl を指定する方法 および利用可能なエンドポイントについての詳細は、Business Central エンドポイント を参照してください。組織内に複数の会社がある場合は、どの会社に接続するかを特定するためにCompany を指定する必要があります。 会社が1つだけの場合は、Company を指定する必要はありません。

Dynamics 365 Business Central に認証するには、User およびAccessKey 接続プロパティを指定します。Microsoft では、これらをテストおよび開発目的で推奨します。ただし、運用環境での使用は推奨していません。User およびAccessKey の値を取得するには、Dynamics 365 Business Central の「ユーザー」ページに移動して「編集」をクリックします。User Name および Web Service Access Key の値は、User およびPassword 接続文字列プロパティとして入力する値です。User Name はE メールアドレス ではありません。短縮されたユーザー名です。

Microsoft では、OAuth 認証を使用する本番ユースケースを推奨します。詳細については、ヘルプドキュメントの「OAuth 認証の使用」を参照してください。

Apache NiFi でのバッチ操作(INSERT/UPDATE/DELETE)

以下のサンプルフローは、次のNiFi プロセッサに基づいています:

  • ListFile - ローカルファイルシステムからファイルリストを取得し、取得した各ファイルにFlowFile を作成します。
  • FetchFile - ListFile プロセッサから受け取ったFlowFile のコンテンツを読み取ります。
  • PutDatabaseRecord - 指定されたRecordReader を使用して、FetchFile プロセッサからのフローファイルからレコードを入力します。これらのレコードはSQL 文に変換され、単一のトランザクションとして実行されます。
  • LogAttribute - 指定されたログレベルでFlowFile の属性を出力します。

完成したフローは以下のようになります:

注意事項

1. CSV ファイルのカラム名は、挿入/更新/削除するデータソーステーブルのレコードのカラム名と一致する必要があります。

2. Apache NiFi バージョン1.9.0 より前のバージョンでは、PutDatabaseRecord プロセッサの Maximum Batch Size プロパティがサポートされていません。

設定

バッチINSERT、UPDATE、またはDELETE を実行するには、NiFi プロセッサを以下のように設定します:

  1. ListFile プロセッサの設定:Input Directory プロパティを、CSV ファイルを取得するローカルフォルダパスに設定します。 File Filter プロパティを、名前が式に一致するファイルのみを選択する正規表現に設定します。 例:CSV ファイルのフルパスがC:\Users\Public\Documents\InsertNiFi.csv の場合、プロパティは以下の画像のように設定します:
  2. FetchFile プロセッサの設定
  3. FetchFile プロセッサのプロパティ設定はデフォルト値のままにします:
  4. PutDatabaseRecord プロセッサの設定
    • INSERT 操作

      バッチINSERT 操作を実行するには、PutDatabaseRecord プロセッサを以下のように設定します:

      • Record Reader プロパティをCSV Reader Controller Service に設定します。CSV Reader Controller Service を、CSV ファイルの形式に合わせて設定します。
      • Statement Type プロパティをINSERT に設定します。
      • Database Connection Pooling Service を、ドライバー設定を保持するDBCPConnection Pool に設定します。ドライバーはBulk API を使用するように設定する必要があります。

        プロパティ
        Database Connection URL jdbc:d365businesscentral:OrganizationUrl=https://myaccount.financials.dynamics.com/;
        Database Driver Class Name cdata.jdbc.d365businesscentral.D365BusinessCentralDriver
      • Catalog Name プロパティを、テーブルが属するカタログの名前に設定します。
      • Schema Name プロパティを、テーブルが属するスキーマの名前に設定します。
      • Table Name プロパティを、INSERT 先のテーブル名に設定します。
      • Maximum Batch Size プロパティを、単一のバッチに含めるレコードの最大数に設定します。

      UPDATE 操作

      バッチUPDATE 操作を実行するには、PutDatabaseRecord プロセッサを以下のように設定します:

      • Record Reader プロパティをCSV Reader Controller Service に設定します。CSV Reader Controller Service を、CSV ファイルの形式に合わせて設定します。
      • Statement Type プロパティをUPDATE に設定します。
      • Database Connection Pooling Service を、ドライバー設定を保持するDBCPConnection Pool に設定します。ドライバーはBulk API を使用するように設定する必要があります。上記と同じDatabase Connection URL 形式を使用します。
      • Catalog Name プロパティを、テーブルが属するカタログの名前に設定します。
      • Schema Name プロパティを、テーブルが属するスキーマの名前に設定します。
      • Table Name プロパティを、UPDATE 対象のテーブル名に設定します。
      • Update Keys プロパティを、UPDATE に必要なカラム名に設定します。
      • Maximum Batch Size プロパティを、単一のバッチに含めるレコードの最大数に設定します。

      DELETE 操作

      バッチDELETE 操作を実行するには、PutDatabaseRecord プロセッサを以下のように設定します:

      • Record Reader プロパティをCSV Reader Controller Service に設定します。CSV Reader Controller Service を、CSV ファイルの形式に合わせて設定します。
      • Statement Type プロパティをDELETE に設定します。
      • Database Connection Pooling Service を、ドライバー設定を保持するDBCPConnection Pool に設定します。ドライバーはBulk API を使用するように設定する必要があります。上記と同じDatabase Connection URL 形式を使用します。
      • Catalog Name プロパティを、テーブルが属するカタログの名前に設定します。
      • Schema Name プロパティを、テーブルが属するスキーマの名前に設定します。
      • Table Name プロパティを、UPDATE 対象のテーブル名に設定します。
      • INSERT やUPDATE のStatement Type とは異なり、DELETE 操作ではMaximum Batch Size プロパティは表示されません。ただし、操作は引き続きバッチで処理されます。変更しない場合、バッチあたりの最大レコード数はデフォルト値の2000 です。DELETE 操作で使用するMaximum Batch Size の値を変更するには、Statement Type をINSERT またはUPDATE に変更し、Maximum Batch Size プロパティの値を変更して「Apply Changes」をクリックします。最後に、プロセッサの設定を再度開き、Statement Type をDELETE に戻して「Apply Changes」をクリックします。
  5. LogAttribute プロセッサの設定

    最後に、LogAttribute プロセッサを設定して、ユースケースに基づいてログに記録または無視する属性とログレベルを指定します。

無償トライアルと詳細情報

CData JDBC Driver for Dynamics 365 Business Central の30日間無償トライアルをダウンロードして、Apache NiFi でリアルタイムDynamics 365 Business Central のデータの操作をはじめましょう。ご不明な点があれば、サポートチームにお問い合わせください。

はじめる準備はできましたか?

Dynamics 365 Business Central Driver の無料トライアルをダウンロードしてお試しください:

 ダウンロード

詳細:

Dynamics 365 Business Central (NAV) Icon Dynamics 365 Business Central JDBC Driver お問い合わせ

Items、Sales Orders、Purchase Orders などのDynamics 365 Business Central アカウントデータを組み込んだパワフルなJava アプリケーションを短時間・低コストで作成して配布できます。