3.3.6 RPGデータ構造

LANSA Integrator

3.3.6 RPGデータ構造


RPGデータ構造サポートにより、RPGプログラムでは、RPGプログラムと現在のJSMサービス間で単一または複数のオカレンス・データ構造を送受信できます。

RPGプログラムは、JSMサービスにデータ構造を渡すことができます。これらのデータ構造は、リスト・オブジェクトまたはフィールド・リスト・オブジェクトとして表示されます。

各コマンドでRPGプログラムが渡せるのは、フィールド・リスト・オブジェクトかリスト・オブジェクトだけです。LANSAファンクションは、フィールド・リスト・オブジェクトとリスト・オブジェクトを両方同時に渡すことができます。

JSMCMDX呼び出しは、データ構造をバイト配列として渡す場合に使用されます。

コマンド・キーワードSERVICE_STRUCTUREがある場合、バイト配列は、他のコマンド・キーワードに応じてJSMListまたはJSMFieldListオブジェクトに変換されます。

これらのオブジェクトは、JSMCMDオブジェクトから利用できます。

 

   JSMList list = command.getList () ;

 

   JSMFieldList fieldList = command.getFieldList () ;

 

SERVICE_STRUCTUREキーワードがない場合、データー構造にはgetByteArrayメソッドでアクセスできます。

 

   byte[] data = command.getByteArray () ;

 

予約キーワード

·         SERVICE_STRUCTURE ( xxx ) - 構造を使用する必要がある場合は必須

·         OCCURS ( nnn ) - リストの場合は必須

·         SIZE ( nnn ) - リストの場合は必須

·         COUNT ( nnn ) - リストの場合はオプション。リストに有効エントリー数を指定

リストとしてのデータ構造

JSMサービスに複数のオカレンス・データ構造をリスト・オブジェクトとして送信する場合、プログラマはキーワードOCCURSを含める必要があります。

·         OCCURSキーワードでは、リスト内の最大エントリー数を指定します。

·         COUNTキーワードでは、リスト内の現在のエントリー数を指定します。省略値はゼロです。

·         SIZEキーワードは、OCCURSキーワードが使用される場合は必須です。これは、計算されたエントリー・サイズをチェックする場合に使用されます。

·         バイト配列の長さは、SIZE値にOCCURS値を掛けた値に等しくなければなりません。

フィールド・リストとしてのデータ構造

JSMサービスにデータ構造をフィールド・リスト・オブジェクトとして送信する場合、プログラマはCOUNT、OCCURS、SIZEの各キーワードを使用する必要はありません。

·         COUNTキーワード値の省略値は1です。

·         OCCURSキーワード値の省略値は1です。

·         バイト配列の長さは、計算された構造サイズに等しくなければなりません。

構造のレイアウトの決定

SERVICE_STRUCTUREキーワードの値は、systemサブディレクトリにあるstructure.propertiesファイルのキー検索として使用されます。

このプロパティ・エントリーの値コンポーネントは、構造レイアウトを定義するXMLファイルの位置になります。

 

#

# Java Service Managerの構造

#

structure.demoxml.orderhead=structure/demoxml-orderhead.xml

structure.demoxml.orderline=structure/demoxml-orderline.xml

 

構造XMLの例

 

<?xml version="1.0" encoding="UTF-8"?>

 

<rdml:structure xmlns:rdml="http://www.lansa.com/2000/XML/Function">

 

   <rdml:field name="ORDER"  type="S" length="10" />

   <rdml:field name="NAME"   type="A" length="50" />

   <rdml:field name="STREET" type="A" length="50" />

   <rdml:field name="CITY"   type="A" length="50" />

   <rdml:field name="STATE"  type="A" length="5" />

   <rdml:field name="ZIP"    type="A" length="5" />

 

</rdml:structure>

 

RPGプログラムの例

 

*注文ヘッド

D ORDERHEAD            DS

D ORDER       10S 0    INZ(0)

D NAME        50       INZ(' ')

D STREET      50       INZ(' ')

D CITY        50       INZ(' ')

D STATE       5        INZ(' ')

D ZIP         5        INZ(' ')

D HEADSIZE    C        %SIZE(ORDERHEAD)

 

*注文行、10行まで

D ORDERLINE   DS       OCCURS(10)

D LINENUM     3S 0     INZ(0)

D PARTNUM     3S 0     INZ(0)

D PARTDSC     50       INZ(' ')

D PARTAMT     10P 2    INZ(0)

D PARTQTY     3P 0     INZ(0)

D LINEELEM    C        %ELEM(ORDERLINE)

D LINESIZE    C        %SIZE(ORDERLINE)

 

このコマンドは、単一フィールド値を受け取り、ORDERHEAD構造に入れます。

RECEIVE HANDLER(IXML) XSL(RECEIVEORDER) SERVICE_STRUCTURE(DEMOXML.ORDERHEAD)

このコマンドは、複数の注文行を受け取り、ORDERLINE構造に入れます。

RECEIVE HANDLER(IXML) XSL(RECEIVEORDER) SERVICE_STRUCTURE(DEMOXML.ORDERLINE) SIZE(64) OCCURS(10)

データ構造名が構造XMLファイル内の名前に一致している必要はなく、使用されるのはデータ・タイプと位置だけです。

構造XML名は、XSLファイル内のフィールド名と一致している必要があります。

付属のRPG例QRPGLESRC/DEMOXMLでは、データ構造の送受信方法が説明されています。