QuickBooks に接続する MVC アプリケーションの構築



この記事では、Visual Studio のウィザードを使用してシンプルな MVC(モデル、ビュー、コントローラー)プロジェクトを作成し、Entity Framework のメソッドを使って QuickBooks への CRUD(作成、読み取り、更新、削除)コマンドを実行する方法を解説します。

Entity Framework モデルの作成

以下の手順に沿って、接続プロパティを保存し、データモデル内のエンティティにテーブルをマッピングしていきましょう。

  1. Entity Framework 6 を使用する場合は、まずプロジェクトで QuickBooks Entity Framework プロバイダーを登録する必要があります。詳細はヘルプドキュメントの「LINQ and Entity Framework」の章をご参照ください。
  2. Visual Studio で新しい MVC プロジェクトを作成します。Internet Application テンプレートと Razor ビューエンジンを選択してください。この例では、プロジェクト名を MvcQuickBooksApp としています。
  3. デザイナーから .edmx ファイルを追加するには、「プロジェクト」 -> 「新しい項目の追加」をクリックします。ADO.NET Entity Data Model を選択し、モデル名を入力して「追加」をクリックします。この例では、モデル名を QuickBooksModel としています。
  4. Entity Data Model ウィザードで、「EF Designer from database」オプションを選択します。Entity Data Model ウィザードが表示されます。
  5. 「新しい接続」をクリックします。表示されるダイアログで CData QuickBooks Data Source を選択します。
  6. 必要な接続文字列プロパティを指定します。

    QuickBooks Desktop に接続するには、インストールに含まれている Remote Connector アプリケーションを使用します。Remote Connector は、リモートの QuickBooks インスタンスへの接続を可能にする軽量なスタンドアロンサーバーです。また、QuickBooks への直接 COM アクセスが利用できない状況(ASP.NET、Java、またはリモートマシン上の会社ファイルなど)で、アプリケーションを QuickBooks に接続する場合にも使用します。詳細と接続の確立手順については、ヘルプドキュメントの「Getting Started」ガイドをご参照ください。

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

    URL=http://localhost:2080;Password=test;User=test;
  7. 接続に名前を付け、接続資格情報などの機密情報を接続文字列に含めるかどうかを選択します。この例では、簡略化のため機密情報を Web.config に保存しています。

  8. 必要なテーブルとビューを選択します。この例では、Customers をインポートしています。また、この例ではオブジェクト名を複数形にするオプションは無効にしています。「完了」をクリックして .edmx ファイルを作成します。
  9. プロジェクトをビルドしてこのステップを完了します。

コントローラーとビューの作成

モデルを作成しプロジェクトをビルドしたら、以下の手順でコントローラー、ビュー、および対応する CRUD メソッドを作成していきましょう。 Customers テーブルで許可された各アクションのビューは、Views の Customers サブフォルダに .cshtml ファイルとして保存されます。

ソリューションエクスプローラーで Controllers フォルダを右クリックし、「追加」 -> 「コントローラー」をクリックします。コントローラーに名前を付け(例: QuickBooksController)、以下のオプションを設定します。

  • テンプレート: 「Controller with read/write actions, using Entity Framework」オプションを選択します。
  • モデルクラス: Customers を選択します。
  • データコンテキストクラス: QuickBooksEntities を選択します。

これでプロジェクトを実行できます。Index ビューにアクセスするには、URL に「QuickBooks」を追加します。「Create New」をクリックすると、自動生成されたフォームを含む Create ビューに移動します。各レコードの横にある「Edit」と「Delete」リンクをクリックすると、対応する Edit または Delete ビューが表示されます。

コントローラーをスクラッチで作成

このセクションでは、わずか数行のコードで CRUD コマンドを実装する方法を詳しく説明します。各ステップで利用可能なウィザードも紹介します。

このチュートリアルを始める前に、Entity Data Model を作成する必要があります。コンテキストクラスのメソッドを使用して QuickBooks にコマンドを実行します。Entity Framework Data Model ウィザードを使用してモデルを作成する方法については、前のセクションをご参照ください。これがモデルファーストアプローチです。コードファーストアプローチについては、ヘルプドキュメントの「LINQ and Entity Framework」の章をご参照ください。

  1. コントローラー(以下の例では QuickBooksController)を手動で作成するには、ソリューションエクスプローラーで Controllers フォルダを右クリックし、「追加」 -> 「コントローラー」をクリックします。
  2. 表示される「Add Controller」ダイアログで、テンプレートメニューから「Controller with empty read/write actions」オプションを選択します。Controller フォルダに QuickBooksController.cs が作成されます。

コンテキストの作成

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

private QuickBooksEntities db = new QuickBooksEntities();

