IBM Lotus Enterprise Solution Builder (ESB) 3.x 移行ガイド
by user
Comments
Transcript
IBM Lotus Enterprise Solution Builder (ESB) 3.x 移行ガイド
IBM Lotus Enterprise Solution Builder (ESB) 3.x 移行ガイド 目次 ESB の概要........................................................................................................................... 3 ESB の機能 .....................................................................................................................................3 移行の必要性について...................................................................................................................5 移行の計画 ......................................................................................................................................5 移行の方法 ......................................................................................................................................6 移行のプロセス ..............................................................................................................................7 移行の制限事項 ..............................................................................................................................8 サーバーコードの Lotus Domino への移行 .......................................................................... 9 Lotus Domino サーバーの構成 .....................................................................................................9 新規 Web サービスの作成 ...........................................................................................................9 移行 ................................................................................................................................................10 Visual Basic 6 クライアントコードの移行 .......................................................................... 17 概要 ................................................................................................................................................17 MSSOAP.SoapClient30 クラスを使用してクライアントプログラムを移行する.................17 .NET フレームワークを使用してクライアントプログラムを移行する ..............................19 Lotus Notes クライアントコードの移行.............................................................................. 20 概要 ................................................................................................................................................20 MSSOAP.SoapClient30 クラスを使用したクライアントプログラムの移行.........................20 Java と LS2J を使用してクライアントプログラムを移行する............................................22 LSX リファレンス.............................................................................................................. 24 LsDataStore クラス.......................................................................................................................24 LsSharedStore クラス ...................................................................................................................32 ESB 移行テンプレート ...............................................................................................................39 SsList クラス ................................................................................................................................40 ESB の概要 Lotus Enterprise Solution Builder (ESB) には、統合開発環境 (IDE) と実行時環境が備わっており、洗練され た大規模なエンタープライズアプリケーションの開発とデプロイに LotusScript を使用できます。ESB ソ リューションは、あらゆる業務活動に対応しており、すべてのエンタープライズシステム、またはアプリ ケーションへのアクセスに使用できます。 IDE の高度な機能を使用することにより、Lotus Domino アプリケーション、既存のリレーショナルデータ ベース、および企業資源計画 (ERP) などのアプリケーションシステムを統合した 3 層アプリケーション を開発して、エンタープライズシステムをホストできます。ESB ソリューションの統合に要する開発サイ クルは比較的短期間です。統合により強化された ESB 実行時環境では ESB アプリケーションのパフォー マンスが向上するという利点があります。 ESB には以下のような特徴があります。 ESB の機能 ESB には以下の機能があります。 z 拡張された実行時環境 ESB には、複数のクライアントからの要求を同時に処理するマルチスレッド処理に対応する、拡張さ れた実行時環境が用意されています。受注、在庫管理、予約、会計など、外部データソースにアクセ スするあらゆる業務アプリケーションを開発したり、実行したりできます。この環境はスレッドプー リング機能にも対応しています。スレッドプーリング機能によりクライアントからの要求に迅速に応 答できます。 ESB 実行時環境では、Lotus Domino を経由する代わりに、分散オブジェクト処理の基本技術である CORBA/IIOP と、Microsoft DCOM (Windows NT バージョン) を使用して、クライアントからの要求 を直接管理できます。したがって、Lotus Notes ベースのクライアントと Web ベースのクライアント では、バックグラウンドで実行されている処理を意識することなく、リアルタイムにアプリケーショ ンを実行できます。 z 統合開発環境 (IDE) ESB には、複合文書インターフェース (Multiple Document Interface つまり MDI) への対応、プロジ ェクトブラウザ、およびクラス作成ツールなどの機能に加え、Lotus Notes 環境で使用するサーバーア プリケーションを IDE で開発するための拡張環境があります。この環境では、複数のソースファイ ルで構成された作業アプリケーションも開発できます。これにより、デプロイ可能で本格的な作業ア プリケーションを効率的に、ごく短期間で開発できます。さらに、新規のオリジナル ESB クラスが 追加され、サポートされています。 z さまざまなクライアントのサポート ESB ではさまざまなクライアントをサポートしています。各 Web クライアントおよび Lotus Notes クライアントは同じように扱われるため、クライアントのタイプによる違いを考慮することなくサー バー上の業務アプリケーションを開発および実行できます。 ESB では、Visual Basic などオブジェクトのリンクと埋め込み (DCOM) 自動化に対応したクライア ントにも対応しています。アプリケーションプログラムの業務ロジックは ESB サーバーで実行され るため、ESB 外部データソースにアクセスするためのプログラムをクライアントマシンにインストー ルする必要はありません。 z LotusScript のサポート ESB でサポートする LotusScript は、クロスプラットフォームの要件を満たす、オブジェクト指向の インタープリター言語です。LotusScript は、Lotus Notes および他の Lotus アプリケーションで既に 使われているため、新しいプログラミング言語を学習する必要はありません。LotusScript の使用経験 があるか、スクリプト関係のスキルがあれば、ESB でプログラムを短時間で、容易に開発できます。 z バックエンドへの容易なアクセス Lotus では、エンタープライズデータと電子商取引アプリケーションにアクセスして統合する、コネ クタ製品ファミリーを提供します。Lotus Domino Standard Connector は Lotus Domino および Lotus Enterprise Integrator (LEI) に含まれています。DB2、Oracle、Sybase、OLEDB、ODBC、EDA/SQL、テ キストおよびフラットファイルシステムへのアクセスに使用されます。Lotus Domino Standard Connector は、ESB にも含まれており、DB2、Oracle、Sybase、および ODBC へのアクセスに使用さ れます。 Lotus Domino Premium Connector は別売です。MQSeries 用、CICS 用、および開発中の XML 用のコ ネクタを使用して、SAP、R/3、PeopleSoft V7.0、V7.5、各種 Oracle アプリケーション、および J.D.Edwards にアクセスできます。他の Lotus Software eXtension (LSX) グループを使用することもで きますが、安全にマルチスレッドで使用できるように設計されている LSX に限ります。 z Lotus Domino サーバーとのロードバランシング ESB を Lotus Domino と組み合わせて使用すると、ESB への外部リソースと連携する LotusScript サ ーバーエージェントの負荷を軽減できます。これにより Lotus Domino サーバーの負荷を大幅に削減 できます。 移行の必要性について z ESB のサービス終了 (EOS) について IBM ソフトウェアサポートのライフサイクルポリシーでは、IBMプログラムのご使用条件 (IPLA) に 基づいて使用許諾された IBM ソフトウェアのサポートを提供する期間を指定しています。このサポ ート期間が過ぎると、そのソフトウェアのサービスは終了したとみなされます。ESB ソフトウェア製 品のサービス終了については次の Web サイトを参照してください。 http://www.ibm.com/software/info/supportlifecycle/ z なぜ移行が必要なのでしょうか アプリケーションの移行は必須です。業務要件の変化に伴い、アプリケーションに新規機能が追加さ れます。性能要件の変化に伴い、ハードウェアの追加または既存のハードウェアの再構成が行われま す。新しいテクノロジーが開発されると、このテクノロジーを使用するようにアプリケーションが構 成されます。 ESB は CORBA をベースとしたシステムのため、ESB を使用して構造化されたアプリケーションは 以前のアーキテクチャーに基づくことになります。新しいテクノロジーに基づいて新しいアプリケー ションが開発されたときに既存の ESB アプリケーションが移行済みである場合、アプリケーション の結合力が向上し、新しいアプリケーションの開発が容易になります。 本書では、さまざまなシステム構成で ESB の移行を計画および実行するときの考慮事項について説明し ます。 移行の計画 移行を計画する場合は、以下の点を考慮してください。 • アプリケーションプログラムの移行コスト。移行コストは、移行方針および方法により変化しま す。 • ハードウェア能力計画。必要な性能は、移行方針および方法により変化します。 • 移行の効果 (ユーザビリティー)。移行がシステム性能にどのように影響するのかを考慮します。 • 管理者教育。移行によりシステムのユーザビリティーに影響する場合があります。 移行の方法 本書では、システム構成を 2 つのケースに分けて説明します。1 つ目は、クライアントアプリケーション で Visual Basic または Lotus Notes を使用しているケースです。2 つ目はクライアントが Web ブラウザ のケースです。 次の図は、クライアントアプリケーションで Visual Basic または Lotus Notes を使用している場合の ESB アプリケーションのアーキテクチャーを示します。この図では、クライアントアプリケーションと ESB ア プリケーションが移行対象です。 クライアントアプリケーション (Lotus Notes または Visual Basic 6) CORBA/IIOP ESB アプリケーション バックエンドの (LotusScript で記述) サービス ESB (MQ、DB2 など) 次の図は、クライアントアプリケーションが Web ブラウザの場合の ESB アプリケーションのアーキテク チャーを示します。この図では ESB アプリケーションが移行対象です。 クライアント アプリケーション HTTP WAS (ブラウザ) CORBA/IIOP ESB アプリケーション バックエンドの (LotusScript で記述) サービス ESB (MQ、DB2 など) ESB を使用するシステムに適用できる移行方針は複数あります。Lotus Domino ベースへの移行、 WebSphere Application Server (WAS) ベースへの移行などです。いずれの方法にも、移行コストや移行後の システムの耐久期間に影響する一長一短があります。本書では、ESB 上で作成された多数のサーバーアプ リケーションのリソースを再利用できるLotus Domino ベースへの移行計画を中心に説明します。 Lotus Domino ベースへの移行では、2 種類のクライアントタイプを仮定します。 • Visual Basic + ESB から Visual Basic + Lotus Domino へ • Lotus Notes + ESB から Lotus Notes + Lotus Domino へ 以降では、これらの移行方法それぞれについて説明します。 例外が存在する場合がありますので注意してください。Web ブラウザから WAS 経由で ESB を使用して いる場合は WAS ベースへの移行をお勧めします。このケースでは、特別なクライアントアプリケーショ ンを使用していないため、移行用のアプリケーションを別途作成するためのコストがかかります。また、 既に WAS を使用しているため、顧客が WAS ベースのアプリケーションに慣れていることも想定されま す。 高性能が必要とされる場合にも WAS ベースへの移行をお勧めします。一般に、高性能を要するミッショ ンクリティカルなタスクでは、バックエンドアプリケーション開発のベースとして WAS を使用すること をお勧めします。WAS ベースへの移行は、そのようなシステムに適します。 Lotus Domino ベースへの移行には、以下のような制限事項がありますが、Lotus Domino ベースへ移行す ることをお勧めします。Lotus Domino ベースへ移行しない場合は WAS ベースへの移行をお勧めします。 移行のプロセス 手順の概要 1. 移行を計画する 2. Lotus Domino サーバーを起動する 3. Domino データベースの移行ターゲットを作成する 4. サーバープログラムを移行する 5. クライアントプログラムを変更する 6. サーバーおよびクライアント間の通信テストを実行する 7. テスト結果に応じてプログラムを変更する 移行の制限事項 ESB と Lotus Domino の違いから生じる、Lotus Domino ベースへの移行時の制限事項を以下に示します。 1. スケーラビリティー ESB は数百のサーバープロセスを同時に実行するよう設計されています。Lotus Domino Web サ ービスではパフォーマンスが低下します。ESB では、プロジェクトをメモリに読み込んでから ユーザーアプリケーションプログラムが実行されます。Lotus Domino Web Serviceは、起動するた びにロードされて実行されます。このパフォーマンス低下について ESB の場合と比較検討する 必要があります。 ESB にはスレッドプーリング、スレッド数の制限などスケーラビリティーを制御するいくつか の機能がありますが、Lotus Domino にはありません。 2. モニター ESB ランタイムには、ログ出力、オブジェクト数、スレッド数、メソッド呼び出し数など、サ ーバーアプリケーションの状況をモニターするツールが含まれています。管理者がアプリケーシ ョンを開始または停止することもできます。ESB を使用しているお客様の場合は、システムを 管理するためにアプリケーションの状況をモニターする手段が必要になります。 3. 開発環境 ESB には、リモート開発や、マルチスレッド対応のデバッグなどの機能を提供する統合開発環 境 (IDE) があります。サーバーサイドのアプリケーションを開発するにはこれらの機能が必要 ですが Lotus Domino Designer には存在しません。 4. ロギング ESB には Lotus Domino よりも高度なロギング機能があります。Lotus Domino のプリント文で は、コンソールと logs.nsf にのみメッセージが書き込まれます。ESB の場合は、ファイル、Lotus Notes データベース、またはサーバーログに対してログを出力できます。 5. プロジェクトの形式 ESB のプロジェクトの形式は Lotus Domino での形式 (NSF 形式) と異なります。ESB プロジ ェクトは、1 つの LSP ファイルと複数の LSS ファイルで構成されます。LSP ファイルにはプ ロジェクトに関する情報が、LSS ファイルにはソースコードが含まれています。顧客によっては ESB プロジェクト形式への依存度の高い ESB プロジェクトを含むシステムを構築しているこ とがあります。 サーバーコードの Lotus Domino への移行 このセクションでは、ESB ベースのサーバーアプリケーションを Lotus Domino 7 ベースに移行する手順 を説明します。このセクションでは次の内容を説明します。 • ESB サーバーアプリケーションの移行シナリオ • Lotus Domino への新規 Web サービスの作成 • ESB アプリケーションの Lotus Domino への移行 ESB アプリケーションを移行する場合は、基本的に、Lotus Domino 上の Web サービスとしてサーバーア プリケーションを実装します。Web サービスは Lotus Domino 7 の新機能です。Web サービスにより LotusScript をリモートから公開できます。 Lotus Domino サーバーの構成 セキュリティ上の理由から、Lotus Domino サーバーでは、Web サービスを実行する許可を Lotus Notes ユ ーザーアカウントに自動的に与えることはありません。Web サービスの作成と実行を行う前に、Web サ ービスを実行できる Lotus Notes ID を指定する必要があります。 1. Web サービスの実行権限を与える Lotus Notes ユーザーアカウントを 1 つ以上選択します。 2. Lotus Domino サーバーが実行されているコンピュータで Lotus Domino Administrator を起動しま す。 3. Lotus Domino Administrator の [設定] タブを選択します。 4. ウィンドウの左側にあるドロップダウンリストから [サーバー] 内の [現在のサーバー文書] を 選択します。 5. [セキュリティ] タブを選択します。 6. [制限付き LotusScript/Java エージェントの実行] フィールドに手順 1 で選択した Lotus Notes ID を入力します。任意のユーザーの権限で Web サービスを実行する場合は、このフィールドに * を入力します。プログラム可能な制限の詳細については、Lotus Domino Administrator ヘルプの 「セキュリティ」トピックを参照してください。 7. [保存して閉じる] ボタンをクリックして、Lotus Domino Administrator を終了します。 新規 Web サービスの作成 まず Web サービスを格納する新規データベースを作成します。 1. Lotus Domino Designer を起動します。 2. [ファイル] メニューの [データベース] - [新規] を選択します。 3. データベースを格納する Lotus Domino サーバー名を入力します。[タイトル] フィールドにデー タベース名を、[ファイル名] フィールドに NSF ファイル名を指定します。 4. [OK] をクリックします。新規データベースが作成されます。 Lotus Domino Designer ヘルプの「データベースを作成する」トピックも参照してください。 次に、新規 Web サービスをこのデータベースに作成します。 1. 作成したデータベースを選択します。 2. [共有コード] の [Web サービス] を選択します。 3. [新規 Web サービス] をクリックすると、[Web サービス] ダイアログボックスが表示されます。 4. [名前] フィールドに Web サービスの名前を入力し、ダイアログボックスを閉じます。 5. [ファイル] メニューの [保存] を選択して、データベースを保存します。 Lotus Domino Designer ヘルプの「Web サービス」トピックも参照してください。 移行 サーバーコードの移行手順の概要を説明します。ESB IDE と Lotus Domino Designer の両方を起動して、 ESB IDE から Lotus Domino Designer にソースコードをコピーします。詳細については、後のセクション を参照してください。 1. 通常のクラスを ESB ソースコードからスクリプトライブラリにコピーします 2. グローバル関数とグローバルサブルーチンを ESB ソースコードから Lotus Domino データベー スのスクリプトライブラリにコピーします 3. 各 LSServer クラスをスクリプトライブラリに移行します 4. 各公開クラスを Web サービスに移行します ESB プロジェクトでグローバル変数を使用している場合は、次ページの「グローバル変数を LSServer ク ラスにラップする」を参照してください。 スクリプトライブラリを作成する 元の ESB プロジェクトにあるグローバル関数と通常クラス定義を移行するには、スクリプトライブラリ を作成しておく必要があります。 1. [共有コード] - [スクリプトライブラリ] を選択します。 2. [新規 LotusScript ライブラリ] ボタンをクリックします。スクリプトライブラリが新規作成さ れます。 3. [編集] メニューの [プロパティ] を選択します。[スクリプトライブラリ] プロパティにスクリプ トライブラリの名前を入力して閉じます。 4. [ファイル] メニューの [保存] を選択します。 グローバル変数を LSServer クラスにラップする ESB プロジェクトでグローバル変数を使用している場合は、それらのグローバル変数を LSServer クラス にラップしてから、前述の手順を行う必要があります。たとえば、「図: ESB グローバル変数」 の ESB ソ ースコードを 「図: LSServer クラスにラップされたグローバル変数」 により置換します。 「図: グローバル変数の使用」、「図: LSServer クラス内のメンバー変数の使用」 などの変数宣言の変更 に合わせて、ソースコード内でグローバル変数を使用するいくつかの箇所を修正する必要があります。 「図: ESB グローバル変数の宣言」 Dim x As Integer 「図: LSServer クラスにラップされた ESB グローバル変数」 LsServer Class GlobalVariablesHolder Private x As Integer Public Sub setX(param1 as Integer) x = param1 End Sub Public Function getX() As Integer getX = x End Sub End Class 「図: グローバル変数の使用」 x = 100 「図: LSServer クラス内のメンバー変数の使用」 Dim holder As GlobalVariablesHolder Set holder = Bind GlobalVariablesHolder("") holder.setX(100) Call holder.GetX() 通常クラスを移行する 通常クラスとは、LSServer クラスでも公開クラスでもないクラスです。通常クラスの定義は、簡単に Web サービスに移行できます。必要な作業は ESB ソースコードから Web サービスのスクリプトライブラリへ のコピーのみです。クラス定義を配置するスクリプトライブラリが未作成の場合は、前述の「スクリプト ライブラリを作成する」を参照してください。 グローバル関数とグローバルサブルーチンを移行する グローバル関数とグローバルサブルーチンは簡単に Web サービスに移行できます。ESB ソースコードか ら Web サービス内のスクリプトライブラリにコピーするのみです。クラス定義を配置するスクリプトラ イブラリが未作成の場合は、前述の「スクリプトライブラリを作成する」を参照してください。 LSServer クラスを移行する クラス定義を配置するスクリプトライブラリが未作成の場合は、前述の「通常クラスを移行する」を参照 してください。スレッド間で共有する値が存在する場合は、SharedStore LSX を使用できます。ただし、 DB ハンドルもポインタも保持できません。これらは共用できず、これらでは、オリジナルのコードを使 用するためです。 移行後の LSServer クラスでは、クラスの取得ごとに新しい値が割り当てられるため、その値がそのまま 使用されます。移行後の LSServer クラスの作成時には、新規サブルーチンにより新しい値が設定されま す。接続プールは保持されず、DB ハンドルが毎回作成されますが、このハンドルはこのシステムを正し く通過します。移行済みの LSServer クラスを呼び出すには、次のように置換します。 オリジナル Dim myobj as myLsServer Set myobj = Bind("") 移行後 Dim myobj as myLsServer Set myobj = new myLsServer 公開クラスを移行する Web サービスと公開クラスとの間には、次のような関係があります。 • 1 つの公開クラスが 1 つの Web サービスとして表されます。 • 公開クラスの名前は、Web サービスの PortType クラスに設定されます。 公開クラスの実装タイプにはステートフルタイプとステートレスタイプがあります。各タイプはユーザー による LotusScript の実装方法により決まります。 ステートレスな公開クラスを移行する ステートレスな公開クラスの場合は、公開クラスを Web サービスにコピーするのみです。Published キー ワードを削除します。公開クラスの名前が、Web サービスの PortType クラスに設定されます。 ステートフルな公開クラスを移行する ステートフルな公開クラスの移行には 3 種類のモデルがあります。 • ESB でステートフルクラスをステートレスクラスに変更してから移行 • デリゲーションモデル • ESB 移行 LSX クラスを使用しての移行 ESB でステートフルクラスをステートレスクラスに変更してから移行する ESB で、複数の関数を 1 つの関数にパックして、ステートフル関数をステートレス関数に置換します。 この関数を Web サービスに移行します。 オリジナルのコード <サーバーコード> Published Class case2 Private n As Long Sub Func1() n = 10 End Sub Function Func2(m As Long) As Long Func2 = n + m End Function End Class <クライアントコード> myobj.Func1 rc = myobj.Func2(5) 移行後のコード <サーバーコード> Published Class case2 Private n As Long Sub Func1() n = 10 End Sub Function Func2(m As Long) As Long Func2 = n + m End Function Function Func3(m As Long) As Long Func1 Func3 = Func2(m) End Function End Class <クライアントコード> rc = myobj.Func3(5) デリゲーションモデル 基本的計画が関数として実装され、関数およびサブルーチンはそれを使用してクラスのオブジェクト 自体を戻り値として戻します。この移行方法は、クライアントからの接続に .NET フレームワークと Java を使用している場合に適しています。 戻り値として自身のオブジェクトを返す関数としてサブルーチンが定義されます。 オリジナル Published Class classA Private member1 As Integer Sub sub1(arg1 As Integer) member1 = arg1 End Sub End Class 移行後のコード classB は Web サービスの PortType クラスとして設定されます。 Class classA Public member1 As Integer Sub sub1(arg1 As Integer) member1 = arg1 End Sub End Class Class classB Function func1(objA As classA, arg1 As Integer) As classA objA.sub1(arg1) Set func1 = objA End Function End Class 関数を移行するために、元のクラスが引数として追加され、関数の戻り値が引数に代入され、元のク ラスのオブジェクトが関数の戻り値として戻されます。 オリジナル Published Class classA Private member1 As Integer Function func1(arg1 As Integer) As Integer member1 = arg1 func1 = member1 * 2 End Function End Class 移行後のコード classB は Web サービスの PortType クラスとして設定されます。 Class classA Public member1 As Integer Function func1(arg1 As Integer) As Integer member1 = arg1 func1 = member1 * 2 End Function End Class Class classB Function func1(objA As classA, arg1 As Integer, retval as INTEGER_HOLDER) As classA retval.value = objA.func1(arg1) Set func1 = objA End Function ESB 移行 LSX クラスを使用して移行する この移行方法では、LsDataStore LSX を使用して値を保持します。LsDataStore LSX では、指定の .nsf データベースに値を一時的に保存します。Lotus Domino Designer ヘルプの「アプリケーションのセキ ュリティ」を参照して、保存される値の安全性を確認してください。 LsDataStore LSX を利用することによる Web サービスの操作を制限する必要があります。不要な文 書は、DeleteDocumentCache エージェントを設定して削除します。 オリジナル Published class Example member1 as Long Public Sub SetMember1(i as Long) member1 = i End Function Public Function GetMember1 () as Long GetMember1 = member1 End Function End class 移行後のコード Public class Example member1 as Long ds as LsDataStore Sub New Set ds = New LsDataSotre("servername","databasepath") End Sub Sub SetMember1(i as Long, token as String_Holder) member1 = i call ds.setToken(token.Value) call ds.store("member1", member1) token.Value = ds.getToken() End Function Function GetMember1(token as String_Holder) As Long call ds.setToken(token.Value) member1 = ds.restore("member1") GetMember1 = member1 End Function End class Visual Basic 6 クライアントコードの移行 概要 このセクションでは、Visual Basic で記述されたクライアントコードを移行する方法を説明します。Web サ ービスに変更済みのサーバーとの接続には、Microsoft SOAP Toolkit 3.0 を使用します。本書では、Microsoft SOAP Toolkit 3.0 を主に使用する方法を説明します。Microsoft SOAP Toolkit 3.0 は次の場所にあります。 http://www.microsoft.com/downloads/details.aspx?familyid=c943c0dd-ceec-4088-9753-86f052ec8450&displaylang =en MSSOAP.SoapClient30 クラスを使用してクライアントプログラムを移行す る LotusScript と Microsoft Visual Basic の組み込み CreateObject 関数を使用して次のように SvClink クラス オブジェクトを作成した場合、 Dim ORSObj As Variant Set ORSObj = CreateObject("SvClink") 次のコードのように書き換えることができます。 Dim ORSObj As Variant Set ORSObj = CreateObject("MSSOAP.SoapClient30") MSSOAP.SoapClient30 クラスオブジェクトを削除する場合は、LotusScript で他のオブジェクトを削除する 場合と同様に、Nothing 定数を使用します。 Set ORSObj = Nothing Web サービスに接続する MSSOAP.SoapClient30 クラスオブジェクトを作成したら、MSSoapInit メンバー関数を使用して Web サー ビスに接続できます。 ORSObj.MSSoapInit "http://myserver.mydomain.com/myDB.nsf/mywebService?WSDL" メンバープロシージャーを呼び出す Web サービスプログラムとクライアントプログラムは、移行後の公開クラスのメンバープロシージャーを 通じて互いに通信します。クライアントプログラムでは、ドット表記を使用してメンバープロシージャー を呼び出します。 ORSObj.memberFunction ここで、memberFunction は、実行するメンバープロシージャーの名前です。 オリジナル Sub Click() Dim ORSObj As Variant Dim MyObj As Variant Dim f As Single Dim c As Single Set ORSObj = CreateObject("SVCLink") Set MyObj = ORSObj.CreateObject ("CFConv.ConvertClass, node= ServerName ") f = MyObj.CtoF(10) MsgBox f c = MyObj.FtoC(10) MsgBox c Set MyObj = Nothing End Sub 移行後のコード Sub Click() Dim MyObj As Variant Dim f As Single Dim c As Single Set MyObj = CreateObject("MSSOAP.SoapClient30") MyObj.mssoapinit "http://ServerName/CFConv.nsf/CFConv?WSDL" f = MyObj.CtoF(10) MsgBox f c = MyObj.FtoC(10) MsgBox c Set MyObj = Nothing End Sub .NET フレームワークを使用してクライアントプログラムを移行する .NET フレームワークを使用するには、Visual Basic 6 を Visual Basic .NET 以降に移行する必要があります。 Visual Basic 2005 への移行をお勧めします。 移行手順 1. Web 参照の追加 2. Web サービスの新規のサービスクラス。 オリジナル Sub Click(ByVal sender As System.Object, ByVal e As SystemEventArgs) Handles Button1.Click Dim ORSObj As Variant Dim MyObj As Variant Dim f As Single Dim c As Single Set ORSObj = CreateObject("SVCLink") Set MyObj = ORSObj.CreateObject ("CFConv.ConvertClass, node= ServerName ") f = MyObj.CtoF(10) MsgBox f c = MyObj.FtoC(10) MsgBox c Set MyObj 移行後のコード Sub Click(ByVal sender As System.Object, ByVal e As SystemEventArgs) Handles Button1.Click Dim MyObj As New ServerName.CFConvService Dim f As Single Dim c As Single f = MyObj.CtoF(10) MsgBox f c = MyObj.FtoC(10) MsgBox c Set MyObj = Nothing End Sub Lotus Notes クライアントコードの移行 概要 このセクションでは、Visual Basic で記述されたクライアントコードを移行する方法を説明します。Web サ ービスに変更済みのサーバーとの接続には、Microsoft SOAP Toolkit 3.0 を使用します。本書では、Microsoft SOAP Toolkit 3.0 を主に使用する方法を説明します。Microsoft SOAP Toolkit 3.0 は次の場所にあります。 http://www.microsoft.com/downloads/details.aspx?familyid=c943c0dd-ceec-4088-9753-86f052ec8450&displaylang =en MSSOAP.SoapClient30 クラスを使用したクライアントプログラムの移行 LotusScript と Microsoft Visual Basic の組み込み CreateObject 関数を使用して次のように SvClink クラス オブジェクトを作成した場合、 Dim ORSObj As SSClink Set ORSObj = New SSClink 次のコードのように書き換えることができます。 Dim ORSObj As Variant Set ORSObj = CreateObject("MSSOAP.SoapClient30") MSSOAP.SoapClient30 クラスオブジェクトを削除する場合は、LotusScript で他のオブジェクトを削除する 場合と同様に、Nothing 定数を使用します。 Set ORSObj = Nothing Web サービスに接続する MSSOAP.SoapClient30 クラスオブジェクトを作成すると、MSSoapInit メンバー関数を使用して Web サー ビスに接続できます。 ORSObj.MSSoapInit "http://myserver.mydomain.com/myDB.nsf/mywebService?WSDL" メンバープロシージャーを呼び出す Web サービスプログラムとクライアントプログラムは、移行後の公開クラスのメンバープロシージャーを 通じて互いに通信します。クライアントプログラムでは、ドット表記を使用してメンバープロシージャー を呼び出します。 ORSObj.memberFunction ここで、memberFunction は、実行するメンバープロシージャーの名前です。 オリジナル Sub Click(Source As Button) Dim ORSObj As SsClink Dim MyObj As Variant Dim f As Single Dim c As Single Set ORSObj = New SsClink Set MyObj = ORSObj.CreateObject ("CFConv.ConvertClass, node= ServerName ") f = MyObj.CtoF(10) MsgBox f c = MyObj.FtoC(10) MsgBox c Set MyObj = Nothing End Sub 移行後のコード Sub Click(Source As Button) Dim MyObj As Variant Dim f As Single Dim c As Single Set MyObj = CreateObject("MSSOAP.SoapClient30") MyObj.mssoapinit "http://ServerName/CFConv.nsf/CFConv?WSDL" f = MyObj.CtoF(10) MsgBox f c = MyObj.FtoC(10) MsgBox c Set MyObj = Nothing End Sub Java と LS2J を使用してクライアントプログラムを移行する Java と LS2J を使用して移行することもできます。移行手順は次のとおりです。 1. WSDL2Java を使用して Java プロキシを作成する 2. Java クラスをラップするServiceLocator を作成する 3. ラップした Java クラスを LS2J から呼び出す オリジナル Sub Click(Source As Button) Dim ORSObj As SsClink Dim MyObj As Variant Dim f As Single Dim c As Single Set ORSObj = New SsClink Set MyObj = ORSObj.CreateObject ("CFConv.ConvertClass, node= ServerName ") f = MyObj.CtoF(10) MsgBox f c = MyObj.FtoC(10) MsgBox c Set MyObj = Nothing End Sub 移行後のコード Sub Click(Source As Button) Dim mySession As JavaSession Dim myClass As JavaClass Dim MyObj As JavaObject Dim f As Single Dim c As Single Set mySession = New JavaSession Set myClass = mySession.GetClass("myCFConv") Set MyObj = myClass.CreateObject() f = MyObj.CtoF(10) MsgBox f c = MyObj.FtoC(10) MsgBox c Set MyObj = Nothing End Sub <Java コード> Public class myCFConv { public float CTOF(float c) { try { java.net.URL endpoint = new java.net.URL("http://myserver:80/myDB.nsf/CFConv?OpenWebService"); ConvertClass port = new ConvertClassServiceLocator()getDomino(endpoint); return port.CTOF(c); } catch (java.rmi.RemoteException re) { //エラーコード } catch (Exception e) { //エラーコード } return 0; } public float FTOC(float f) { try { java.net.URL endpoint = new java.net.URL("http://myserver:80/myDB.nsf/CFConv?OpenWebService"); ConvertClass port = new ConvertClassServiceLocator()getDomino(endpoint); return port.FTOC(f); } catch (java.rmi.RemoteException re) { //エラーコード } catch (Exception e) { //エラーコード } return 0; } } LSX リファレンス LsDataStore クラス LsDataStore クラスは、変数やオブジェクトを NSF で保持する機能を提供します。この機能によ り、Web サービスの関数呼び出し以降までメンバー変数を保持できます。この機能により実質的 にステートフルな SOAP が実現されます。 構文 構文 1 Dim myStore As New LsDataStore(Server, dbfile) 構文 2 Dim myStore As LsDataStore Set myStore = New LsDataStore(Server, dbfile) 要素 myStore LsDataStore クラスオブジェクトへの参照を含む変数です。 Server 文字列。データベースが配置されているサーバーの名前です。現在のコンピュータのデー タベースを指定する場合は空の文字列 ("") を使用します。空の文字列は、スクリプトがワ ークステーションで実行されるときはローカルデータベースを示し、スクリプトがサーバ ーで実行されるときはサーバー上のデータベースを示します。 dbfile 文字列。Lotus Notes または Lotus Domino のデータディレクトリにあるデータベースのパ スおよびファイル名です。データベースを後で開く場合は、dbfile$ と server$ の両方に空 の文字列を指定します。データベースが Lotus Notes データディレクトリに存在しない場 合は、絶対パス名を使用してください。 プロパティ UniversalID、FileName、FilePath メンバー関数 Restore メンバーサブルーチン Store イベント LsDataStoreError 使用方法 • LsDataStore クラスオブジェクトを 1 つ作成します。 • Store サブルーチンまたは StoreObject サブルーチンを使用して、データを登録します。登 録時には、すべてのデータが SOAP の複合型と同様に XML にシリアライズされます。 • Restore または RestoreObject を使用するとデータの値を取得できます。 • UnivarsalID を使用するか、登録されていない名前を使用してデータ値を参照しようとする と、実行時エラーおよび DataStoreError イベントが発生します。実行時エラーの発生時に は、次のエラーコードが示されます。 LSI_RTE_AdtPropertyError 218 プロパティのエラー (Error in a property) LSI_RTE_AdtMethodError 219 メソッドのエラー (Error in a method) • メモリは自動管理されます。 • オブジェクト参照変数がスコープ外になるとメモリは自動的に解放されます。 • 文書は自動的には削除されません。Remove サブルーチンを使用するか、クリーンアップ エージェントを設定する必要があります。 例 この例では、LsDataStore クラスオブジェクトを 1 つ作成し、データの格納とリストアを行い ます。 Class myWebService Private myDataStore As LsDataStore Private myInt As Integer Sub New() Set myDataStore = New LsDataStore("", "myData.nsf") End Sub Public Sub mySub1(unid as String_Holder) On Event DataStoreError From myDataStore Call DataStoreError myInt = 10 myDataStore.UnivarsalID = unid.value Call myDataStore.Store("myInt", myInt) unid.value = myDataStore.UnivarsalID End Sub Public Sub mySub2(unid as String_Holder) On Event DataStoreError From myDataStore Call DataStoreError myDataStore.UnivarsalID = unid.value myInt = myDataStore.Restore("myInt") End Sub End Class 参照 Store メンバーサブルーチン、Restore メンバー関数、UnivarsalID プロパティ (LsDataStore ク ラス)、FileName プロパティ (LsDataStore クラス)、FilePath プロパティ (LsDataStore クラス)、 DataStoreError イベント FileName プロパティ 読み取り専用です。拡張子を含み、パスを含まないデータベースの完全なファイル名です。 構文 myDataStore.FileName 要素 myDataStore LsDataStore クラスオブジェクトへの参照を含む変数です。 戻り値 拡張子を含み、パスを含まないデータベースの完全なファイル名です。 例 この例では、データベースのファイル名が表示されます。 Dim myDataStore as New LsDataStore("", "myData.nsf") Print myDataStore.FileName 参照 LsDataStore クラス FilePath プロパティ 読み取り専用です。データベースのパスおよびファイル名です。ファイル名は NSF 拡張子を 含みます。 構文 myDataStore.FilePath 要素 myDataStore LsDataStore クラスオブジェクトへの参照を含む変数です。 戻り値 データベースのパスおよびファイル名です。ファイル名は NSF 拡張子を含みます。 例 この例では、データベースのファイルパスが表示されます。 Dim myDataStore as New LsDataStore("", "myData.nsf") Print myDataStore.FilePath 参照 LsDataStore クラス UniversalID プロパティ 読み取り書き込み可能です。データベースの全複製内で文書を一意に識別するユニバーサル ID です。ユニバーサル ID は、文字形式では、16 進数字 (0 から 9、A から F) を組み合わせた 32 文字で表されます。ユニバーサル ID をユニーク ID または UNID とも呼びます。 構文 myDataStore.UniversalID 要素 myDataStore LsDataStore クラスオブジェクトへの参照を含む変数です。 戻り値 UniversalID です。 例 この例では、データベースのファイルパスが表示されます。 Dim myDataStore as New LsDataStore("", "myData.nsf") myDataStore.UnivarsalID = unid Call myDataStore.Store("myInt", myInt) unid = myDataStore.UnivarsalID 参照 LsDataStore クラス Store メンバーサブルーチン このサブルーチンは LsDataStore クラスによって提供されます。LsDataStore クラスオブジェク トに値 (値と名前の組み合わせ) を格納します。同じ名前が存在する場合は、その名前にあらか じめ関連付けられている値が上書きされます。Store メンバーサブルーチンを使用して登録した データは、名前で参照できます。UniversalID が NULL または "" の場合は、この UniversalID が更新されます。 構文 myDataStore.Store(ItemName, Value) 要素 myDataStore LsDataStore クラスオブジェクトへの参照を含む変数です。 ItemName クラスオブジェクトに追加する名前です。 Value クラスオブジェクトに追加する値です。 例 この例では、LsDataStore クラスオブジェクトを 1 つ作成し、Integer 型の値 1 つと Integer 配 列を格納します。 Dim myDataStore as New LsDataStore("", "myData.nsf") Dim myInt as Integer Dim myIntArray(2) as Integer myInt=123 myIntArray(0)=10 myIntArray(1)=20 myIntArray(2)=30 Call myDataStore.Store("myInt", myInt) Call myDataStore.Store("myIntArray", myIntArray) 参照 Restore メンバー関数、UniversalID プロパティ、LsDataStore クラス Restore メンバー関数 この関数は LsDataStore クラスによって提供されます。指定した値名のデータを戻します。 構文 myDataStore.Restore(valuename) 要素 myDataStore LsDataStore クラスオブジェクトへの参照を含む変数です。 valuename 取得するデータの値名です。 戻り値 Restore メンバー関数は、指定した値名に関連付けられたデータを Variant 型の値で戻します。 例 この例では、2 番目の位置に登録されたキーを取得します。 Dim myDataStore as New LsDataStore(Server, dbfile) Dim myInt as Integer Dim value As Variant myInt=123 Call myDataStore.Store("myInt", myInt) value = myDataStore.Restore("myInt") 参照 Store メンバーサブルーチン、UniversalID プロパティ、LsDataStore クラス LsDataStoreError イベント このイベントは LsDataStore クラスによって提供されます。このイベントは、LsDataStore クラ スオブジェクトで実行時エラーが起こると発生します。 構文 On Event LsDataStoreError From myDataStore Call handleName Sub handleName(source As LsDataStore, errno As Integer) 要素 myDataStore LsDataStore クラスオブジェクトへの参照を含む変数です。 handleName LsDataStoreError イベントが発生すると、イベント処理サブルーチンの名前を表す文字列 が設定されます。 source イベントが発生した LsDataStore クラスオブジェクトへの参照を含む変数です。 errno エラー番号です。 使用方法 このイベントを使用すると、LsDataStore クラスで発生した実行時エラーの詳細なエラー番号を 取得できます。エラー番号およびこれに関連するエラーメッセージは次のとおりです。 LSDATASTORE_ERR_INTERNAL 600 内部エラー (Internal error) LSDATASTORE_ERR_DATATYPE 601 データタイプのエラー (Data type error) LSDATASTORE_ERR_OVERFLOW 602 オーバーフロー (Overflow) LSDATASTORE_ERR_DBOPEN 603 データベースが存在しないか開けない (No database or cannot open) LSDATASTORE_ERR_NOTFOUND 604 指定した値名のデータが存在しない (No data for the specified value name) LSDATASTORE_ERR_INVALID 605 指定した UniversalID のデータが存在しない (No document for the specified UniversalID) LSDATASTORE_ERR_REMOVE 606 文書を削除できない (cannot delete document) 参照 LsDataStore クラス LsSharedStore クラス LsSharedStore クラスは、変数やオブジェクトを NSF で保持する機能を提供します。この機能に より、同じ LsSharedStore DB を使用するすべての関数とサブルーチンの間でデータを共用できま す。この機能により実質的にステートフルな SOAP が実現されます。 構文 構文 1 Dim myStore As New LsSharedStore(Server, dbfile) 構文 2 Dim myStore As LsSharedStore Set myStore = New LsSharedStore(Server, dbfile) 要素 myStore LsSharedStore クラスオブジェクトへの参照を含む変数です。 Server 文字列。データベースが配置されているサーバーの名前です。現在のコンピュータのデー タベースを指定する場合は空の文字列 ("") を使用します。空の文字列は、スクリプトがワ ークステーションで実行されるときはローカルデータベースを示し、スクリプトがサーバ ーで実行されるときはサーバー上のデータベースを示します。 dbfile 文字列。Lotus Notes または Lotus Domino のデータディレクトリにあるデータベースのパ スおよびファイル名です。データベースを後で開く場合は、dbfile$ と server$ の両方に空 の文字列を指定します。データベースが Lotus Notes データディレクトリに存在しない場 合は、絶対パス名を使用してください。 プロパティ FileName、FilePath メンバー関数 Restore メンバーサブルーチン Store イベント LsSharedStoreError 使用方法 • LsSharedStore クラスオブジェクトを 1 つ作成します。 • Store サブルーチンまたは StoreObject サブルーチンを使用して、データを登録します。登 録時には、すべてのデータが SOAP の複合型と同様に XML にシリアライズされます。 • Restore または RestoreObject を使用するとデータの値を取得できます。 • 登録されていない名前を使用してデータ値を参照しようとすると、実行時エラーおよび SharedStoreError イベントが発生します。実行時エラーの発生時には、次のエラーコードが 示されます。 LSI_RTE_AdtPropertyError 218 プロパティのエラー (Error in a property) LSI_RTE_AdtMethodError 219 メソッドのエラー (Error in a method) • メモリは自動管理されます。 • オブジェクト参照変数がスコープ外になるとメモリは自動的に解放されます。 例 この例では、LsSharedStore クラスオブジェクトを 1 つ作成し、データの格納とリストアを行 います。 Class myWebService Private mySharedStore As LsSharedStore Private myInt As Integer Sub New() Set mySharedStore = New LsSharedStore("", "myData.nsf") End Sub Public Sub mySub1() On Event SharedStoreError From mySharedStore Call SharedStoreError myInt = 10 Call mySharedStore.Store("myInt", myInt) End Sub Public Sub mySub2() On Event SharedStoreError From mySharedStore Call SharedStoreError myInt = mySharedStore.Restore("myInt") End Sub End Class 参照 Store メンバーサブルーチン、Restore メンバー関数、FileName プロパティ (LsSharedStore ク ラス)、FilePath プロパティ (LsSharedStore クラス)、SharedStoreError イベント FileName プロパティ 読み取り専用です。拡張子を含み、パスを含まないデータベースの完全なファイル名です。 構文 mySharedStore.FileName 要素 mySharedStore LsSharedStore クラスオブジェクトへの参照を含む変数です。 戻り値 拡張子を含み、パスを含まないデータベースの完全なファイル名です。 例 この例では、データベースのファイル名が表示されます。 Dim mySharedStore as New LsSharedStore("", "myData.nsf") Print mySharedStore.FileName 参照 LsSharedStore クラス FilePath プロパティ 読み取り専用です。データベースのパスおよびファイル名です。ファイル名は NSF 拡張子を 含みます。 構文 mySharedStore.FilePath 要素 mySharedStore LsSharedStore クラスオブジェクトへの参照を含む変数です。 戻り値 データベースのパスおよびファイル名です。ファイル名は NSF 拡張子を含みます。 例 この例では、データベースのファイルパスが表示されます。 Dim mySharedStore as New LsSharedStore("", "myData.nsf") Print mySharedStore.FilePath 参照 LsSharedStore クラス Store メンバーサブルーチン このサブルーチンは LsSharedStore クラスによって提供されます。LsSharedStore クラスオブジ ェクトに値 (値と名前の組み合わせ) を格納します。同じ名前が存在する場合は、その名前にあ らかじめ関連付けられている値が上書きされます。Store メンバーサブルーチンを使用して登録 したデータは、名前で参照できます。UniversalID が NULL または "" の場合は、この UniversalID が更新されます。 構文 mySharedStore.Store(ItemName, Value) 要素 mySharedStore LsSharedStore クラスオブジェクトへの参照を含む変数です。 ItemName クラスオブジェクトに追加する名前です。 Value クラスオブジェクトに追加する値です。 例 この例では、LsSharedStore クラスオブジェクトを 1 つ作成し、Integer 型の値 1 つと Integer 配列を格納します。 Dim mySharedStore as New LsSharedStore("", "myData.nsf") Dim myInt as Integer Dim myIntArray(2) as Integer myInt=123 myIntArray(0)=10 myIntArray(1)=20 myIntArray(2)=30 Call mySharedStore.Store("myInt", myInt) Call mySharedStore.Store("myIntArray", myIntArray) 参照 Restore メンバー関数、UniversalID プロパティ、LsSharedStore クラス Restore メンバー関数 この関数は LsSharedStore クラスによって提供されます。指定した値名のデータを戻します。 構文 mySharedStore.Restore(valuename) 要素 mySharedStore LsSharedStore クラスオブジェクトへの参照を含む変数です。 valuename 取得するデータの値名です。 戻り値 Restore メンバー関数は、指定した値名に関連付けられたデータを Variant 型の値で戻します。 例 この例では、2 番目の位置に登録されたキーを取得します。 Dim mySharedStore as New SsList Dim myInt as Integer Dim value As Variant myInt=123 Call mySharedStore.Store("myInt", myInt) value = mySharedStore.Restore("myInt") 参照 Store メンバーサブルーチン、UniversalID プロパティ、LsSharedStore クラス LsSharedStoreError イベント このイベントは LsSharedStore クラスによって提供されます。このイベントは、LsSharedStore ク ラスオブジェクトで実行時エラーが起こると発生します。 構文 On Event LsSharedStoreError From mySharedStore Call handleName Sub handleName(source As LsSharedStore, errno As Integer) 要素 mySharedStore LsSharedStore クラスオブジェクトへの参照を含む変数です。 handleName LsSharedStoreError イベントが発生すると、イベント処理サブルーチンの名前を表す文字列 が設定されます。 source イベントが発生した LsSharedStore クラスオブジェクトへの参照を含む変数です。 errno エラー番号です。 使用方法 このイベントを使用すると、LsSharedStore クラスで発生した実行時エラーの詳細なエラー番号 を取得できます。エラー番号およびこれに関連するエラーメッセージは次のとおりです。 LSSHAREDSTORE_ERR_INTERNAL 600 内部エラー (Internal error) LSSHAREDSTORE_ERR_DATATYPE 601 データタイプのエラー (Data type error) LSSHAREDSTORE_ERR_OVERFLOW 602 オーバーフロー (Overflow) LSSHAREDSTORE_ERR_DBOPEN 603 データベースが存在しないか開けない (No database or cannot open) LSSHAREDSTORE_ERR_NOTFOUND 604 指定した値名のデータが存在しない (No data for the specified value name) LSSHAREDSTORE_ERR_REMOVE 605 文書を削除できない (cannot delete document) 参照 LsSharedStore クラス ESB 移行テンプレート ESB 移行テンプレートを使用すると、LsDataStore クラスを使用して作成した文書をクリーンア ップできます。このテンプレートには、管理プロファイルとクリーンアップエージェントがあり ます。LsDataStore クラスでは、ユーザーの要求に従って文書が新規作成されるため、クリーンア ップエージェントがないとディスクスペースが満杯になる可能性があります。 使用方法 • LsStore.NTF から LsStore データベースを作成します。 • データベースを開き、[プロファイル] アクションボタンをクリックします。 • [文書キャッシュのタイムアウト (Document Cash Time Out)] フィールドを設定します。 最後のアクセスから、[分] フィールドの値だけ経過した文書はエージェントにより削除さ れます。 • CleanUpDocument エージェントをスケジュールします。CleanUpDocument エージェントは、 LsDataStore クラスによって作成された文書を削除します。 • 例 • [文書キャッシュのタイムアウト (Document Cash Time Out)] に 60 分を設定します。 • [CleanUpDocument エージェントの実行 (Run CleanUpDocument agent)] に 1 時間ごとを設 定します。 • 1 時間アクセスのなかった文書が、CleanUpDocument エージェントにより削除されます。 SsList クラス SsList タイプは LotusScript リストタイプのスーパーセットです。SsList タイプでは、キーと値 の組み合わせでデータを保持します。リストタイプと異なり、すべてのデータタイプをキーに使 用できます。キーに使用できるデータタイプを以下にリストします。Integer、Long、Single、Double、 Variable-length string、Fixed-length string、Currency。 次のようなデータタイプを値に使用できます。Integer、Long、Single、Double、Variable-length string、 Fixed-length string、Currency、empty、NULL、および Date/Time。 構文 構文 1 Dim myList As New SsList() 構文 2 Dim myList As SsList Set myList = New SsList() 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 プロパティ Count、KeyType メンバー関数 FindByKey、GetKey、GetValue、IndexOf、IndexOfKey メンバーサブルーチン Add、AddByKey、ClearAll、Del、DelByKey、SetValue イベント ListError 使用方法 • SsList クラスオブジェクトを 1 つ作成します。 • Add サブルーチンまたは AddByKey サブルーチンを使用して、データを登録します。デ ータが登録されると、すべてのデータがキーによって自動で昇順にソートされ、ゼロから 始まるインデックス番号が自動的に割り当てられます。 • キーまたはインデックスを使用してデータの値を取得できます。 • 登録されていないインデックスまたはキーを使用してデータ値を参照しようとするか、イ ンデックスがオーバーフローすると、実行時エラーおよび ListError イベントが発生しま す。実行時エラー発生時のエラーコードは次のとおりです。 LSI_RTE_AdtPropertyError 218 プロパティのエラー (Error in a property) LSI_RTE_AdtMethodError 219 メソッドのエラー (Error in a method) • メモリは自動管理されます。 • オブジェクト参照変数がスコープ外になるとメモリは自動的に解放されます。 例 この例では、SsList クラスオブジェクトを 1 つ作成し、データを追加します。 Dim myList As SsList Set myList = New SsList On Event ListError From myList Call ListError Call myList.Add(1) Call myList.AddByKey("abc", 2) 参照 Add メンバーサブルーチン、AddByKey メンバーサブルーチン、ClearAll メンバーサブルーチ ン、Count プロパティ、Del メンバーサブルーチン、DelByKey メンバーサブルーチン、 FindByKey メンバー関数、GetKey メンバー関数、GetValue メンバー関数 (SsList クラス)、 IndexOf メンバー関数、IndexOfKey メンバー関数、KeyType プロパティ、ListError イベント、 SetValue メンバーサブルーチン (SsList クラス) Add メンバーサブルーチン このサブルーチンは SsList クラスによって提供されます。SsList クラスオブジェクトに値を追 加します。キーには NULL が設定されます。したがって、Add メンバーサブルーチンを使用 して登録したデータは、インデックスで参照する必要があります。 構文 myList.Add(Value) 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 Value クラスオブジェクトに追加する値です。 例 この例では、SsList クラスオブジェクトを 1 つ作成し、Integer 型の値を 1 つ追加します。 Dim myList as New SsList Dim myInt as Integer myInt=123 myList.add(myInt) 参照 Del メンバーサブルーチン、GetValue メンバー関数 (SsList クラス)、SetValue メンバーサブル ーチン (SsList クラス)、SsList クラス AddByKey メンバーサブルーチン このサブルーチンは SsList クラスによって提供されます。SsList クラスオブジェクトにデータ (キーと値の組み合わせ) を追加します。同じキーが存在する場合は、そのキーにあらかじめ関 連付けられている値が上書きされます。AddByKey メンバーサブルーチンにより登録したデー タは、キーまたはインデックスのどちらかを使用して参照できます。 キーのデータタイプは、登録した最初のキーにより決定されます。異なるデータタイプのキー を登録しようとすると、実行時エラーが発生します。 構文 myList.AddByKey(key, value) 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 key クラスオブジェクトに追加するキーです。 value クラスオブジェクトに追加する値です。 例 この例では、SsList クラスオブジェクトを 1 つ作成し、Double 型のキーと String 型の値を 1 つずつ追加します。 Dim myList as New SsList Dim myDbl as Double Dim myStr as String myDbl=123.45 myStr="ABC" Call myList.addByKey(myDbl, myStr) 参照 DelByKey メンバーサブルーチン、FindByKey メンバー関数、GetKey メンバー関数、IndexOfKey メンバー関数、SsList クラス ClearAll メンバーサブルーチン このサブルーチンは SsList クラスによって提供されます。SsList クラスオブジェクトにより登 録された、すべてのデータを削除します。 構文 myList.ClearAll() 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 例 この例では、SsList クラスオブジェクトを使用して登録したすべてのデータを削除します。 Dim myList as New SsList myList.Add(1) myList.AddByKey("ABC",2) myList.ClearAll() 参照 SsList クラス Count プロパティ このプロパティは SsList クラス、および SsSharedStorage クラスによって提供されます。これ には、クラスオブジェクトに格納されているデータ項目 (キーと値の組み合わせ) の数が含ま れます。このプロパティは参照専用です。値を変更しようとすると実行時エラーが発生します。 構文 myList.Count 要素 myList SsList クラスオブジェクトまたは SsSharedStorage クラスオブジェクトへの参照を含む変 数です。 戻り値 クラスオブジェクトで保持しているデータ項目の数です。 例 この例では、SsList クラスオブジェクトの保持しているデータ項目の数が表示されます。 Dim myList as New SsList Call myList.Add(1) Call myList.AddByKey("ABC",2) Print "Count: " & myList.Count 参照 SsList クラス Del メンバーサブルーチン このサブルーチンは SsList クラスによって提供されます。指定したインデックスに関連付けら れたデータを SsList クラスオブジェクトから削除します。以降のインデックスは自動で繰り上 げられます。 構文 myList.Del(index) 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 index 削除するデータのインデックスです。 例 この例では、値が 1.2 のデータのインデックスを取得して削除します。 Dim myList as New SsList Dim index As Long myList.Add(1.2) myList.AddByKey("ABC",3.4) index=myList.IndexOf(1.2) Call myList.Del(index) 参照 Add メンバーサブルーチン、AddByKey メンバーサブルーチン、SsList クラス DelByKey メンバーサブルーチン このサブルーチンは SsList クラスによって提供されます。指定のキーに関連付けられたデータ を SsList クラスオブジェクトから削除します。以降のインデックスは自動で繰り上げられます。 構文 myList.DelByKey(key) 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 key 削除するデータのキーです。 例 この例では、キーが「ABC」のデータを削除します。 Dim myList as New SsList Call myList.AddByKey("ABC",1) Call myList.AddByKey("DEF",2) Call myList.DelByKey("ABC") 参照 AddByKey メンバーサブルーチン、SsList クラス FindByKey メンバー関数 この関数は SsList クラスによって提供されます。指定したキーに関連付けられた値を取得しま す。 構文 myList.FindByKey(key) 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 key 取得する値に関連付けられたキーです。 戻り値 FindByKey メンバー関数は、指定したキーに関連付けられた値を Variant 型の値で戻します。 例 この例では、キー「ABC」に関連付けられた値を取得します。 Dim myList as New SsList Dim value As Variant Call myList.AddByKey("ABC",1) Call myList.AddByKey("DEF",2) value=myList.FindByKey("ABC") 参照 AddByKey メンバーサブルーチン、GetValue メンバー関数、SsList クラス GetKey メンバー関数 この関数は SsList クラスによって提供されます。指定したインデックスのキーを戻します。 構文 myList.GetKey(index) 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 index 取得するキーのインデックスです。 戻り値 GetKey メンバー関数は、指定したインデックスに関連付けられたキーを Variant 型の値で戻し ます。 例 この例では、2 番目の位置に登録されたキーを取得します。 Dim myList as New SsList Dim myKey As Variant Call myList.AddByKey("ABC",1) Call myList.AddByKey("DEF",2) myKey=myList.GetKey(2) 参照 GetValue メンバー関数、SsList クラス GetValue メンバー関数 この関数は SsList クラスによって提供されます。指定したインデックスに関連付けられた値を 戻します。 構文 myList.GetValue(key) 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 key このインデックスに関連付けられた値を取得します。 戻り値 GetValue メンバー関数は、指定したインデックスに関連付けられた値を Variant 型の値で戻し ます。インデックスが見つからない場合は実行時エラーが発生します。 例 この例では、値「DEF」に関連付けられた値を取得します。 Dim myList as New SsList Dim value As Variant Call myList.AddByKey("ABC",1) Call myList.AddByKey("DEF",2) value=myList.GetValue("DEF") 参照 GetKey メンバー関数、SetValue メンバーサブルーチン (SsList クラス)、SsList クラス IndexOf メンバー関数 この関数は SsList クラスによって提供されます。指定の値を持つインデックスを戻します。指 定の値を持つインデックスが複数存在する場合は、最小のインデックスを戻します。 構文 myList.IndexOf(value) 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 value 取得するインデックスのデータ値です。 戻り値 IndexOf メンバー関数は、指定した値を検索します。一致する値が存在すると、そのインデッ クスを Long 型の値で戻します。存在しない場合は、-1 を戻します。 例 この例では、指定した値 2 を持つインデックスを取得します。 Dim myList as New SsList Dim index As Long Call myList.AddByKey("ABC",1) Call myList.AddByKey("DEF",2) index=myList.IndexOf(2) 参照 Add メンバーサブルーチン、AddByKey メンバーサブルーチン、GetValue メンバー関数、 IndexOfKey メンバー関数、SsList クラス IndexOfKey メンバー関数 この関数は SsList クラスによって提供されます。指定のキーを持つインデックスを戻します。 構文 myList.IndexOfKey(key) 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 key 取得するインデックスのキー値です。 戻り値 IndexOfKey メンバー関数は、指定したキーを検索します。一致するキーが存在すると、そのイ ンデックスを Long 型の値で戻します。存在しない場合は、-1 を戻します。 例 この例では、指定したキー「ABC」が含まれるインデックスを取得します。 Dim myList as New SsList Dim index As Long Call myList.AddByKey("ABC",1) Call myList.AddByKey("DEF",2) index=myList.IndexOfKey("ABC") 参照 AddByKey メンバーサブルーチン、GetKey メンバー関数、SsList クラス KeyType プロパティ このプロパティは SsList クラスによって提供されます。SsList クラスオブジェクトのキーのデ ータタイプを戻します。キーのデータタイプは、登録した最初のキーにより決定されます。こ のプロパティは参照専用です。値を変更しようとすると実行時エラーが発生します。 構文 myList.KeyType 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 戻り値 SsList クラスオブジェクトのキーのデータタイプです。 例 この例では、SsList クラスオブジェクトのキーのデータタイプが表示されます。 Dim myList as New SsList Call myList.AddByKey("ABC",1) Print "Key Type: " & Cstr(myList.KeyType) 参照 SsList クラス ListError イベント このイベントは SsList クラスによって提供されます。このイベントは、SsList クラスオブジェ クトで実行時エラーが起こると発生します。 構文 On Event ListError From myList Call handleName Sub handleName(source As SsList, errno As Integer) 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 handleName ListError イベントが発生すると、イベント処理サブルーチンの名前を表す文字列が設定さ れます。 source イベントが発生した SsList クラスオブジェクトへの参照を含む変数です。 errno エラー番号です。 使用方法 このイベントを使用すると、SsList クラスで発生した実行時エラーの詳細なエラー番号を取得 できます。エラー番号およびこれに関連するエラーメッセージは次のとおりです。 SSLIST_ERR_DATATYPE 500 データタイプが一致しない (The data types do not match) SSLIST_ERR_OVERFLOW 501 インデックスオーバーフロー (Index overflow) SSLIST_ERR_OUTOFRANGE 502 指定したインデックスのデータが存在しない (No data for the specified index) SSLIST_ERR_NOTFOUND 503 対応するキーが存在しない (No corresponding key) 参照 SsList クラス SetValue メンバーサブルーチン このサブルーチンは SsList クラスによって提供されます。指定したインデックスに格納されて いるデータ値を変更します。 構文 myList.SetValue(index, value) 要素 myList SsList クラスオブジェクトへの参照を含む変数です。 index 変更するデータ値のインデックスです。 value 古い値を置換するデータ値です。 例 この例では、キー「DEF」が含まれるデータ値を変更します。 Dim myList as New SsList Dim index as Long Call myList.AddByKey("ABC",1) Call myList.AddByKey("DEF",2) index = myList.IndexOf("DEF") Call myList.SetValue(index,3) 参照 GetValue メンバー関数 (SsList クラス)、SsList クラス