ComponentOne OLAP for WinForms を使用して QuickBooks から直接 OLAP レポートを作成



執筆:Rich Dudley、ComponentOne、2010年12月6日
この記事はもともと ComponentOne Community Site に掲載されていました

CData QuickBooks ドライバーは、QuickBooks API を使い慣れたデータベースに近いプログラミングモデルに抽象化します。インストール後、QuickBooks コネクタは ADO.NET データソースとして追加され、QuickBooks はデータベースのように操作できるようになります。顧客情報、受注、請求書データなどを含む「テーブル」に対してクエリを実行できます。データ接続は双方向なので、外部ソースから QuickBooks のデータを更新することも可能です。このブログ記事では、初期設定を行い、受注データからシンプルでインタラクティブな OLAP ビューを作成していきます。今回はコードを書かずに作成しますが、今後の記事ではより高度な機能を紹介する予定で、その際はコーディングが必要になります。

CData QuickBooks ドライバーのインストール

QuickBooks に対してプログラミングを行うには、開発マシンに QuickBooks がインストールされているか、リモート接続経由で QuickBooks が利用可能である必要があります。QuickBooks Online もサポートされています。

https://jp.cdata.com//drivers/quickbooks/ado/ からインストーラーをダウンロードして実行してください。インストーラーにより、ADO.NET 接続がデータソースの選択肢に追加され、CHM リファレンスファイルとサンプルプロジェクトもインストールされます。

パッケージは3つの部分で構成されています。アプリケーションで参照する必要がある System.Data.CData.QuickBooks ライブラリ、アプリケーションと QuickBooks 間の接続を仲介する Web サービスである QBConnector.exe、そして調整の必要はありませんが QuickBooks の将来のリリースに対応して更新される可能性のあるスキーマファイル群です。

初回接続時は、QuickBooks を起動し、会社ファイルを開いた状態でアプリケーションへのアクセスを承認する必要があります。以降の接続では認可は不要です。

QuickBooks のセットアップ

コーディングを始める前に、QuickBooks で少し設定を行う必要があります。このシリーズでは「retailer who tracks individual sales」サンプルデータベースを使用しています。デフォルトでは、これらのサンプル会社ファイルはパスワードなしで作成されています。会社ファイルへの外部接続を許可するには、パスワードを設定する必要があります。会社ファイルを開き、Company >> Change My Password でファイルにパスワードを追加してください。このデモの残りの部分では、ユーザー名を「Admin」のままにしていることを前提としています。ユーザー名を変更した場合は、以下の手順も適宜調整してください。このパスワードは会社ファイルを開く際とアプリケーションから接続する際に必要になるので、忘れないようにしてください。

会社ファイルへの外部接続を許可するには、アプリケーションにアクセス権を付与する必要があります。これらの権限を付与する最も簡単な方法(そしてすべてが正しくインストールされているかをテストする方法)は、まずサンプルアプリケーションを実行することです。

CData サンプルプロジェクトの実行

CData QuickBooks ドライバーと一緒にインストールされるサンプルプロジェクトは、コネクタのインストールと QuickBooks の設定が正しいかどうかをテストするのに役立ちます。また、会社ファイルでアプリケーションアクセス権限を設定するための代替アプリケーションとしても使用できます。

CData QuickBooks コネクタを使用する場合、QuickBooks 会社ファイルへの接続は QBConnector.exe というアプリケーションによって処理されます。これは CData QuickBooks ドライバーと一緒にインストールされます。QBConnector.exe は、デフォルトでポート 2080 でリッスンする小さな Web サービスです。ユーザー名、パスワード、アプリケーション名を設定するためのコマンドライン属性を指定します。この情報は単一のアプリケーションに固有であることに注意してください。QuickBooks に対して複数のアプリケーションを実行する場合は、異なるポートを設定して QuickBooks コネクタの複数のインスタンスを起動する必要があります。QuickBooks に接続するときは常に QBConnector.exe を実行しておく必要があります。