QuickBooks データエンティティの取得

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

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

ビューを作成するには、Index メソッド内で右クリックし、「ビューの追加」をクリックします。表示されるウィザードで、新しいビュー Index.cshtml を作成します。これは Views フォルダに保存されます。.cshtml ファイルを右クリックして「ページインスペクターで表示」をクリックすると、このビューを読み込めます。

「ビューの追加」ダイアログで、ビューに名前を付け、以下のオプションを設定します。

  • 厳密に型指定されたビューを作成: このオプションを選択して、Customers 型のビューを作成します。
  • モデルクラス: Customers エンティティを選択します。
  • スキャフォールドテンプレート: List オプションを選択します。このメニューオプションは、エンティティを表示する HTML テーブルを生成します。

QuickBooks エンティティの作成

レコードを作成するには、ユーザーがフォームで送信した Customers エンティティを受け取るビューを作成する必要があります。以下の手順で作成アクションを実装していきましょう。

  1. HttpPost 属性でアノテートされた2番目の Create メソッドをオーバーライドします。このメソッドは、ユーザーがデータを送信したときに処理を行います。1番目のメソッドは単にフォームを表示するだけなので、この動作をオーバーライドする必要はありません。
  2. デフォルトの入力である FormCollection を、ユーザーに作成を許可する QuickBooks エンティティの型に置き換えます。
  3. 以下のコードを追加して、Entity Framework を通じて新しいレコードを追加します。以下のコード例では、コンテキストの Add および SaveChanges メソッドを呼び出してレコードを挿入しています。

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

Create アクションにはビューを1つだけ追加します。新しいビュー Create.cshtml は、Views の QuickBooks データサブフォルダに Index.cshtml と並んで追加されます。どちらかの Create メソッド内で右クリックし、「追加」 -> 「ビュー」をクリックします。表示される「ビューの追加」ダイアログで、以下のオプションを設定します。

  • 厳密に型指定されたビューを作成: このオプションを選択して、Customers 型のビューを作成します。
  • モデルクラス: Customers エンティティを選択します。
  • スキャフォールドテンプレート: Create を選択して、フォーム用の HTML を生成します。

QuickBooks エンティティの編集と保存

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

  1. 最初の Edit メソッドを以下のコードにオーバーライドします。ユーザーが Customers の Edit リンクをクリックすると、このメソッドは選択された Customers エンティティをビューに送信し、フォームで変更できるようにします。

    public ActionResult Edit(int id) {
      return View(db.Customers.Find(id));
    }
  2. 最初の Edit メソッドを右クリックし、「追加」 -> 「ビュー」をクリックします。Create アクションと同様に、Edit ビューは1つだけ必要です。表示されるウィザードで以下のオプションを設定します。
    • 厳密に型指定されたビューを作成: このオプションを選択して、Customers 型のビューを作成します。メニューで Customers を選択します。
    • モデルクラス: メニューでエンティティ Customers (MvcApplication.Models) を選択します。
    • スキャフォールドテンプレート: メニューで Edit を選択して、フォーム用の HTML を生成します。
  3. 2番目の Edit メソッドを以下のコード例でオーバーライドします。HttpPost 属性でアノテートされているように、このメソッドはユーザーがフォームで変更を送信したときにビューからデータを受け取ります。

    ポストされた値で Customer レコードを更新できる場合、SaveChanges メソッドが呼び出されると QuickBooks が更新されます。ポストされた値が有効でない場合(例: 提供されたデータ型が正しくない場合)、それらはフォームに再表示されます。

    最初の Edit メソッド用に作成したビューがフォームを表示します。Edit ビューには、エラーメッセージを表示する Html.ValidationMessageFor ヘルパーも含まれています。

    [HttpPost]
    public ActionResult Edit(Customers customers) {
      if (ModelState.IsValid) {
        db.Entry(customers).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
      }
      return View(customers);
    }

QuickBooks データエンティティの削除

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

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

このメソッド内で右クリックし、「追加」 -> 「ビュー」をクリックします。表示されるダイアログで、以下の情報を入力します。

  • 厳密に型指定されたビューを作成: このオプションを選択して、Customers 型のビューを作成します。
  • モデルクラス: メニューで Customers エンティティを選択します。
  • スキャフォールドテンプレート: メニューで Delete を選択して、フォーム用の HTML を生成します。

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

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

サンプルプロジェクト

MVC で QuickBooks を使い始めるには、C# デモまたは VB.NET デモをお試しください。 デモを実行するには、[service] ADO.NET Data Provider のインストールも必要です。 無料トライアルをご利用いただけます。このデモを使用するには、Web.config ファイル内の接続文字列を変更する必要があります。