Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

VisM.ocx コントロールの詳細

この章では、Caché Direct ActiveX コントロール (VisM.ocx) に関する参考情報について説明します。以下のトピックについて説明します。

このコントロールは、後述する章で説明する C++ クラスのラッパです。

VisM 拡張接続文字列の構文

Server プロパティ、Connect() メソッド、および SetServer() メソッドはすべて接続文字列を使用します。接続文字列は、コロンを区切り文字として使用する、分割化された文字列です。通常、形式は次のとおりです (詳細は、"接続文字列と接続タグ" で説明しています)。

"CN_IPTCP:server[port]"

この引数の最初にある CN_IPTCP は接続メソッドで、必ず TCP です。2 つ目は Caché スーパーサーバが稼動しているサーバの名前、または IP アドレスとポートです。例えば、VisM1 という VisM の接続を設定するには、次の構文を使用します。

VisM1.Server = "CN_IPTCP:127.0.0.1[57772]"

実行時の接続文字列の形式

これまでの経緯から、接続文字列は、実行時に異なる形式をとる場合があります。具体的に言うと、接続しているときの接続文字列は奇数個の部分に分割されています。これは、以下のように、Caché Direct により、スーパーサーバ情報の後に 3 つ目の部分が挿入されるためです。

"CN_IPTCP:server[port]:slaveserver[port]"

この 3 つ目の部分は、接続先のスレーブ・サーバを表します。これはマスタ・サーバの部分の形式と同じです。現在、接続されていない場合、このプロパティは空です。

ユーザ名およびパスワードには、接続文字列内で区切り文字として使用されている文字を使用できません。これには、コロン (":"$Piece の区切り文字) と角括弧 ("[" および "]"、ポート番号の区切りに使用される) が含まれます。

その他の接続文字列の形式

接続文字列にはユーザ名とパスワードが含まれることがあります。これらは Caché Direct ログイン・オプションを有効化している場合にのみ使用されます。このログイン・オプションは Caché セキュリティでは廃止されているので、ここで言及するだけでマニュアルでは説明していません。

Caution:

この形式の使用は、お勧めしません。接続文字列にパスワードが含まれている場合、Caché はどのような単純な攻撃でもその影響を受けやすくなります。

接続文字列は、以下のようにユーザ名と暗号化されたパスワードを含むことがあります。

"CN_IPTCP:server[port]:username:password"

この場合、接続されていると、実行時の接続文字列は次の形式になります。

"CN_IPTCP:server[port]:slaveserver[port]:username:password"

接続文字列は、以下のようにユーザ名と暗号化されたパスワードを含むことができます。Caché では、暗号化されていない形式のパスワードが必要ですので、バージョン 5.2 以降のサーバに接続している場合は注意してください。

"CN_IPTCP:server[port]:username:@password"

この場合、接続されていると、実行時の接続文字列は次の形式になります。

"CN_IPTCP:server[port]:slaveserver[port]:username:@password"
Note:

クライアントが 5.2 以降の場合、必要に応じて、Kerberos 検証用に Windows 認証情報 (ユーザ名とパスワード) が自動的に使用されます (Kerberos 認証を使用する接続の詳細は、"間接参照を使用した接続" を参照してください)。これは、Caché Direct ログインを補足するものです (Direct ログインに代わるものではありません)。Caché セキュリティがオンになっていない場合、Caché Direct は Kerberos チェックを省略しますが、ユーザ名とパスワードが指定されていれば、これを渡します。その後、サーバはサーバ側でオンに設定されている操作を行います。

VisM プロパティ

VisM コントロールには、サーバでミラーリングされる一連のプロパティと、その他のプロパティがあります。

ミラーリングされた VisM プロパティ

"VisM コントロールの基本" の章にある "ミラーリングされたプロパティ" で説明されているとおり、Caché Direct は、クライアントとサーバの間である特定の VisM プロパティの値をミラーリングします。

