GET
GETコマンドは、インバウンド・ドキュメント・オブジェクトからのデータの読み込みに使用されます。
GETコマンドは、XMLドキュメントのデータをプログラムにロードする際に不可欠な要素です。このコマンドの前にREADコマンドとBINDコマンドを使用してください。
条件付
GET ---------- LIST ----------値---------------------------->
>-- FRAGMENT ------値---------------------------->
>-- INSTRUCTION ---値----------------------------|
キーワード
LIST |
このキーワードは、ロードされたXMLドキュメントからリストを取得する場合に使用されます。 このキーワードの使用方法の詳細については、以下の「リストと変数」セクションを参照してください。 このキーワードは条件付です。 |
FRAGMENT |
このキーワードは、ロードされたXMLドキュメントからフィールド・フラグメントを取得する場合に使用されます。 このキーワードの使用方法の詳細については、以下の「リストと変数」セクションを参照してください。 このキーワードは条件付です。 |
INSTRUCTION |
このキーワードは、XML処理命令を取得する場合に使用されます。 このキーワードは任意です。 |
コメント/警告
一度に1つのキーワードしか使用できません。
XMLドキュメントからリストを読み込むには2つの方法があります。
1. XMLコードの関連セクションをリストとして定義するか(XMLバインディングウィザードを使用)、GETコマンドでLISTキーワードを使用できます。これにより、リスト全体が1回で作業リストに取り出されます。
2. あるいは、関連セクションをフラグメントの集合として定義し(XMLバインディングウィザードを使用)、GETコマンドでFRAGMENTキーワードを使用してこれをループに置きます。
この方法の詳細については、例を参照してください。
注:フラグメントとリスト
GET FRAGMENTとGET LISTを一緒に使用する場合、以下の点が重要です。
· GET FRAGMENTを発行する場合、そのフラグメントが現在のフラグメントになります。つまり、フラグメントのポインターは現在のフラグメントに移動します。
· すべてのフラグメントにアクセスする順序でフラグメントを読み込む必要があります。フラグメントのポインターをその親フラグメントに合わせると、アクセスできるのはリストと子フラグメントのみになります。そのため、ある意味では、フラグメントはツリー上のブランチのようなものになります。ツリーの末端のリストやフラグメントにアクセスするには、フラグメントのポインターを親ブランチに合わせる必要があります。
· 例えば、GET FRAGMENTを発行する場合、GET LISTでアクセスできるのは、この現在のフラグメント内のリストのみになります。したがって、別のフラグメントに移動するには、(GET LISTを使用して)現在のフラグメント内のリストをすべて読み込む必要があります。別のフラグメントに移ると、前のフラグメント内のリストにはアクセスできなくなります。特定のフラグメント内のリストには任意の順序でアクセスできます。
· あるフラグメントが現在のフラグメントになる場合、そのフラグメントは使用済みと設定されるため、該当フラグメントから離れると、再度現在のフラグメントになることはありません。
リストと変数
LISTキーワードを使用して、ロードされたドキュメントからプログラムにリストを返す場合、以下のステップがプログラムで行われるようにする必要があります。
1. XMLドキュメントから予想されるフィールドを含む作業リストを定義します。
2. GETコマンドで、SERVICE_LISTキーワードとLISTキーワードを一緒に使用します。サービスのリスト値には、「#」を使用せずに作業リストのフィールド名を入れる必要があります。ここで、作業リストに表示される順序でフィールドの順序を定義する必要があります。
3. JSM_COMMAND組み込み関数のTO_GET部分に、返される値を保持する作業リストの名前を入れます。
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 a list to hold the order line details
DEF_LIST NAME(#WRKLINES) FIELDS(#LINNUM #PARTNUM #PARTDSC #PARTAMT #PARTQTY) TYPE(*WORKING)
* Get SalesOrder Details
CHANGE FIELD(#JSMCMD) TO('GET FRAGMENT(SALESORDER) SERVICE_EXCHANGE(*FIELD)')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG)
* Get Lines
CHANGE FIELD(#JSMCMD) TO('GET 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"?>
<?Label SLBK|PROFILE|208|SUCCESS?>
<Orders xmlns="here" here="yes">
以下のコードを使用して命令を取得します。
USE BUILTIN(JSM_COMMAND) WITH_ARGS('''GET INSTRUCTION(Label)''') TO_GET(#JSMSTS #JSMMSG)
この例では、命令は#JSMMSGフィールドに置かれます。
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)
#JSMCMD := 'GET FRAGMENT(CUSTOMER) SERVICE_EXCHANGE(*FIELD)'
Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)