Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


Delphi/400 コンポーネント リファレンス【TCall400】

『コンポーネント リファレンス』シリーズでは、Delphi/400の
ネイティブコンポーネントについて1記事1コンポーネントずつ解説します。

本記事では、TCall400について解説します。


概要

  • 継承
    • TObject > TPersistent > TComponent > TCall400
  • ユニット
    • SCDCall
  • 概要
    • TCall400 クラスは、Delphi プログラマが C、RPG、CL等の言語で書かれた IBM i プログラムを呼び出すために使用します。
    • プロパティエディタによって、プログラムのさまざまなパラメータを対話形式で定義および初期化することができます。
      パラメータの定義は、Delphi でプログラミングによって行うこともできます。
    • プログラムが呼び出されれば、パラメータを取得することができます。
    • このクラスを使って、DelphiプログラマはOS/400のすべてのAPIにアクセスすることができます。TCall400クラスは、TDataAreaおよびTDataQueueクラスを作成するために使用されています。

プロパティ

  • AS400
    • TAS400コンポーネントを指定(必須)
    • AS400 プロパティは、オブジェクト(コマンドやプログラムなど)が格納されている IBM i を示します。
  • LibraryName
    • String型
    • LibraryName プロパティは、IBM i オブジェクト(呼び出すプログラム)があるライブラリを指定するために使用します。
      未指定の場合、*LIBLが自動指定されます。
  • Params
    • TStringList型
    • Paramsプロパティは、IBM i プログラムのパラメータを定義するために使用します。
    • 設計モードでは、ポップアップウィンドウを使用してパラメータをビジュアルに定義できます。
      各パラメータは[新規パラメータ]パネル内で適切な属性を設定することによって定義され、[追加]ボタンを押すことによってパラメータリストに挿入されます。
    • プログラムが使用するすべてのパラメータには定義が必要です。
      ‘H’ 型(Buffer)を除き、データ型の変換はオブジェクトによって自動的に行われます。
      ‘H’ 型の場合、プログラム呼び出しの前後でパラメータは変換されません。
      この機能はパラメータがメッセージ構造体であるときに便利で、多くの場合 OS/400 の API がこれに当たります。
      開発者は SCDTOOLS ユニットにある変換関数を使用することができます。
    • 選択された各パラメータは、[変更]ボタンを押して変更を加えたり、[削除]ボタンを押してパラメータのリストから削除することができます。
    • それぞれのパラメータは、以下のサブプロパティでも読み書きすることができます。
      • ParamType(Array of Char)
         パラメータの型を定義および取得するために使用します。
         ParamType[0] は、第1パラメータの型を識別します。
      • ParamDigits(Array of Integer)
         パラメータの最大の長さを定義および取得するために使用します。
         ParamDigits[0] は、第1パラメータの長さを識別します。
      • ParamDecimals(Array of Integer)
         パラメータの小数部の桁数を定義および取得するために使用します。
         ParamDecimals[0] は、第1パラメータの小数部の桁数を識別します。
  • ProgramName
    • String型(必須)
    • ProgramName プロパティは、呼び出される IBM i プログラムの名前を指定するために使用します。
    • 設計画面では、ダイアログボックスを使用して IBM i プログラムを検索できます。
      総称名を空白のままにすると、すべてのライブラリのリストが表示されます。
      特定のプレフィクスで始まるすべてのライブラリをリストするには、そのストリングに続けて ‘*’(ワイルドカード)を入力します。
      • メモ : 検索では、大文字小文字が区別されます。
  • Value
    • Array of String型
    • Value プロパティは、パラメータの値を定義および取得するために使用します。
      Value[0] は、第1パラメータの値です。
    • このプロパティは ‘H’ 型(Buffer)を除くすべてのパラメータに対して使用できます。
      変換は自動的に行われるので、開発者が操作するのは文字ストリングだけです。
    • ‘H’ 型のパラメータの場合、バッファの値は SetBuffer メソッドを使用して割り当てることができ、RetrieveBuffer メソッドを使用して取得することができます。
      このプロパティは、値 ‘See Buffer’ を持ちます。

<補足:パラメータの型について>

TCall400コンポーネントでは仕様上
以下の10種類のパラメータが存在しますが、日本での開発においては
『A:文字』『P:パック10進数』の2種類以外はほとんど使用しません。

プログラム新規開発においてA・P以外のパラメータを使用してエラーになる場合、
A・Pのパラメータに置き換えて頂き、Delphi側または IBM i プログラム側で
型の違いを吸収して下さい。

  • A:文字
  • B:2進数
  • F:浮動小数点数
  • L:日付
  • P:パック10進数
  • S:ゾーン10進数
  • T:時刻
  • Z:タイムスタンプ
  • H:16進数
  • X:Unicode(JGEO)

