リンク
インターシステムズ(日) └日本語ドキュメント インターシステムズ(US) (有)エムブイビイ ダイナシステム(株) Googleグループ(英語) Googleグループ(日本語) George James Software cache'infoアーカイブ 【広告】
|
Managed ProviderでVB.Netから接続する.NetからCache'のオブジェクトにアクセスする方法として、Managed Providerを使用する方法があります。 Managed Providerを使用するには 1. Cache'側でクラスを作成する 2. そのクラスにアクセスするためのプロキシクラスを自動生成する 3. .Net環境でプロキシクラスを使用する という3ステップでCache'クラスを操作できます。 ここではこのManaged Providerを使用してVB.NetからCache'クラスにアクセスする方法を記します。
クラスの作成まずCache'でクラスを作成します。
データを作成します。Populateを使い10件のデータを作成しています。 Cache'への接続C:\Intersystems\Cache\Dev\dotnet\bin\CacheNetWizard.exe を実行し、プロキシクラス定義を生成します。 1. のConnectボタンを押し、Cache'クラス情報を取得するサーバ・ネームスペースを指定します。 2. 出力タイプをSource File, Languageを開発言語に合わせて選択します。 3. プロキシクラスの出力先を指定します。 4. 対象となるCache'のクラスを指定します。 5. 6. Generateボタンを押してプロキシクラス定義ファイルを生成します。 作成されたプロキシクラス定義ファイルは以下のようになります。 Visual Studio を起動し、メニューからファィル→新しいプロジェクトを選択します。 表示されたダイアログから、Windowsアプリケーションを選択します。 空のフォームが作成されます。ボタンを1つ配置しプロパティを以下のように設定します。 .Name btn接続 このボタンのonClickメソッドとして以下の処理を記述します。
この例ではローカルのCache'環境に接続するだけで、データのやりとりは発生していません。実行すると、接続OKとメッセージボックスが表示されます。 接続文字列のPortを変更してみます。この状態では正しく接続できないので、Catch節でエラーハンドリングされるはずです。
実行してみると、正しくエラーハンドリンクされることが確認できます。 忘れないうちに、接続文字列のPortを元に戻しておきます。 接続文字列中のログファイルを確認してみます。実行ファィルの存在する場所にcacheConnect.logファイルが作成されています。 データにアクセスするIDを指定してデータにアクセスしてみます。VB側 btn接続_Click を以下のように修正し、ID=1のデータを取得します。
実行すると次のようにデータが取得できています。 SQL文の実行SQL文を直接実行して全てのデータを取得します。
CacheDataReaderクラスを経由してデータにアクセスするため、データを取得するのが少し煩雑になっています。 せっかくですので一覧を取得するようにしてみます。 Form1にリストビューを追加し以下のようにプロパティを設定します。 .Name lvwTest さらにlvwTestのColumnsをクリックしてColumHeaderエディタを立ち上げ、4つの列ヘッダを定義します。
接続ボタンが押されたときのコードを以下のように修正します。
実行し接続ボタンを押すと、次のように一覧が表示されます。 データを追加・変更・削除するいよいよデータの取得だけでなく、追加・変更・削除を行ってみます。
まず一覧表示lvwTestの項目が選択された時に、追加した各テキストボックスに値が表示されるようにします。 lvwTestをダブルクリックして、lvwTest_SelectedIndexChangedイベントハンドラの記述を行います。
動作させてみるとlvwTestで選択した項目のIDが取得できることが確認できます。 ここでCache'からデータを取得するためにbtn接続を押した際に使用したcnCacheを使用しようとすると、変数のスコープ外であるためエラーが発生します。 そのため、cnCacheをForm1内をスコープとする変数に変更します。
あわせて、毎回InterSystems.Data.CacheClient以下の参照を簡単にするため、Importを設定します。
Form1内のInterSystems.Data.CacheClient. は空文字列と置換しておきます。
lvwTest_SelectedIndexChangedの続きを記述します。
実行するとlvwTestの項目をクリックすると、該当するデータが右側の各テキストボックスにロードされます。 ほか、各ボタンが押されたときの処理を記述すると以下のようになります。
これで新規・更新・削除といった一通りの処理が行えるようになりました。 Mコードの実行最後に、VisMの時と同様に$Hの値を取得してみます。 Cache'のクラス定義に$Hを返すクラスメソッド、GetHoroを追加します。
クラス定義が変わったので、プロキシクラス定義もアップデートする必要があります。 C:\Intersystems\Cache\Dev\dotnet\bin\CacheNetWizard.exe を実行し、プロキシクラス定義を生成します。
前回と同様に指定し、プロキシクラス定義ファイルを生成します。 作成された定義ファィルをVisual Studioに反映させると、DotNet.Test以下にGetHoroメソッドが追加されています。
以下のように記述すると、
$Hの値が取得できることが確認できます。 クラスメソッドを経由すれば、既存ルーチンも問題なく取り扱えそうです。 ※本記述は Cache' 2008.2 / Visual Studio 2005 SP1 における動作です。バージョンによっては動作が記述と異なることがあります。 |