これらのプロパティを片方向通信に使用する場合で、特にサイズが大きい場合には、サーバから値を返す前にクリアします。そうしないと、通信リソースは、アプリケーションにより浪費されてしまいます。詳細は、"最善の使用方法" の章を確認してください。クライアントによりサーバに送信されるその他のプロパティすべてと同様に、その値に使用できるのは、テキスト文字のみです。前述の章の Unicode とロケールの問題 のセクションを参照してください。

P0、P1、P2、P3、P4、P5、P6、P7、P8、P9

これらのプロパティは、クライアントとサーバでミラーリングされます。クライアントでは、VisM コントロールのプロパティとして表示されます。また、サーバでは、ローカル変数として表示され、クライアントにある対応するプロパティと同じ値を持ちます。

PLIST

このプロパティのミラーリング方法は、クライアントとサーバで異なります。クライアントと Caché では、配列の表現方法が異なるため、Caché Direct はこのプロパティを使用して、サーバとクライアントの間で配列のような値を受け渡します。このプロパティは、クライアントとサーバでは形式が異なります。詳細は、"VisM コントロールの基本" の章にある "PLIST の使用" のセクションを参照してください。

VALUE

このプロパティは、P0P1 などと同じ方法で、クライアントとサーバでミラーリングされますが、Code プロパティの値がドル記号または等号で始まっている場合、サーバにより、Code プロパティの先頭に “Set VALUE” または “Set VALUE =” が追加されます。つまり、このような場合、結果は VALUE プロパティに返されます。

その他の VisM プロパティ

このセクションでは、その他の VisM プロパティ (ミラーリングされないプロパティ) を一覧表示します。一部のプロパティは、サーバに送信されないので注意してください。

Code

実行のためにサーバに送信される ObjectScript コードの行が含まれます。クライアントによりサーバに送信される他のすべてのプロパティと同様に、この文字列に使用できるのは、テキスト文字のみです。Unicode とロケールの問題 のセクションを参照してください。

ConnectionState

このプロパティは、常に、接続の状態を表しています。これは、キープ・アライブ機能と共に使用され、クライアントで通信エラーが発生しているかどうか、発生している場合は、いつ接続が切断されたかをアプリケーションに通知します。

ConnectionState が 0 の場合、接続には問題がないか、切断が正常に行われています。このプロパティの値が 0 以外の場合、サーバから切断された時刻 (午前 0 時からの経過秒数) を表しています (これは $Horolog の秒部分と同じです。日付は示されませんが、最新であると見なされます)。このプロパティは長整数型です。

ConnTag

実行時のみ。この VisM が接続されている CDConnect のタグを表します。このプロパティを変更すると、接続が変更されるのではなく、関連する CDConnect 自体のタグが変更されます。このプロパティは主に情報提供を目的としています。ただし、このプロパティが空の文字列である場合、接続されていないか、接続はされていてもタグは関連付けられていません。

ElapsedTime

最後のメッセージを処理するのに Caché Direct が要した時間を表します。これは、クライアントがメッセージを送信してから、応答を受信するまでにかかった時間です。実行時、このプロパティは読み取り専用です。

Error

エラー番号が含まれます。0 の場合、エラーは発生していません。実行時、このプロパティは読み取り専用です。次の ErrorName プロパティの説明を参照してください。

ErrorName

発生したエラーを説明する文字列。空の場合、エラーは発生していません。実行時、このプロパティは読み取り専用です。

Error および ErrorName プロパティは、サーバ呼び出し後に、必ず設定されます。呼び出しが正常に行われた場合、Error は 0 に設定され、ErrorName はクリアされます。サーバからエラーが報告された場合、エラー番号が Error に、簡単な説明が ErrorName に設定されます。これらのエラーには、必ずしも明確な特徴や説明が含まれているとは限りませんが、それでも、アプリケーションのクライアント部分を使用して、何らかのエラーが発生しており、対応が必要であることをユーザに通知できます。

このレベルで報告されるエラーは、サーバから通知されるもので、通常は <SYNTAX> や <UNDEFINED> のようなプログラミング・エラーであることに注意してください。アプリケーション・コードから通知された論理エラーや矛盾などのエラーは、アプリケーションがその結果に入れて報告する必要があります。サーバには、アプリケーションが Error および ErrorName プロパティを通じて、エラー状態を返せるようにする機能があります。