デフォルトでは、QBConnector.exe は %ProgramFiles%\CData\CData QuickBooks Data Provider\QBConnector にインストールされます。使用できるパラメータを説明する readme ファイルがあり、主なものはユーザー名、パスワード、アプリケーション名の3つです。QBConnector.exe はコマンドラインアプリケーションであり、QBConnector を起動する際(以下参照)には、少なくともこれら3つのパラメータを含める必要があります。QBConnector は QuickBooks と会社ファイルがインストールされているマシンで実行する必要があるため、中央のマシンで実行するか、アプリケーションと一緒に配布する必要があります。

これで QBConnector が実行され、QuickBooks が起動し、会社ファイルが開いた状態になったので、実際に接続してみましょう。サンプルプロジェクトはスタートメニューの新しい CData フォルダーから開くことができます。サンプルプロジェクトを開き、web.config の接続文字列を調整して、パスワードとアプリケーション名を設定してください:

<add name="QuickBooksConnectionString" connectionString="Location=C:\Program Files (x86)\CData\CData QuickBooks Data Provider\db;URL=http://localhost:2080;Application Name=QBOlap;user=admin;password=password" providerName="System.Data.CData.QuickBooks"/>

F5 キーを押すとサンプルアプリケーションが起動します。QuickBooks にアラートが表示されます。「Yes, always; ...」オプションを選択して Continue をクリックしてください。

アプリケーションのアクセスを確認するよう求められます:

確認が完了します。

アプリケーションのアクセスを承認している間に、サンプルアプリがタイムアウトすることがあります。問題ありません。デバッグを停止して再実行すれば、サンプルアプリが動作するはずです:

グリッドにデータが表示されていれば、準備完了です。

OLAP アプリの構築

いよいよ最終段階です。この部分は長く見えるかもしれませんが、実際にはそうでもありません。コードはなく、設定の図解が多いだけです。

Visual Studio を開き、新しい Windows Forms アプリケーションを作成します。Data Sources タブで Add New Data Source をクリックします。Database タイプを選択して、Next をクリックします。

Dataset を選択して、Next をクリックします。

ここで、New Connection を作成します。

データソースを変更します...

...CData QuickBooks Data Source を選択して OK をクリックします。

ここでデータ接続を設定します。重要なパラメータは以下のとおりです:

Password = 上記で会社ファイルに設定したパスワード
User = 会社ファイルの管理ユーザー(デフォルト = admin)

Application Name = 上記でアクセスを許可したときに使用したのと同じアプリケーション名
Company File = 会社ファイル(QBW)のフルパス

URL = QBConnector.exe のエンドポイント。デフォルトは http://localhost:2080 ですが、ローカルマシンで実行している場合や別のポートを使用している場合は更新が必要です。

Schema Location はオプションで、QuickBooks 内のデータ構造を定義する RSD ファイルを指します。QuickBooks の将来の変更により、これらのスキーマファイルも変更が必要になる可能性があり、バージョン固有のファイルになるかもしれません。現時点では、これらのスキーマファイルは 2006 年から現在までのすべてのバージョンで正確です。

完了したら、接続文字列に機密データを含めるかどうかを選択でき、接続文字列を確認することもできます。

接続文字列をアプリケーション構成ファイルに保存します。

次に、データセットに含めるデータベースオブジェクトを選択します。ここでは利用可能なすべてのテーブルを選択しています。

Finish をクリックします。Visual Studio がスキーマをインポートしてヘルパークラスを生成し、ツールボックスに Data Adapters を追加します:

Visual Studio のデフォルトフレームワークは Client Framework(.NET の小型バージョン)ですが、CData では現在フルフレームワークが必要です。フレームワークを変更するには、プロジェクトを右クリックして Properties >> Compile >> Advanced Compile Options に移動し、Target Framework を .NET Framework 4.0 に設定します。

