製品をチェック

Dynamics 365 Business Central Data Provider の30日間無償トライアルをダウンロード

 30日間の無償トライアルへ

製品の詳細

Dynamics 365 Business Central (NAV) アイコン Dynamics 365 Business Central ADO.NET Provider 相談したい

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

Dynamics 365 Business Central とのデータ連携ができるMVC アプリケーションの作成

この記事では、Dynamics 365 Business Central にデータ接続して、MVC Web アプリケーションでクエリを実行する方法を説明します。

加藤龍彦
デジタルマーケティング

最終更新日:2021-03-17
d365businesscentral ロゴ

CData

ado ロゴ画像
Entity Framework ロゴ

こんにちは!ウェブ担当の加藤です。マーケ関連のデータ分析や整備もやっています。



この記事では、Visual Studio のウィザードを使って簡単なMVC(モデル・ビュー・コントローラ)プロジェクトを作成し、Entity Framework のメソッドを使うDynamics 365 Business Central にcreate, read, update, delete (CRUD) コマンドクエリを実行する方法を説明します。

Entity Framework Model の作成

下記の手順に従って接続プロパティを保存し、データモデルのエンティティにテーブルをマップします。

  1. Entity Framework 6 をお使いの場合は、あらかじめプロジェクトに Dynamics 365 Business Central Entity Framework プロバイダーを登録してください。詳しくは、ヘルプドキュメントの「LINQ およびEntity Framework」をご参照ください。
  2. Visual Studio で新規MVC プロジェクトを作成[Internet Application]テンプレート、[Razor]ビューエンジンを選択します。この例では、プロジェクト名はMvcD365BusinessCentralApp です。
  3. デザイナーから.edmx ファイルを追加するには、[プロジェクト]>[新しい項目の追加]をクリックします。ADO.NET Entity Data Model を選択してモデルに名前を付けたら[追加]をクリックします。この例では、モデル名はD365BusinessCentralModel です。
  4. [Entity Data Model]ウィザードで、[EF Designer from database]オプションを選択します。[Entity Data Model]ウィザードが表示されます。
  5. [New Connection]をクリックします。ダイアログが表示されたらCData Dynamics 365 Business Central データソースを選択します。
  6. 必要な接続文字列プロパティを指定します。

    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 認証の使用」を参照してください。

    一般的な接続文字列は次のとおりです。

    OrganizationUrl=https://myaccount.financials.dynamics.com/; The connection for the model. (QuickBooks is shown.)
  7. 接続に名前を付け、資格情報などのセンシティブ情報を接続文字列に含めるかどうかを選択します。簡略化のため、この例ではセンシティブ情報をWeb.config に保存しています。

    The completed connection step in the ADO.NET Entity Data Model wizard. (A QuickBooks connection is shown.)
  8. 必要なテーブルおよびビューを選択します。ここでは、Accounts をインポートしています。また、オブジェクト名を複数形に変換するオプションは、チェックをはずしています。[Finish]をクリックして.edmx ファイルを作成します。Tables to be imported into the .edmx file. (QuickBooks is shown.)
  9. プロジェクトをビルドして完成です。

コントローラーの作成およびメソッドとビューの生成

モデルの作成とプロジェクトのビルドが終わったら、以下の手順に従ってコントローラー、ビュー、および関連するCRUD メソッドを作成できます。 Accounts テーブルに許可されたすべてのアクションのビューは、[Views]フォルダ内のAccounts サブフォルダに.cshtml ファイルとして格納されます。

[ソリューション エクスプローラー]で[Controllers]フォルダを右クリックし、[追加]>[コントローラー]をクリックします。コントローラーにD365BusinessCentralController のような名前を付け、以下のオプションを設定します。

  • Template:次のオプションを選択します:'Controller with read/write actions, using Entity Framework'.
  • Model class:Accounts を選択。
  • Data context class:D365BusinessCentralEntities を選択。
Creating a new Controller from an existing entity data model in the Add Controller dialog. (QuickBooks is shown.)