ErrorTrap

通信エラーの処理を制御します。Caché Direct アプリケーションで発生する可能性のあるエラーには、通信プロセス自体で発生するエラーと、アプリケーションで発生し、クライアントに報告されるエラーの 2 種類があります。

  • アプリケーション・エラーは、常に、Error および ErrorName プロパティ、および OnError イベントを通じて報告されます。

  • 通信エラーの報告方法は、ErrorTrap の値によって異なります。ErrorTrap が False の場合、通信エラーはメッセージ・ボックスにより処理され、問題のユーザに警告が伝えられます。ErrorTrap が True の場合、通信エラーは Error および ErrorName プロパティ、および OnError イベントを通じて報告されます。その後、ユーザの選択した方法で、アプリケーションによりエラーが処理されます。

これまでの経緯から、ErrorTrap の既定値は False です。通常、VisM から Caché に接続する前に、ErrorTrap を True に設定してください。

これが問題になるのは、アプリケーションがユーザなしに実行されている場合、またはこのようなエラーがアプリケーションによって自動的に処理される場合のみです。

ExecFlag

Code プロパティのコードの行をいつ実行するかを制御するスイッチです。既定値は 0 で、これはクライアントがアイドル状態で、サーバにメッセージを送信していないことを表します。可能な値:

  • ExecFlag が 1 に設定されるとすぐ、サーバは Code プロパティ内のコードの行を (P0 ~ P9、VALUE、PLIST プロパティのコンテキストで) 一度実行します。実行を終了したサーバは、ExecFlag を 0 にリセットします (この設定より、Execute() メソッドのほうがはるかに便利である可能性があります)。

  • ExecFlag が 2 に設定されている場合、“参照時の実行” を意味します。つまり、VALUE プロパティへの参照の前に必ずサーバへの自動呼出しが行われ、Code プロパティ内のコードが実行されます。これは、Code プロパティがサーバ上にある何かの現在状態を表す式であり、必要なときにこの式を繰り返し実行したい場合に役立ちます。例えば、Code プロパティが "=$$GetNext^mydata" である場合、次の Visual Basic コードを使用して、サーバからデータの配列を取得することができます。

    For i = 1 to 1000 array(I) = VisM1.VALUE Next i
    
  • ExecFlag が 3 に設定されている場合、“間隔タイマ作動時の実行” を意味します。この場合、タイマ (Interval プロパティにより間隔が設定されているもの) が作動すると、Code が実行されます。

通常、タイマ・オプションは、定期的に何かを実行するために使用します。1 つの実行に対して応答するには Executed イベントを使用します。タイマ・オプションを使用する手順は次のとおりです。

  1. ExecFlag を 0 に設定します。

  2. すべての該当するミラーリングされたプロパティ、および Interval プロパティに値を設定します。

  3. 次に、ExecFlag に 3 を設定して、タイマをオンにします。

サーバとの通信はすべて同期的であることに注意してください。クライアントは、現在のメッセージに対する応答を受信してから、次のメッセージを送信する必要があります。タイマを使用すると、クライアントにより、非同期的にメッセージの送信が試みられることがあります。例えば、タイマにより生成されたメッセージの処理中に、メッセージを生成する操作をユーザが実行することがあります。この場合、クライアントには “nonsynchronous message” エラーが返され、メッセージは送信されません。

Interval

Code プロパティの自動実行の間隔で、単位はミリ秒です。既定値は 1000 ミリ秒 (1 秒) です。詳細は、ExecFlag プロパティの値 3 を参照してください。

KeepAliveInterval

クライアントから送信される自動キープ・アライブ・メッセージの間隔を整数の秒単位で指定します。これらのメッセージは、クライアントがアイドル状態で、間隔に指定された時間が経過した場合に常に送信されます。

KeepAliveTimeOut

サーバへのキープ・アライブ・メッセージの送信後に、クライアントがサーバからの応答を待機する時間を指定します。