もうすぐ完了です!この時点で、1つの小さな変更を除いて、QuickBooks コネクタの設定は完了です。次は OLAP for WinForms の機能を見ていきます。ツールボックスから C1OlapPanel をフォームにドラッグします。

C1OlapPanel の右上にある SmartTag を見つけてクリックし、設定タスクを展開します:

次のステップで必要になるので、QuickBooks と QBConnector が実行中で利用可能であることを確認してください。

Data Source >> Other Sources >> Project Data Sources >> CarlsComputerShop >> Sales Orders を選択します(申し訳ありませんがスクリーンショットはありません。SmartTag が開いた状態ではキャプチャできないようです)。フィールドセレクターに Sales Orders の「テーブル」のフィールドが表示されます。

データバインディングとアダプターがフォームに自動的に追加されます。

F5 キーを押して、魔法を見届けましょう!アプリケーションが起動し、Sales Order データをスライスアンドダイスできるようになります。

商品別、顧客別の合計支出を見てみましょう。Subtotal を Values リストボックスに、Items を Row fields リストボックスに、CustomerName を Column Fields リストボックスに追加します。グリッドが表示されますが、表示されているのはカウントであって金額ではありません。これをドル合計に変更できるか見てみましょう。

Values リストボックスの Subtotal を右クリックして、Field Settings を選択します。オプションが Count しかないことがわかります。Sum のオプションがないので、Visual Studio によるスキーマの解釈に何か予期しないことが起きているようです。これをキャンセルします。

これは、データがカウントしかできない方法で解釈されていることを意味します。通常は文字列です。デバッグを停止し、CarlsComputerShop.xsd を開き、スクロールして SalesOrders テーブルスキーマを見つけ、Subtotal をハイライトします。

次に、Properties タブを開きます。DataType が System.String に設定されていることがわかります。予想どおりです。

DataType を System.Decimal に変更し、リビルドして再度デバッグを開始します。

同じフィールド選択で、ドルの小計が表示されるようになりました!ただし、より見やすいプレゼンテーションのためにデータをフォーマットしましょう。

フォーマットするには、Values リストボックスの Subtotal を右クリックし、Field Settings >> Format を選択し、Currency を選択して OK をクリックします。

データが通貨としてフォーマットされました。

C1OlapPage のもう1つの優れた機能は、合計に含まれるレコードを確認できることです。$0 を超える値を持つフィールドを右クリックすると、含まれるデータを表示する新しいウィンドウが開きます。

顧客別ではなく月別の売上を見たい場合も、とても簡単です。Column Fields ボックスの CustomerName を TransactionDate に置き換えると、グリッドが自動的に再配置されます。

デフォルトでは日別に配置されています。月別にデータを配置するには、Column Fields ボックスの TransactionDate を右クリックし、Field Settings を選択してから Format タブを選択します。月と年のみを含むカスタム日付形式を使用して、OK をクリックします。

グリッドが月と年でグループ化されました。

コードを1行も書かずに、なかなか良いスタートが切れました!明らかな質問にお答えすると、はい、エンドユーザーがデータセットを選択できるコンボボックスを追加できます。その例は OLAP for WinForms のドキュメントにあります(製品ページ http://www.componentone.com/SuperProducts/OLAPWinForms/ を参照)。また、より高度なチュートリアルもここで公開予定です。

まとめ

CData QuickBooks ドライバーは、QuickBooks データのクエリと更新をデータベース操作と同じくらい簡単にします。ComponentOne OLAP for WinForms と組み合わせることで、データを可視化する強力な方法が得られます。これは2つのコンポーネントの紹介に過ぎませんが、今後の記事では両コンポーネントのより高度な機能を詳しく見ていきます。

リソース

CData QuickBooks ドライバー:https://jp.cdata.com//drivers/quickbooks/ado/

ComponentOne OLAP for WinForms:http://www.componentone.com/SuperProducts/OLAPWinForms/