SETコマンドは、2つの異なる操作に使用されます。DIRキーワードを使用して現在の作業ディレクトリを設定するか、LIST または FRAGMENTのキーワードを使用してアウトバウンド・ドキュメント・オブジェクトを入力します。
SETコマンドが完了すると、次のコマンドは常にWRITEコマンドになります。
条件付
SET ---------- LIST ---------- 値 ---------------------------->
>-- FRAGMENT ------ 値 ---------------------------->
>-- DIR ----------- 値 ----------------------------|
キーワード
LIST |
このキーワードは、値のリストを JSON ドキュメントに配置する場合に使用されます。 このキーワードの使用方法の詳細については、以下の「リストと変数」セクションを参照してください。 LISTキーワードとDIRキーワードとの関連はありません。 このキーワードは条件付です。 |
FRAGMENT |
このキーワードは、フィールドまたはフィールドのグループをJSON ドキュメントに配置する場合に使用されます。 このキーワードの使用方法の詳細については、以下の「リストと変数」セクションを参照してください。 FRAGMENTキーワードとDIRキーワードとの関連はありません。 このキーワードは条件付です。 |
DIR |
このキーワードは、現在のディレクトリとして設定する相対パスまたは絶対パスを指定する場合に使用されます。 DIRキーワードと、SETコマンドの他のキーワードとの関連はありません。 このキーワードは条件付です。 |
コメント/警告
JSON ドキュメントを作成する場合、データのリストを追加するには2つの方法が考えられます。
1. 最も分かりやすい方法は、ここで説明されているSETコマンドとLISTキーワードを使用して、作業リストに配列を指定する方法です。この方法では、JSON のセクションを JSON バインディング・ウィザードでリストとして定義する必要があります。
2. もう 1 つの方法は、一部のループ・コード内でFRAGMENTキーワードを使用することです。各ループはリストに新しい行を追加します。この方法では、JSON のセクションを JSON バインディング・ウィザードでフラグメントとして定義する必要があります。
どちらの方法を選択する場合も、JSON の関連セクションをリストとフラグメントのどちらで定義するかを慎重に決める必要があります。
この方法については、以下の例を参照してください。
リストと変数
LIST キーワードを使用して JSON ドキュメントにリストを作成する場合、以下のステップがプログラムで行われるようにする必要があります。
1. JSON ドキュメントに渡されるフィールドを含む作業リストを定義します。
2. SET コマンドで、SERVICE_LIST キーワードを LIST キーワードと共に使用します。サービスのリスト値には、「#」を使用せずに作業リストのフィールド名を入れる必要があります。ここで、作業リストに表示される順序でフィールドの順序を定義する必要があります。
3. JSM_COMMAND 組み込み関数の TO_GET の部分に、JSON ドキュメントに配置する値を保持する作業リストの名前を入れます。
FRAGMENTキーワードを使用してフィールドまたはフィールドのグループを追加する場合、値*FIELDを指定したSERVICE_EXCHANGEキーワードを追加する必要があります。この方法については、以下の例を参照してください。
例
RDML
* Define JSM fields
DEFINE FIELD(#JSMSTS) TYPE(*CHAR) LENGTH(020)
DEFINE FIELD(#JSMMSG) TYPE(*CHAR) LENGTH(256)
DEFINE FIELD(#JSMCMD) TYPE(*CHAR) LENGTH(256)
* Define Order Line fields
DEFINE FIELD(#LINNUM) TYPE(*DEC) LENGTH(003) DECIMALS(0) COLHDG('Line')
DEFINE FIELD(#PARTNUM) TYPE(*DEC) LENGTH(003) DECIMALS(0) COLHDG('Part #')
DEFINE FIELD(#PARTDSC) TYPE(*CHAR) LENGTH(030) COLHDG('Descrption')
DEFINE FIELD(#PARTAMT) TYPE(*DEC) LENGTH(010) DECIMALS(2) COLHDG('Amount')
DEFINE FIELD(#PARTQTY) TYPE(*DEC) LENGTH(003) DECIMALS(0) COLHDG('Quantity')
* Define the list to hold the order lines
DEF_LIST NAME(#WRKLINES) FIELDS(#LINNUM #PARTNUM #PARTDSC #PARTAMT #PARTQTY) TYPE(*WORKING)
* Set customer details
USE BUILTIN(JSM_COMMAND) WITH_ARGS('SET FRAGMENT(CUSTOMER) SERVICE_EXCHANGE(*FIELD)') TO_GET(#JSMSTS #JSMMSG)
* Set SalesOrder header details
CHANGE FIELD(#JSMCMD) TO('SET FRAGMENT(SALESORDER) SERVICE_EXCHANGE(*FIELD)')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG)
CHANGE FIELD(#JSMCMD) TO('SET LIST(LINE) SERVICE_LIST(LINNUM,PARTNUM,PARTDSC,PARTAMT,PARTQTY)')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG #WRKLINES)
RDMLX
* Define the fields used by the JSM Commands
Define Field(#JSMSTS) Type(*CHAR) Length(020)
Define Field(#JSMMSG) Type(*CHAR) Length(256)
Define Field(#JSMCMD) Type(*CHAR) Length(256)
Define Field(#JSMHND) Type(*CHAR) Length(4)
Define FIELD(#LINENUM) TYPE(*DEC) LENGTH(003) DECIMALS(0) LABEL('Line #')
Define FIELD(#PARTNUM) TYPE(*DEC) LENGTH(003) DECIMALS(0) LABEL('Part #')
Define FIELD(#PARTDSC) TYPE(*CHAR) LENGTH(020) LABEL('Part Desc.')
Define FIELD(#PARTAMT) TYPE(*DEC) LENGTH(010) DECIMALS(2) LABEL('Amount')
Define FIELD(#PARTQTY) TYPE(*DEC) LENGTH(003) DECIMALS(0) LABEL('Quantity')
Define Field(#LINSTAT) Type(*CHAR) Length(20) Label('Line Status')
Def_List Name(#RSPLINES) Fields(#LINENUM #PARTNUM #PARTDSC #PARTAMT #PARTQTY #LINSTAT) Type(*WORKING)
* Set the customer details
#JSMCMD := 'SET FRAGMENT(CUSTOMER) SERVICE_EXCHANGE(*FIELD)'
Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)
* Set the order details by using SET FRAGMENT a number of times
Selectlist Named(#RSPLINES)
#JSMCMD := 'SET FRAGMENT(LINE) SERVICE_EXCHANGE(*FIELD)'
Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK) With_Parms(#JSMSTS #JSMMSG)
#JSMCMD := 'SET FRAGMENT(PART) SERVICE_EXCHANGE(*FIELD)'
Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK) With_Parms(#JSMSTS #JSMMSG)
Endselect