このステップでは、ユーザー・エージェントからデータを受け取って処理し、ユーザー・エージェントにデータを返すLANSA RDMLXサーバー・ファンクションを作成します。
以下の表に示すようにテンプレートの質問に回答します。
質問 | 回答 | コメント |
JSMサービスをロードしますか? | HTTPSERVICE |
ファンクション iiiFN03 の RDMLX コードを編集します。
このファンクションには 2 つの作業リストが必要です。
作業リスト S_RECEIVE を使って、ユーザー・エージェントから送信された CSV ファイルのデータを受け取ることができます。CSV ファイルに他の情報が含まれていますが、このファンクションでは、社員番号と給与のみを使用します。
作業リスト S_SEND を使って、このサーバー・ファンクションからユーザー・エージェントに応答を返すことができます。受信リストの更新は許可されていないため、このリストは受信リストとは別のリストにしてください。この場合、ユーザー・エージェントに返されるデータは、社員番号、社員の一部詳細、新しい給与、更新の成功や失敗を示すメッセージを含むテキスト・フィールドになります。
また、エラーを処理するフィールド S_ERROR も定義する必要があります。
RDMLX コードは以下のようになります。
DEF_LIST NAME(#S_RECEIVE) FIELDS(#EMPNO #SALARY) TYPE(*WORKING)DEFINE FIELD(#S_ERROR) TYPE(*CHAR) LENGTH(132) INPUT_ATR(LC)DEF_LIST NAME(#S_SEND) FIELDS(#EMPNO #GIVENAME #SURNAME #SALARY #S_ERROR)TYPE(*WORKING)
キーワード | 値 |
SERVICE_CONTENT | '*HTTP' |
TRACE | '*YES' |
コマンド | キーワード | 値 | 作業リスト |
RECEIVE | HANDLER | InboundSeparatedValue | S_RECEIVE |
SVMODE | '*USE' |
ここに示されているように *USE は単一引用符で囲みます。
BBJSMXCMDテンプレートの使用の詳細については、「INT003 - FTPサービスの使用」の「ステップ1. 基本のJSMファンクションを作成する」を参照してください。
JSM コマンドの作成
#JSMXCMD := RECEIVE
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD HANDLER InboundSeparatedValue)
EXECUTE SUBROUTINE(KEYWRD) WITH_PARMS(#JSMXCMD SVMODE '*USE')
USE BUILTIN(JSMX_COMMAND) WITH_ARGS(#JSMXHDLE1 #JSMXCMD) TO_GET(#JSMSTS #JSMMSG #S_RECEIVE)
EXECUTE SUBROUTINE(CHECK_STS) WITH_PARMS(#JSMXCMD)
9. 引き続き YOUR OWN LOGIC SECTION に次のような機能を追加するコードを書いていきます。
.受信したリスト S_RECEIVE. のすべてのエントリーを選択 ( SELECTLIST) します。
EMPNO キーで PSLMST から GIVENAME と SURNAME を取得 (FETCH) します。
.I/O ステータスを確認します。
OK 以外の場合、社員が見つからなかったことを示すエラー・フィールド S_ERROR を変更 (CHANGE) します。
それ以外の場合は、PSLMST で SALARY を更新 (UPDATE) します。
.更新 (UPDATE) の I/O ステータスを確認し、エラー・フィールド S_ERROR を適宜変更 (CHANGE) します。
LANSA ユーザー・エージェントに返す作業リスト S_SEND にエントリーを追加します。
ENDSELECT
コードは以下のようになります。
SELECTLIST NAMED(#S_RECEIVE)
CHANGE FIELD(#GIVENAME #SURNAME) TO(*NULL)
FETCH FIELDS(#SURNAME #GIVENAME) FROM_FILE(PSLMST) WITH_KEY(#EMPNO)
IF_STATUS IS_NOT(*OKAY)
#S_ERROR := 'Unsuccesful: Employee not found'
ELSE
UPDATE FIELDS(#SALARY) IN_FILE(PSLMST) IO_ERROR(*NEXT) VAL_ERROR(*NEXT)
IF_STATUS IS_NOT(*OKAY)
#S_ERROR := 'Unsuccesful: Employee found but update failed'
ELSE
#S_ERROR := 'Succesful: Salary of employee ' + #EMPNO + 'succesfully updated'
ENDIF
ENDIF
ADD_ENTRY TO_LIST(#S_SEND)
ENDSELECT
10. 上記のコードの下に位置を合わせ、BBJSMXCMDテンプレートを使用して、ユーザー・エージェントに応答リストを返すコードを作成します。このリストには、社員の詳細と、成功/失敗を示すメッセージが含まれています。 サービス・リストの名前の入力が求められた場合は、S_SENDと入力します。以下の表を使用して、テンプレートの質問に回答します。
コマンド | キーワード | 値 | 作業リスト |
SEND | HANDLER | InboundSeparatedValue | S_SEND |
コードは以下のようになります。