8.11 CALL_SERVER_FUNCTION

指定されたサーバー上でLANSAアプリケーションを呼び出し(実行し)、実行が完了するまで待機します。ファンクションは*DIRECTである必要があります。

 

引数

番号

タイプ

必須/任意

記述

最小長

最大長

最小小数桁数

最大小数桁数

1

A

必須

定義されているサーバーのSSN

1

10

 

 

2

A

必須

呼び出されるファンクションの名前

1

7

 

 

3

A

任意

交換リストを渡す

Y:交換リストを渡す

その他:交換リストを渡さない

デフォルトはNです。

1

1

 

 

4

A

任意

交換リストを戻す

Y:交換リストを戻す

その他:交換リストを戻さない

デフォルトはNです。

1

1

 

 

5 - 14

L

任意

サーバー上のファンクションに渡される1から10の作業リスト

 

 

 

 

 

 

戻り値

番号

タイプ

必須/任意

記述

最小長

最大長

最小小数桁数

最大小数桁数

1

A

必須

戻りコード

OK:呼び出し完了

ER:呼び出し中にエラーが発生し、エラー・メッセージが発行される

2

2

 

 

 

 

技術上の注記

移植性に関する考慮事項

DEFINE_OS_400_SERVERで定義されるサーバー:

サーバーに渡される作業リストの合計バイト長は、最大で32,000バイトです。合計バイト長とは、項目のバイト長に現在の項目数を乗算した長さです。1から10までの作業リストをサーバー上のファンクションに渡す場合、サーバーに渡すことができるバイトの合計は320,000になります。つまり、32,000バイトの作業リストが10あることになります。

クライアント・ファンクションが大きすぎるリストを渡した場合、この組み込み関数は致命的なエラー・メッセージを出力します。ただし、サーバー・ファンクションでは事情が異なります。サーバーがパラメータとして受け取る作業リストは、呼び出し元(IBM i ベースのサーバー制御プログラム)によって割り当てられたメモリーの中に存在します。その作業リストにあまりにも多くの項目を追加しようとすると、サーバー制御プログラムは打ち切られ、アプリケーション・エラーが発生します。
この警告を無視しないでください。クライアント(Windowsなど)のファンクションからこの組み込み関数を使用して作業リストをサーバー(IBM i ベース)のファンクションへ渡すなどの場合、渡される作業リストが「リストあふれ」を起こさないように十分に注意してください。

作業リストが含まれるCALL_SERVER_FUNCTIONで予期しないエラーが発生した場合は、まず、作業リストの「リストあふれ」が第1の原因として考えられます。

 

エラー処理に関する注意事項

複雑なエラー処理スキームをご使用のアプリケーションに組み込むことは避けるよう、強くお勧めします。アプリケーションのすべてのレベルで、以下のようなごく単純なトラップを使用するようにしてください。

if (#retcode *ne OK) 

     abort msgtxt('Failed to .............................') 

endif

 

標準的なエラー処理を行う組み込み関数を生成されるアプリケーションに組み入れて、問題に対処するようにしてください。ユーザー定義のエラー処理ロジックが非常に複雑になったために全RDMLコードの40から50%を占有するようなケースもあります(アプリケーションには何のメリットもありません)。このような事態に陥らないようにしてください。