SET
SETコマンドは、2つの異なる操作に使用されます。DIRキーワードを使用して現在の作業ディレクトリを設定するか、LIST、FRAGMENT、INSTRUCTIONの各キーワードを使用してアウトバウンド・ドキュメント・オブジェクトを入力します。
SETコマンドが完了すると、次のコマンドは常にWRITEコマンドになります。
条件付
SET ---------- LIST ----------値---------------------------->
>-- FRAGMENT ------値---------------------------->
>-- INSTRUCTION ---値---------------------------->
>-- DATA ----------値---------------------------->
>-- DIR -----------値----------------------------|
キーワード
LIST |
このキーワードは、値のリストをXMLドキュメントに配置する場合に使用されます。 このキーワードの使用方法の詳細については、以下の「リストと変数」セクションを参照してください。 LISTキーワードとDIRキーワードとの関連はありません。 このキーワードは条件付です。 |
FRAGMENT |
このキーワードは、フィールドまたはフィールドのグループをXMLドキュメントに配置する場合に使用されます。 このキーワードの使用方法の詳細については、以下の「リストと変数」セクションを参照してください。 FRAGMENTキーワードとDIRキーワードとの関連はありません。 このキーワードは条件付です。 |
INSTRUCTION |
このキーワードは、XML処理命令を設定する場合に使用されます。 このキーワードは、DATAキーワードと組み合わせて使用されます。 INSTRUCTIONキーワードとDIRキーワードとの関連はありません。 このキーワードは条件付です。 |
DATA |
このキーワードは、XML処理命令のデータを設定する場合に使用されます。 このキーワードは条件付です。これはINSTRUCTIONキーワードと組み合わせて使用されます。 |
DIR |
このキーワードは、現在のディレクトリとして設定する相対パスまたは絶対パスを指定する場合に使用されます。 DIRキーワードと、SETコマンドの他のキーワードとの関連はありません。 このキーワードは条件付です。 |
コメント/警告
XMLドキュメントを作成する場合、データのリストを追加するには2つの方法が考えられます。
1. ここで説明するSETコマンドとLISTキーワードを使用し、作業リストに配列を指定するのが最も明確な方法です。この方法では、XMLのセクションをXMLバインディングウィザードのリストとして定義する必要があります。
2. あるいは、一部のループ・コード内でFRAGMENTキーワードを使用しても同じ効果があります。各ループはリストに新しい行を追加します。XMLドキュメントとリーダーは、この反復シーケンスをリストとして自動的に取り出します。この方法を使用する場合、XMLバインディングウィザードでXMLのセクションをフラグメントとして定義する必要があります。
どちらの方法を選択する場合も、XMLの関連セクションをリストとフラグメントのどちらで定義するかを慎重に決める必要があります。
この方法については、以下の例を参照してください。
リストと変数
LISTキーワードを使用してXMLドキュメントにリストを作成する場合、以下のステップがプログラムで行われるようにする必要があります。
1. XMLドキュメントに渡されるフィールドを含む作業リストを定義します。
2. SETコマンドで、SERVICE_LISTキーワードとLISTキーワードを一緒に使用します。サービスのリスト値には、「#」を使用せずに作業リストのフィールド名を入れる必要があります。ここで、作業リストに表示される順序でフィールドの順序を定義する必要があります。
3. JSM_COMMAND組み込み関数のTO_GET部分に、XMLドキュメントに配置される値を保持する作業リストの名前を入れます。
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)
INSTRUCTIONキーワードの例
XML処理命令を以下のように追加する場合:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="mystyles.css"?>
以下のロジックを使用できます。
CHANGE FIELD(#JSMCMD) TO('''SET INSTRUCTION(xml-stylesheet) DATA(type="text/css" href="mystyles.css")''')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG)
RDML
* 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