Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 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
    languagejs
    {
      "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.
    • Image Modified



  • 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
languagetext
**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)

...