LogMask

クライアント側でのデバッグに使用します。これは 32 ビットの整数プロパティで、各ビットは、具体的なログの種類に対するフラグとして割り当てられています。 プロセスの実行中にログがオンになっている場合はいつでも、実行可能ファイルが実行されているディレクトリにテキスト・ログ・ファイルが作成されます。このファイルの名前は CDxxx.log で、xxx は次に使用可能な連続番号を表します。先頭の番号は 000 です (したがって、初めてログを作成したときのファイル名は CD000.log になります)。プロセスが終了すると、ログは閉じられます。

クライアント側のログを有効化するには、このプロパティの値を 2,147,483,647 (231 – 1) に設定して、すべてのビットをオンにします。Visual Basic では、&H7FFFFFFF を使用します。これは、同じ数値を 16 進数で表したものです。ログをオフにするには、この値に 0 を設定します。

ログの内容の解釈は InterSystems の担当者に任せるのが最善ですが、この内容には VisM で起こったことの大半のトレースと、サーバとの間で送受信されたメッセージすべてのフル・ダンプが含まれています。情報が少なすぎる場合よりも、多すぎる場合のほうが失敗する傾向にあります。必要な場合、実際に何が起きたのかをリアルタイムに記録したものとして、ログは非常に役に立ちます。

MServer

目的は Server プロパティと同じで、このプロパティに設定できる値のいずれかに設定できます。このプロパティは下位互換性のためにのみ提供されているので、新しいアプリケーションでは使用しないでください。詳細は、付録 "以前のバージョンをお使いの方へのご注意" を参照してください。

MsgText

ユーザにキャンセルするかどうかを確認するときに表示されるメッセージを表す文字列で、4 つの部分に分割されています (PromptInterval プロパティを参照)。このプロパティは次の形式を持つ文字列です。

"prompt_message|title_text|OK_button_text|Cancel_button_text"

表示されるメッセージ・ダイアログ・ボックスにはウィンドウ・タイトル (title_text で指定されたもの) と、長いメッセージ (prompt_message で指定されたもの) があります。また、このダイアログ・ボックスにはテキスト・ラベルの付いた 2 つのボタンが表示されます。

  • OK_button_text というラベルの付いたボタンをクリックすると、このダイアログ・ボックスは閉じられ、クエリは中断されません。

  • Cancel_button_text というラベルの付いたボタンをクリックすると、このダイアログ・ボックスは閉じられ、クエリが中断されます。

このプロパティの既定値は次のとおりです。

"This may take a while. Do you wish to wait?|
Communications|Wait for Reply|Cancel Wait"

このプロパティを設定する場合、どの部分でも省略できます。クライアントでは、文字列で省略された部分、または長さ 0 の文字列が設定された部分に対して既定値が使用されます。

Namespace

アプリケーション・コードにより参照されるルーチンやグローバルのネームスペース・コンテキストを作成します。既定値は空の文字列です。この場合、ルーチンやグローバルは、サーバが実行されているネームスペースで参照されます。実行メッセージがサーバに到着したときに、NameSpace プロパティが空ではなく、現在のネームスペースとは異なる場合、ネームスペースは指定どおりに変更されます。これはコードの実行前に行われます。

ネームスペースを変更するには多大なコストがかかることを覚えておいてください。詳細は、"最善の使用方法" を参照してください。

PDELIM

PLIST プロパティで使用される区切り文字列。詳細は、ミラーリングされた VisM プロパティ のセクションを参照してください。これは実行時に読み取り/書き込みが行われます。つまり、設計時には設定できません。これまでの経緯から、既定値は $C(13,10) という文字列となります。空の文字列が設定されている場合、事実上、区切り文字はなく、PLIST は単一の要素と解釈されます。ただし、このプロパティはサーバに送信されません。

PromptInterval

