...
- Navigate to the workspace "pjstips".
- Click New/Module File.
Click Edit/Source, to bring up the Source view.
- Clear the current default code, and enter the code below.
Code Block language js { "routines": [ { "name": "routine1", "inputs": [ { "type": "decimal", "ibmiLength": 4, "name": "custno", "ibmiDecimals": 0 } ], "outputs": [ { "type": "string", "ibmiLength": 30, "name": "name" } ], "steps": [ { "text": "Consume REST service", "answers": { "plugin": "Custom:web-service", "uri": "http://localhost:8081/run/pjstips/pjstips_02_3", "method": "POST", "headers": "{\"Content-Type\": \"application/x-www-form-urlencoded\"}", "body": "{\n \"custno\": input[\"custno\"]\n}", "json": true, "auth": "", "capture_response": true, "capture_on_error": false, "capture_as": "Value", "specific_property": "", "destination": "Work variable", "work_variable": "myres" } }, { "text": "Set Module output", "answers": { "plugin": "Program Data:set-module-output", "module-output-values": { "name": "myres[\"name\"]" } } } ] } ] }
- Click Edit/Design, to bring up the Design view.
- Click Home/Save As, and save as pjstips_04_1.module.json.
- You've created a low-code module, as shown below, with a routine named "routine1" that:
- Takes an input parameter of "custno".
- Uses plug "Consume REST service" to issue a POST request to URL http://localhost:8081/run/pjstips/pjstips_02_3 (created in a previous example).
- The input "custno" is specified in the "body" of the POST request.
- The returned JSON object from the REST web service is saved in a work variable named "myres".
- The value of myres["name"] is used to set the output value output["name"].
- But, it has a bug; we'll learn how to debug this problem.
- You can call this low-module from another low-code module, from another "regular" (i.e. NOT low-code) PJS module, or from an RPG program. To call it from an RPG program, use the code generated in the panel "IBM i Call Interface" panel.
...
Code Block | ||
---|---|---|
| ||
**free Dcl-PR PJSCALL ExtPgm; ParmType Char(30) Const; ModuleID VarUCS2(500) Const; RoutineName VarUCS2(70) Const; InputParms Char(16773104) Const Options(*Varsize:*Omit:*NoPass); InputParmSize Int(10) Const Options(*Omit:*NoPass); OutputParms Char(16773104) Options(*Varsize:*Omit:*NoPass); OutputParmSize Int(10) Const Options(*Omit:*NoPass); End-PR; Dcl-DS InputDS Qualified Inz; custno Zoned(4: 0); End-DS; Dcl-DS OutputDS Qualified Inz; name VarChar(30); End-DS; InputDS.custno = 1234; // pass input to the low-code module in "InputDS" Monitor; PJSCALL('*MODULE' : 'pjstips:pjstips_04_1.module.json' : 'routine1' : InputDS : %Size(InputDS) : OutputDS : %Size(OutputDS) ); On-Error; EndMon; dsply OutputDS.name; // output from the low-code module in "OutputDS" *inlr = *on; return; |
- When you use the RPG program to call this low-code module, you'll get an error similar to this:
No Format |
---|
2023-01-12 17:18:17 | Session 15A8388C315188097F933049F61E80008712FB286E1C92B80FF342A2E9F69167 | User TNGUYEN | Job TNGUYENAA | Job# 685033 null: TypeError: str.replace is not a function message: "str.replace is not a function" stack: "TypeError: str.replace is not a function at Querystring.rfc3986 (c:\Users\Tien Nguyen\Desktop\profoundjs\node_modules\request\lib\querystring.js:43:14) at Request.json (c:\Users\Tien Nguyen\Desktop\profoundjs\node_modules\request\request.js:1287:30) at Request.init (c:\Users\Tien Nguyen\Desktop\profoundjs\node_modules\request\request.js:406:10) at new Request (c:\Users\Tien Nguyen\Desktop\profoundjs\node_modules\request\request.js:127:8) at request (c:\Users\Tien Nguyen\Desktop\profoundjs\node_modules\request\index.js:53:10) at Object.profound.sendRequest (c:\Users\Tien Nguyen\Desktop\profoundjs\profoundjs\api\sendRequest.js:88:3) |
...