READ
READコマンドは、指定したメッセージ内容を作業リストに配置します。作業リスト定義は、予想される内容に適していなければなりません。例えば、テキスト内容を読み込む場合、作業リストには1つのフィールドが必要です。テキスト以外の内容(区切り文字の値を含む内容など)を読み込む場合、その内容の最大列数に対応できるように作業リストを定義する必要があります。
ENCODINGキーワードとCONTENTキーワードにより、内容処理要件が制御されます。
必須
READ ---------- OBJECT ---------なし--------------------------->
*TEXT
*ATTACHMENT
任意
>-- CONTENT -------- *TEXT -------------------------->
*CSV
*TSV
*SV
>-- SEPARATOR ------値-------------------------->
*COMMA
*SEMICOLON
*TAB
*TILDE
>-- ENTRY ---------- 1 ------------------------------>
値
>-- SELECT ---------値-------------------------->
>-- ENCODING ------ *DEFAULT ------------------------>
値
>-- SVROW ----------値-------------------------->
>-- SVROWLIMIT -----値-------------------------->
*NONE
*LIST
*AVAILABLE
>-- SVMODE --------- *NONE -------------------------->
*IGNORE
*USE
>-- SVHEAD ---------値-------------------------->
>-- NUMBERFORMAT --- *NONE --------------------------|
*DEFAULT
*CLIENT
*USERAGENT
値
キーワード
OBJECT |
このキーワードは、現在のメッセージのどの部分を読み込むかを指定します。 値が*TEXTの場合、メッセージの本文が作業リストに読み込まれます。メッセージの内容タイプがtext/またはmultipart/で始まらない場合、コマンドはステータス・フィールドにNOTEXTを返します。 作業リストに読み込む特定の添付ファイルを指定するには、値*ATTACHMENTを使用します。この値とENTRYキーワードまたはSELECTキーワードを組み合わせて使用して、保存する添付ファイルを特定します。ENTRYとSELECTのどちらも指定しない場合は、最初の添付ファイルが保存されます。現在のメッセージに添付ファイルが関連付けられていない場合、コマンド・ステータスはNOATTACHMENTが返されます。 コマンドに作業リストを定義する方法については、「RDML」と「RDMLX予約キーワード」を参照してください。 |
CONTENT |
省略値では、メール内容はテキストとして処理されます。 添付ファイルが平文の場合、CONTENT(*TEXT)を使用して作業リストにテキストを読み込みます。 あるいは、コンマ区切り変数(*CSV)やタブ区切り変数(*TSV)、または区切り文字キーワードに指定した区切り変数(*SV)で処理することができます。区切り文字変数を含む内容を処理する場合の追加処理オプションについては、「SEPARATOR」、「SVHEAD」、「SVMODE」、「NUMBERFORMAT」、「TRIM」、「TRUNCATE」の各キーワードを参照してください。 本文や添付ファイルの内容の保管に使用される作業リストは、データの保管に適した列数で定義する必要があります。コマンドに作業リストを定義する方法については、「RDML」と「RDMLX予約キーワード」を参照してください。 |
SEPARATOR |
このキーワードは区切り値サービスで使用され、内容の区切り文字を特定します。 SEPARATORキーワードがあり、CONTENTキーワードを指定しない場合、CONTENT(*SV)が前提となります。 詳細については、「SEPARATOR」を参照してください。 |
ENTRY |
保存する添付ファイルのファイル番号を指定します。省略値は1です。各添付ファイルに割り当てられる番号は、送信者がメールに添付ファイルを追加した順序で決まります。 |
SELECT |
添付ファイル名に基づいて、保存する添付ファイルを選択します。 |
ENCODING |
バイト内容のUnicode文字列変換に適用されるエンコーディングを指定します。ENCODINGキーワードの省略値は*DEFAULTです。 詳細については、「ENCODING」を参照してください。 |
SVROW |
オプションのキーワードSVROWは、レコードを読み込む際の開始行を指定する場合に使用されます。 詳細については、「SVROW」を参照してください。 |
SVROWLIMIT |
オプションのキーワードSVROWLIMITは、読み込まれる行数を指定する場合に使用されます。 詳細については、「SVROWLIMIT」を参照してください。 |
SVMODE |
このキーワードは、区切り値データを処理するコンテンツ・ハンドラーとサービスで使用され、インバウンド区切り値データの処理方法を定義します。 詳細については、「SVMODE」を参照してください。 |
SVHEAD |
このオプションのキーワードは、区切り値データのフィールド・レイアウトの記述に使用されます。 詳細については、「SVHEAD」を参照してください。 |
NUMBERFORMAT |
このオプションのキーワードは、小数区切り文字が小数点文字「.」ではない数字文字列を処理します。 詳細については、「NUMBERFORMAT」を参照してください。 |
例
RDML
TRUNCATEキーワードを使用すると、行の長さが作業リストのフィールドの長さを超える場合でも本文の内容が作業リストに追加されます。
DEF_LIST NAME(#BODYLST) FIELDS(#STD_TEXT) TYPE(*WORKING)
CHANGE FIELD(#JSMCMD) TO('READ OBJECT(*TEXT) SERVICE_LIST(STD_TEXT) TRUNCATE(*BOTH)')
USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG #BODYLST)
RDMLX
添付ファイルは、その内容や内容のユーザー情報に従って処理できます。例えば、あるメールに以下のような内容の添付ファイルmessage01.txtがあるとします。
first, second, third, fourth
1, 2, 3, 4
uno, dos, tres , quatro
un , deux , trios ,
この添付ファイルの内容をテキストとして読み込みます(内容の各行が作業リストの各フィールドに配置されます)。
def_list name(#attachlst) fields(#fielda) type(*working)
use builtin(jsmx_command) with_args(#jsmhdle 'read object(*attachment) content(*text) select(message01.txt)') to_get(#jsmsts #jsmmsg #attachlst)
または
添付ファイルをコンマ区切り変数ファイルとして読み込みます(作業リストには4列必要です)。
def_list name(#attachlst) fields(#fielda #fieldb #fieldc #fieldd) type(*working)
use builtin(jsmx_command) with_args(#jsmhdle 'read object(*attachment) content(*csv) select(message01.txt)') to_get(#jsmsts #jsmmsg #attachlst)
ILE RPG
* NB: This MUST match the structure xml provided to the JSM Server!
d readlist ds occurs(readocur)
d readtext 255a
d readocur c const(9999)
d readsize c const(%size(readlist))
d readcount s 9p 0 inz(0)
c eval jsmcmd = 'READ OBJECT(*TEXT)'
c + ' TRUNCATE(*BOTH)'
c + ' SERVICE_STRUCTURE(POP3.ReadList)'
c + ' OCCURS(' + %char(readocur) + ')'
c + ' SIZE(' + %char(readsize) + ')'
c eval %occur(readlist) = 1
c eval bytelength = readocur * readsize
c callp p_jsmcmdx(jsmcmd:readlist:bytelength:
c jsmsts:jsmmsg)
c if jsmsts = 'OK'
c callp p_jsmbytelngth(bytelength)
c if (bytelength > 0)
c and (bytelength <= readocur * readsize)
c callp p_jsmbyterecv(readlist)
c eval readcount = bytelength / readsize
c endif
c endif