Page History
...
- LANSA エディターを使用して、新規のプロセス iiiPRO09 – JSON と、これに属する RDMLX ファンクション iiiFN10– 社員取得サーバー を作成します 、テンプレートは使用しません。Integrator スタジオでiii JSON チュートリアル・プロジェクトを開いた状態で、ソリューション/EmployeeDeptSect/samples/RDMLX を展開し、生成された RDMLX ファイル SAMPLE_RDMLX_INBOUND_HTTP.TXT を開き、自身のファンクションにコピーします (既存のコードと置き換えます)。
- 以下に示すコードは、JSM サーバーへの接続を作成し、その後、JSON サーバー・サービスをロードします。これは、JSMX_OPEN 組み込み関数と SERVICE_LOAD サービス・コマンドを使用して行います。
- このファンクションをサービス iiiEMPLOYEEDEPTSECT にバインドすることによって、返されたデータがファンクションのフィールドに入ります。 III を自身のイニシャルに置き換えて、コードの以下で示されている行を変更します。
- ファンクションは、次の応答内のデータを読み込む前に、応答を返したいということをファンクションに伝える必要があります。 上記のコードの後に、次のコードを追加します。 バインドされているサービスが IIIEMPLOYEES となっています。これは返すデータを示しています。 上の 2. でバインドしたサービスは受信するデータです。
- 上記のコードの後に、次のコードを追加します。 社員マスターの各社員に対してデータを追加するロジックを追加しなければいけません。 SELECT/ENDSELECT ループ内に EMPLOYEE フラグメントを設定する JSM ロジックの挿入方法を確認してください。 Employee Id、 First Name、Surname、 Salary の各フィールドは、Employee の戻りパラメータのエレメントにすでにマッピングされています。 Nbr_Keys(*COMPUTE) の使い方に注目してください。Select 行を 1 つだけ書くことで、全社員、または1 つの部門に属する社員のみ、もしくは 1 つの部門の 1 つの課に属する社員のみを選択して返すことができます。
- 上記のコードの後に、応答を送信した後に JSM を閉じて強制的に応答を送信するコードを追加します。
- ファンクションをコンパイルします。IBM i サーバーを使用している場合は、サーバーにチェックインしてコンパイルします。
ロジックは以下のようになります。Function Options(*DIRECT)*サービスを開くUse Builtin(JSMX_OPEN) To_Get(#JSMXSTS #JSMMSG #JSMXHDLE1)Execute Subroutine(CHECK) With_Parms(#JSMXSTS #JSMMSG)*サービスのロードChange Field(#JSMXCMD) To('SERVICE_LOAD SERVICE(HTTPInboundJSONBindService) SERVICE_CONTENT(*HTTP) TRACE(*YES)')Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMXSTS #JSMMSG)Execute Subroutine(CHECK) With_Parms(#JSMXSTS #JSMMSG)*サービスをバインドして、HTTP 要求コンテンツを読み込むChange Field(#JSMXCMD) To('BIND SERVICE(IIIEMPLOYEEDEPTSECT) TYPE(*INBOUND) BINDTRACE(*YES) SERVICE_EXCHANGE(*FIELD)')Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMXSTS #JSMMSG)Execute Subroutine(CHECK) With_Parms(#JSMXSTS #JSMMSG)*サービスをバインドして応答を送信するChange Field(#JSMXCMD) To('BIND SERVICE(IIIEMPLOYEES) TYPE(*OUTBOUND) BINDTRACE(*YES) SERVICE_EXCHANGE(*FIELD)')Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMXSTS #JSMMSG)Execute Subroutine(CHECK) With_Parms(#JSMXSTS #JSMMSG)*ファイルからデータを取得Select Fields(#EMPNO #GIVENAME #SURNAME #SALARY) From_File(PSLMST1) With_Key(#DEPTMENT #SECTION) Nbr_Keys(*COMPUTE)Change Field(#JSMXCMD) To('SET FRAGMENT(EMPLOYEE) SERVICE_EXCHANGE(*FIELD)')Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMXSTS #JSMMSG)Execute Subroutine(CHECK) With_Parms(#JSMXSTS #JSMMSG)Endselect*応答の送信Change Field(#JSMXCMD) To('SEND BINDTRACE(*YES)')Use Builtin(JSMX_COMMAND) With_Args(#JSMXHDLE1 #JSMXCMD) To_Get(#JSMXSTS #JSMMSG)Execute Subroutine(CHECK) With_Parms(#JSMXSTS #JSMMSG)*JSM を閉じて、応答を強制的に送信するUse Builtin(JSMX_CLOSE) With_Args(#JSMXHDLE1) To_Get(#JSMXSTS #JSMMSG)*Check ルーチンSubroutine Name(CHECK) Parms((#JSMXSTS *RECEIVED) (#JSMMSG *RECEIVED))If Cond('#JSMXSTS *NE OK')Use Builtin(JSMX_CLOSE) With_Args(#JSMXHDLE1) To_Get(#JSMXSTS #JSMMSG)ExitEndifEndroutine
...