メソッド

  • AddParam
    • 引数:①ParamType(Char) ②ParamDig(Integer) ③ParamDec(Integer)
    • 戻値:なし
    • AddParam メソッドは、①型②長さ、および③小数部の桁数を指定することによって
      プログラムパラメータリストにパラメータを追加するために使用します。
    • 次に示す種類のパラメータ型があります。
      (※先述の通り、日本ではAとP以外はほとんど使う機会がありません。)
      • ‘A’:Alphanumeric: 英数(EBCDIC での変換は自動)
      • ‘S’:Numeric extended : 拡張数値
      • ‘P’:Numeric condensed : 圧縮数値
      • ‘B’:Numeric binary : バイナリ数値
      • ‘F’:Numeric floating : 浮動小数点数値
      • ‘L’:Date : 日付
      • ‘T’:Hour : 時刻
      • ‘Z’:Date/Hour : 日付/時間
      • ‘H’:Buffer : バッファ
      • ‘X’:Unicode(JGEO)
    • ‘L’、’T’、’Z’ 型の場合、最後の 2 つのパラメータは0に設定されます。
      ‘A’、’H’、’B’ 型の場合、最後のパラメータは0に設定されます。
  • ClearParams
    • 引数、戻値:なし
    • ClearParams メソッドは、パラメータのリストを消去するために使用します。
  • Execute
    • 引数・戻値:なし
    • Execute メソッドは、要求された IBM i プログラムを起動します。
      • メモ : IBM i プログラムがループに入っているか、エラーまたはモニターされないメッセージを含んでいる(MSGWやLCKWになっている)場合、Delphi プログラムはハングしてしまいます。
        プロセスを終了するには、IBM i 上のプログラムの実行を終了しなければなりません。
    • エラーが発生した場合、このメソッドは ECO400Error 例外を生成します。
  • RetrieveBuffer
    • 引数:① i(Integer) ②Buffer(PAnsiChar)
    • 戻値:なし
    • RetrieveBuffer メソッドは、引数②Bufferの内容を取得するために使用します。
      このメソッドは、パラメータが ‘H’ 型の場合に使用できます。
      データ型の変換はプログラマが行う必要があります。
    • 引数②BufferがPWideCharになっているRetrieveWideBufferメソッドも存在します。
  • SetBuffer
    • 引数:① i(Integer) ②Buffer(PAnsiChar)
    • 戻値:なし
    • SetBuffer メソッドは、バッファをパラメータに割り当てるために使用します。
      このメソッドはパラメータが ‘H’ 型の場合に特に使用できます。
      変換はプログラマが行う必要があります。
    • 引数②BufferがPWideCharになっているSetWideBufferメソッドも存在します。

 

イベント

  • BeforeExecute
    • BeforeExecute イベントに追加されたコードは、プログラムを起動する直前に実行されます。
    • Boolean型パラメータCancelをTrueに設定すると、プログラムの起動が取り消されます。
  • OnExecute
    • OnExecuteイベントに追加されたコードは、プログラムを起動した直後に実行されます。

 

設定可能なパラメータ数の上限について

Delphi/400の製品仕様として、
TCall400に設定できるパラメータの上限は30個となっています。

呼び出すプログラムのパラメータが30個をこえる場合は、以下のような工夫で
パラメータを30個以内に収めて下さい。

  • 左:パラメータが35個あるため呼び出せない。
  • 右:パラメータを30個以内に収めることで呼び出し可能にする。
    • ①:複数の半角文字列パラメータを結合してパラメータを30個以内に収め、
        そのパラメータを受け取るためのCLを作成する。
      (※全角文字列が入るパラメータは、シフト文字によって桁位置がずれるため結合には適しません。)
    • ②:呼び出したCLで受け取った文字列を分解し、当初目的のプログラムを呼び出す。

 
また、1つのパラメータの最大桁数(文字の場合)は、
IBM i 側で定義できる桁数は32767桁が上限になっていますが、
TCall400で受け渡しできるパラメータは約16300byteが上限になっているようです。
1つのパラメータで16000byteを超えないよう、ご注意ください。

 

サンプルプログラム

Delphi/400 開発版をインストールしている場合、

C:\co4XX\DelphiXX\Samples\Call400

の場所に、TCall400のサンプルプログラムが同梱されています。
このサンプルでは、プログラム「PGMSAMPLE」に画面のパラメータを渡して実行し、
戻ってきた値を画面に表示します。

(「XX」部分はバージョンによって異なります。10.2 Tokyoの場合は「24」です。)

 

関連リンク

 

※本記事に記載のヘルプは、過去の製品マニュアルからの抜粋となります。
 貴社にてご利用のバージョンにおける設定などでご不明な点がございましたら、
 サポート窓口までお問い合わせ下さい。