CALL 'CBLDCRPS' USING 一意名1 一意名2 一意名3
01 一意名1.
02 データ名A PIC X(8) VALUE 'CALL '.
02 データ名B PIC X(5).
02 FILLER PIC X(3).
02 データ名C PIC S9(9) COMP VALUE ZERO.
02 データ名D PIC S9(9) COMP.
02 データ名E PIC X(32).
02 データ名F PIC X(32).
02 データ名G PIC 9(9) COMP.
01 一意名2.
02 データ名H PIC S9(9) COMP.
02 データ名I PIC X(n).
01 一意名3.
02 データ名J PIC S9(9) COMP.
02 データ名K PIC X(n).
CALL 'CBLDCRPC' USING 一意名1 一意名2 一意名3
01 一意名1.
02 データ名A PIC X(8) VALUE 'CALL '.
02 データ名B PIC X(5).
02 FILLER PIC X(3).
02 データ名C PIC S9(9) COMP VALUE ZERO.
02 データ名D PIC S9(9) COMP.
02 データ名E PIC X(32).
02 データ名F PIC X(32).
01 一意名2.
02 データ名H PIC S9(9) COMP.
02 データ名I PIC X(n).
01 一意名3.
02 データ名J PIC S9(9) COMP.
02 データ名K PIC X(n).
SPPのサービスを要求します。「サービスグループ名+サービス名」に該当するサービスプログラムを呼び,その応答を受け取ります。
サービス要求されたサーバUAPが存在するノードのOpenTP1は,稼働していなけばなりません。OpenTP1が稼働していない場合(開始処理中を含む)は,CBLDCRPS('CALL ')は,02406,02415,02420でエラーリターンします。
CBLDCRPS('CALL ')を実行したときに,目的のサービスグループが閉塞されている場合は,02412でエラーリターンします。
CBLDCRPS('CALL ')を実行したときに,目的のサービスグループがdcsvstopコマンドなどで終了処理中,または終了している場合,02413,02412,02410のうちのどれかでエラーリターンします。どのステータスコードが戻るかは,CBLDCRPS('CALL ')を実行したタイミングで決まります。
ソケット受信型サーバでは,ユーザサービス定義のmax_socket_msgとmax_socket_msglenの指定でデータの輻輳制御をしています。そのため,サービス要求を受信できない場合があります。このとき,CBLDCRPS('CALL ')は,02456でエラーリターンします。この値が戻った場合,CUPは適当な時間をおいてから再実行すれば,サービス要求できる場合があります。
通常の通信形態の場合,クライアント環境定義DCCLTSERVICEGROUPLISTにXDM/DCCM3論理端末のホスト名およびポート番号を指定し,CBLDCRPS('CALL ')を実行します。
CUPでは,サービスプログラムの応答の領域(データ名K)を確保しておきます。さらに,CUPではCBLDCRPS('CALL ')に次の値を指定します。
入力パラメタ,入力パラメタ長,応答の長さは,CUPのCBLDCRPS('CALL ')で指定した値がそのままサービスプログラムに渡されます。応答を返さないサービスプログラムのサービスを呼ぶときは,応答の長さを指定しても無視されます。入力パラメタ長と応答の長さの最大値は,C言語のヘッダファイルdcvrpc.hで規定しているDCRPC_MAX_MESSAGE_SIZE※です。
サービスプログラムの処理の終了後に,次の値が参照できます。
データ名Jは,サービスプログラムから実際に返ってきた応答の長さです。同期応答型RPC(データ名Cに0を設定)の場合,CBLDCRPS('CALL ')がリターンしたあと,データ名Kとデータ名Jを参照できます。非応答型RPC(データ名Cに1を設定)の場合,データ名Kとデータ名Jは参照できません。また,CBLDCRPS('CALL ')がエラーリターンした場合もデータ名Kとデータ名Jは参照できません。
返ってきた応答がCUPで確保した応答の領域(データ名K)よりも大きい場合は,ステータスコード02409でエラーリターンします。
ステータスコード | 意味 |
---|---|
00000 | 正常終了しました。 |
02401 | データ名に設定した値が間違っています。要求コード(データ名A)が間違っている場合も含みます。 |
02402 | CBLDCRPS('OPEN ')が実行されていません。 |
02403 | 次のどれかの要因で,このステータスコードが戻りました。
|
02404 | メモリ不足が発生しました。 |
02406 | ネットワーク障害が発生しました。 |
02407 | CBLDCRPS('CALL ')の処理で時間切れ(タイムアウト)が発生しました。 または,サービス要求先のSPPが処理完了前に異常終了しました。 |
02408 | 入力パラメタ長が最大値を超えました。 |
02409 | 返ってきた応答の長さが,CUPで用意した領域を超えています。 |
02410 | データ名Fに指定したサービスグループ名は定義されていません。 |
02411 | データ名Eに指定したサービス名は定義されていません。 |
02412 | データ名Eに指定したサービスが存在するサービスグループは,閉塞されています。 |
02413 | 指定したサービスは終了処理中です。 |
02414 | サービス要求先のSPPが未起動であるか,または処理完了前に異常終了しました。この値はクライアント環境定義DCWATCHTIMに0を指定(応答無限待ち指定)した場合に戻ります。 |
02415 | 設定したサービスが存在するノードのOpenTP1が実行されていません。 |
02416 | 指定したサービスでシステムエラーが発生しました。 |
02417 | 指定したサービスでメモリ不足が発生しました。 |
02418 | システムエラーが発生しました。 |
02419 | サービスプログラムがOpenTP1に返した応答長が1から DCRPC_MAX_MESSAGE_SIZE※までの範囲にありません。 |
02420 | サービス要求されたノードにあるOpenTP1は開始処理中です。 |
02423 | メモリ不足が発生しました。 |
02424 | システムエラーが発生しました。 |
02425 | 指定したサービスでシステムエラーが発生しました。 |
02426 | 返ってきた応答が,CUPで用意した領域に収まりません。 |
02427 | ノード間負荷バランス機能の環境で,複数のSPPのトランザクション属性が一致していません。 このステータスコードは,ノード間負荷バランス機能を使用しているSPPにサービスを要求した場合にだけ戻ります。 |
02442 | 常設コネクションが解放されました。 |
02456 | サービス要求先のソケット受信型サーバがサービス要求を受信できません。 |
02466 | クライアント環境定義DCUTOKEYを指定している環境下で,ユーザサービス定義でtest_mode=noと指定したSPPに対してサービス要求しました。 または,次の条件が重なった環境下から関数を呼び出しています。
|
02467 | トランザクション処理の連鎖RPCを使ったあとで,データ名Cに32を設定したCBLDCRPS('CALL ')でサービスを要求しています。 |
02470 | サービス要求先のSPPは,セキュリティ機能で保護されています。 CBLDCRPS('CALL ')を呼び出したUAPには,サーバUAPへのアクセス権限がありません。 |
02472 | 同時に起動できるトランザクションブランチの数を超えたため,トランザクションブランチを開始できません。 または,一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため,トランザクションブランチを開始できません。 または,トランザクション内でドメイン修飾をしたサービス要求で,データ名Cに32を合わせて設定していません。 |
02478 | サービス要求先のSPPが処理完了前に異常終了しました。この値はクライアント環境定義DCEXTENDFUNCTIONに00000001を指定した場合に戻ります。00000000を指定しているか指定を省略していると,ステータスコードには02407,または02414が戻ります。 |
02479 | サービス要求先のTP1/Server Baseのバージョンが古い(03-03以降でない)ため,データ圧縮機能は使用できません。このステータスコードは,トランザクションの範囲内でサービス要求した場合に戻ります。 |
02544 | データ名Gに指定したクライアントIDはCBLDCCLS('CLTIN '),またはCBLDCCLS('EXCLTIN ')で受け取ったクライアントIDと異なっています。 |
02547 | 指定したポート番号は使用されています。または,OSが自動的に割り当てるポート番号が不足しています。 |
上記の場合,サービス要求先のSPPから開始したトランザクションの処理はコミットされて,データベースが更新されていることがあります。データベースが更新されているかどうかを確認してください。