待機時間を秒単位 (ミリ秒ではありません) で指定します。この時間の経過後、さらに待機するか、操作 (通常は、時間のかかるクエリ) をキャンセルするかをユーザに尋ねるプロンプトが表示されます。このプロンプトが表示されるのは、サーバがまだ応答していない場合のみです。このプロンプトは、さらに応答を待つか、操作をキャンセルするかを選択するためのオプションをユーザに提供します。MsgText プロパティは、この場合に表示されるメッセージの内容を表します。このプロパティが 0 または負の値の場合、プロンプトは表示されません。既定値は 0 です。

Server

このプロパティの用途は 2 つあります。

  • 特定のサーバに接続する場合、または現在接続されているサーバから切断する場合には、このプロパティを設定します。

  • 実行時に、このプロパティを取得して、クライアントの接続先サーバを確認することができます。この場合、プロパティの値は多少異なる形式を持ちます。

このプロパティに接続文字列、接続タグ、二重引用符で囲まれた疑問符、または空の文字列を設定できます。接続文字列の詳細は、この章前半の "VisM 接続文字列" のセクションを参照してください。

Server プロパティを設定することは、SetServer() メソッドの呼び出しと同じ効果があります。詳細は、この章後半の "接続メソッドの比較" のセクションを参照してください。

Tag

Caché Direct では使用されません。このプロパティは、Microsoft Visual Basic 規約との互換性のために用意されています。これは任意の方法で使用できます。

TimeOut

クライアントがサーバからの応答を待機する時間 (ミリ秒) を表す整数値。これは、TCP 経由でメッセージが送信された直後から、Windows からデータの受信が報告されるまでの時間です。タイマが作動すると、つまり、許容時間内に応答が受信されなかった場合、接続は切断されます。これにより、通常はサーバで TCP エラーが発生し、サーバがシャットダウンされます。クライアントは、処理可能なエラー状態で、制御を取り戻します。アプリケーションが処理の続行を求める場合は、新しい CDConnect を作成する必要があります。これにより、新たにスレーブ・サーバ・ジョブが作成されます。このジョブはグローバルにはアクセスできますが、古いサーバ・ジョブのローカル状態には一切アクセスできません。

このプロパティが負の数または 0 である場合、クライアントは永久にメッセージが返されるのを待ちます。既定値は 60000 (60 秒) です。

VisM メソッド

VisM コントロールには、次のメソッドが用意されています。

Connect

この VisM を指定された Caché サーバに接続し、必要に応じて、新しい CDConnect を作成します。以下の構文のいずれかを使用します。

Connect(connection_string, tag)
Connect(connection_string)
Connect("?", tag)
Connect("?")
Connect(tag)
Connect("")

connection_string CN_IPTCP:server_name[port] という形式の文字列。ここで、server_name は Caché が実行されているマシンの DNS 名または IP アドレス、port は Caché スーパーサーバが使用しているポートです。この章の前半にある VisM 接続文字列 も参照してください。
tag 新しく作成された CDConnect オブジェクトの名前となるオプションの文字列。指定されたクライアント・プロセス内で、常にタグの名前が重複しないことを確認するのは、ユーザの責任です。
"" この場合、VisM は (該当する場合は、最初の切断後)、最後に開かれた CDConnect に接続します。元の CDConnect は変更されません。

動作の詳細は、サブセクション "接続メソッドの比較" を参照してください。

DeleteConnection

この VisM に接続されている CDConnect から切断し、これを破棄して、サーバ・ジョブをシャットダウンします。

Execute

このメソッドは、Code プロパティを設定し、サーバを呼び出すための近道です。これは、Code プロパティを保存し、Code プロパティに Execute メソッドへの引数を設定し、実行されるように ExecFlag プロパティを 1 に設定してから、Code プロパティを呼び出し前の状態に戻すこととまったく同じです。OnError および Executed イベントのエラー・トラップや実行はすべて、同じ方法で行われます。

LoadRtnFromFile

廃止されました。使用しません。

LoadGblFromFile

廃止されました。使用しません。

SetMServer

目的は SetServer() メソッドと同じです。このメソッドは下位互換性のためにのみ提供されているので、新しいアプリケーションでは使用しないでください。詳細は、付録 "以前のバージョンをお使いの方へのご注意" を参照してください。

SetServer