これで、プロジェクトを実行できます。[Index]ビューにアクセスするには、"D365BusinessCentral" をURL に追加します。 [Create New]をクリックして[Create view]を選択すると、自動生成されたフォームを含むビューが作成されます。各レコードの隣にあるEdit およびDelete links をクリックして、対応するEdit またはDelete ビューを表示します。

The Index view of the example MVC Web application. (QuickBooks is shown.)

一からコントローラーを作成

このセクションでは、ほんの数行のコードでCRUD コマンドクエリをインプリメントする方法について説明します。利用可能なウィザードは、各ステップで詳しく説明します。

このチュートリアルを始める前に、エンティティデータモデルを作成しておいてください。Dynamics 365 Business Central へのコマンドを実行するために、コンテキストクラスのメソッドを使用していきます。[Entity Framework Data Model]ウィザードを使ってモデルを作成する方法については、前のセクションをご参照ください。 — これはモデルファーストアプローチです。 コードファーストアプローチの利用に関する詳細は、ヘルプドキュメントの「LINQ およびEntity Framework」をご参照ください。

  1. 次の例のD365BusinessCentralController のようにコントローラーを手動で作成するには、[ソリューション エクスプローラー]で[Controllers]フォルダを右クリックし、[追加]>[コントローラー]をクリックします。
  2. [Add Controller]ダイアログが表示されたら、[Template]メニューから'Controller with empty read/write actions' オプションを選択します。[Controller]フォルダ内にD365BusinessCentralController.cs が作成されます。
The Add Controller dialog with the selected template, Controller with empty read/write actions. (QuickBooks is shown.)

コンテキストの作成

以下のコードを追加し、コンテキストクラスをクラス変数としてインスタンスを生成します。この簡単な例では、コントローラーはコンテキストクラスのメソッドを直接呼び出してCRUD コマンドを実行します。

private D365BusinessCentralEntities db = new D365BusinessCentralEntities();

Dynamics 365 Business Central データエンティティの取得

レコードのリストをビューに表示するには、Index メソッドを以下のように書き換えます。このコードは、コンテキストクラスのToList() メソッドを呼び出して、レコードテーブルを表示するビューを返します。デフォルトでは、Index メソッドは空のビューを返します。

public ActionResult Index() { return View(db.Accounts.ToList()); }

ビューを作成するには、Index メソッド内を右クリックし、[Add View]をクリックします。ウィザードが表示されたら新しいビューIndex.cshtml を作成します。作成されたビューは[Views]フォルダに格納されます。このビューをロードするには、.cshtml ファイルを右クリックして[View In Page Inspector]をクリックします。

[Add View]ダイアログでビューに名前を付け、以下のオプションを設定します:

  • Create a strongly typed view:このオプションを選択し、Accounts タイプのビューを作成。
  • Model class:Accounts エンティティ、Accounts を選択。
  • Scaffold template:[List]を選択。このメニューオプションは、エンティティを表示するHTML テーブルを生成します。
Settings for an Index view. (QuickBooks is shown.)

Dynamics 365 Business Central データ エンティティの作成

レコードを作成するには、フォームにユーザーが送ったAccounts エンティティを受け取るビューを作成しておく必要があります。以下の手順に従って、create アクションをインプリメントします。

  1. HttpPost 属性をアノテーションする2つ目のCreate メソッドをオーバーライドします。このメソッドは、ユーザーがsubmits it back したときにデータを処理します。最初のメソッドはフォームを表示するだけなので、この動作をオーバーライドする必要はありません。
  2. デフォルトでインプットされたFormCollection を、ユーザーに作成を許可したいDynamics 365 Business Central エンティティのタイプに置き換えます。
  3. 以下のコードを追加して、Entity Framework 経由で新しいレコードを追加します。次のサンプルコードでは、コンテキストのAdd およびSaveChanges メソッドは、レコードを挿入するために呼び出されます。

    [HttpPost] public ActionResult Create(Accounts accounts) { try { db.Accounts.Add(accounts); db.SaveChanges(); return RedirectToAction("Index"); } catch { return View(); } }

Create アクションのために追加する必要があるビューは1つだけです。新しいビューCreate.cshtml は、Index.cshtml と並んでViews のDynamics 365 Business Central サブフォルダに追加されます。どちらかのCreate メソッド内を右クリックし、[Add]>[View]をクリックします。[Add View]ダイアログが表示されたら、以下のオプションを設定します。

  • Create a strongly typed view:このオプションを選択し、Accounts タイプのビューを作成。
  • Model class:Accounts エンティティを選択。
  • Scaffold template:[Create]を選択し、フォーム用にHTML を生成。
Settings for a Create view. (QuickBooks is shown.)

Dynamics 365 Business Central データエンティティの編集および保存

Dynamics 365 Business Central 内のレコードを編集するには、Create メソッド同様に、ビューから入力された値を受け取りデータソースにコマンドを実行する必要があります。さらに、Edit アクションのもう一つのアスペクトも定義が必要です:コントローラーのEdit メソッドで、コンテキストを変更されたエンティティの状態に更新します。これら3つのステップを以下に示します。

  1. 最初のEdit メソッドをオーバーライドして、コードを次のように書き換えます。ユーザーがAccounts のEdit link をクリックすると、このメソッドは選択されたAccounts エンティティをビューに送り、フォーム内での修正が可能になります。

    public ActionResult Edit(int id) { return View(db.Accounts.Find(id)); }
  2. 最初のEdit メソッドを右クリックし、[Add]>[View]をクリックします。Create アクション同様、必要なEdit ビューは1つだけです。ウィザードが表示されたら、以下のオプションを設定します:
    • Create a strongly typed view:このオプションを選択し、Accounts タイプのビューを作成。Accounts を選択。
    • Model class:Accounts エンティティを選択。
    • Scaffold template:[Edit]を選択し、フォーム用にHTML を生成。
  3. 以下のサンプルコードで、2つ目のEdit メソッドをオーバーライドします。HttpPost 属性によってアノテーションされると、このメソッドはユーザーがフォームの変更を送信するときにビューからデータを受け取ります。

    送信された値がAccounts レコードの更新に使える値である場合は、Dynamics 365 Business Central はSaveChanges メソッドが呼び出されたときに更新されます。提供されたデータ型が正しくないなど、送信された値が有効でない場合は、それらはフォームに再表示されます。

    最初のEdit メソッドで作成したビューは、フォームを表示します。Edit ビューは、エラーメッセージを表示するHtml.ValidationMessageFor helper も含みます。

    [HttpPost] public ActionResult Edit(Accounts accounts) { if (ModelState.IsValid) { db.Entry(accounts).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(accounts); }
Settings for an Edit view. (QuickBooks is shown.)

Dynamics 365 Business Central データエンティティの削除

以下のコードは、最初のDelete メソッド用のコードで、削除するAccounts エンティティのビューを返します。

public ActionResult Delete(string id) { Accounts accounts = db.Accounts.Find(id); return View(accounts); }

このメソッド内を右クリックし、[Add]>[View]をクリックします。ダイアログが表示されたら、以下の情報を入力します。

  • Create a strongly typed view:このオプションを選択し、Accounts タイプのビューを作成。
  • Model class:Accounts エンティティを選択。
  • Scaffold template:[Delete]を選択し、フォーム用にHTML を生成。
Settings for the HTTP GET Delete method. (QuickBooks is shown.)

ビューを作成したら、DeleteConfirmed メソッドに次のコードを使います。ユーザーから削除を確認するポストバックを受け取ったときにエンティティを削除します。

[HttpPost, ActionName("Delete")] public ActionResult DeleteConfirmed(string id) { Accounts accounts = db.Accounts.Find(id); db.Accounts.Remove(accounts); db.SaveChanges(); return RedirectToAction("Index"); }

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。