この VisM に対する既存の接続を閉じ、指定されたとおりに、新しい接続を作成します。Connect() メソッドとは対照的に、SetServer() メソッドは既存の CDConnect のチャネルを変更できます。以下の構文のいずれかを使用します。

SetServer(connection_string, tag)
SetServer(connection_string)
SetServer("?", tag)
SetServer("?")
SetServer(tag)
SetServer("")

connection_string CN_IPTCP:server_name[port] という形式の文字列。ここで、server_name は Caché が実行されているマシンの DNS 名または IP アドレス、port は Caché スーパーサーバが使用しているポートです。この章の前半にある VisM 接続文字列 も参照してください。
tag CDConnect オブジェクトの名前となるオプションの文字列。指定されたクライアント・プロセス内で、常にタグの名前が重複しないことを確認するのは、ユーザの責任です。
"" この場合、VisM は CDConnect から切断され、チャネルだけが残ります。

動作の詳細は、次のサブセクション "接続メソッドの比較" を参照してください。

接続メソッドの比較

次のテーブルは、SetServer() メソッドと Connect() メソッドの動作をまとめたものです。

最初の引数 SetServer メソッド 接続メソッド
接続文字列 既に接続されているかどうかによって、動作が異なります。
  • まだ接続されていない場合、このサーバに接続します。

  • 既に接続されている場合、CDConnect のチャネルを変更します (その後、古いサーバ・プロセスをシャットダウンします)。

既に接続されているかどうかによって、動作が異なります。
  • まだ接続されていない場合、このサーバに接続します。

  • 既に接続されている場合、元の CDConnect から切断し、新しい CDConnect に接続します (元の CDConnect は変更されません)。

接続タグ 指定された CDConnect に接続します (既に接続されている場合は、まず切断されます。元の CDConnect は変更されません)。 [Caché version 2007.1 以降で可能] 指定された CDConnect に接続します (既に接続されている場合は、まず切断されます。元の CDConnect は変更されません)。
空の文字列 CDConnect から切断され、チャネルだけが残ります。 最後に開かれた CDConnect に接続します (既に接続されている場合は、まず切断されます。元の CDConnect は変更されません)。
二重引用符で囲まれた疑問符 サーバのユーザにプロンプトを表示した後で、次の処理を行います。
  • まだ接続されていない場合、このサーバに接続します。

  • 既に接続されている場合、CDConnect のチャネルを変更します (その後、古いサーバ・プロセスをシャットダウンします)。

サーバのユーザにプロンプトを表示した後で、次の処理を行います。
  • まだ接続されていない場合、指定されたサーバに接続します。

  • 既に接続されている場合、元の CDConnect から切断し、新しい CDConnect に接続します (元の CDConnect は変更されません)。

Server プロパティを設定することは、SetServer() メソッドの呼び出しと同じ効果があります。

複数の VisM が 1 つの CDConnect を共有している場合は、同時に通信を試みてはなりません。通信しようとした場合、"nonsynchronous communication" エラー・メッセージが表示されます。

VisM イベント

Executed

このイベントは、サーバでコードの実行を試行した後に、実行が成功したかどうかに関係なく起動されます。エラーが発生した場合、Executed イベントの前に、OnError イベントが起動されます。

OnError

このイベントは、サーバからクライアントに対してエラーが報告されたとき (つまり、Error および ErrorName プロパティに空ではない値が設定されている場合) に、常に起動されます。何らかのコードを実行しようとしているときにエラーが発生した場合、Executed イベントの前に OnError イベントが起動されます。

ShutDown

このイベントは、サーバ・メッセージがタイムアウトした場合、またはサーバが現在シャットダウン処理中であることを示した場合に起動されます。アプリケーションは、ユーザへの通知、無理のないシャットダウンの実行、または再接続の試行のためにこのイベントを使用できます。このイベントへの整数の引数は、ConnectionState プロパティの値で、サーバとの接続が失われた時刻を表します。

接続がいったん失われると、その後、メッセージの送信を試みても、<ServerLost> エラーが発生します。

FeedbackOpens in a new tab