Versions Compared

Key

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

This command API is used to execute an IBM i CL command. 

Info

Note: In Profound.js release 7.10.0, API pjs.runCommand() was improved to work very similar to the C library function system() as called by RPG programs, with the following additions:

  • 2nd optional parameter ignoreError

  • 3rd optional parameter msgId.

  • return value of -1, 1, or 0.

These changes are backward-compatible with earlier releases of Profound.js; i.e. any current Profound.js modules that do NOT use these new features will behave as before.

  • 2nd optional parameter ignoreError

  • 3rd optional parameter msgId.

  • return value of -1, 1, or 0.

Parameters

  1. Command - A string containing a CL command to execute.

  2. ignoreError - optional boolean value: “true” = ignore error if command fails; “false” = throw error if command fails. Default is “false”.

  3. msgId - optional strongly-defined char(7) field to be updated with the error MsgId if the command fails.

...

  • -1 : null is passed for command

  • 1: command fails

  • 0: command is successful

Exception Handling

An If the command fails, an Error instance will be thrown with the following properties, if the 2nd optional parameter ignoreError is not specified or “false”.

...

RPG Equivalent 

QCMDEXC System API or C library function system() .

Examples

Example 1: Check for existence of an object

...

Code Block
var command = "CRTDUPOBJ OBJ(ORDERSP) FROMLIB(DATALIB) OBJTYPE(*FILE) TOLIB(QTEMP) NEWOBJ(WORKFILE) DATA(*NO)";
pjs.runCommand(command);

Example 3: Run a command with parameters with return value (this feature is available since Profound.js

...

6.0.0)
Code Block
CL code:
DCL        VAR(&NBRRCD) TYPE(*DEC) LEN(10 0)         
RTVMBRD    FILE(PJSTEST/PRODUCTSP) NBRCURRCD(&NBRRCD)

PJS code:
  pjs.define("nbrRcd", { type: 'packed', length: 10, decimals: 0});
  pjs.runCommand(`RTVMBRD FILE(PJSTEST/PRODUCTSP) NBRCURRCD(&nbrRcd)`);
  console.log(`nbrRcd = ${nbrRcd}`);

...

Examples for error-handling

Example

...

4: No error-handling: run-time error is thrown if command has error
Code Block
  pjs.runCommand(`CHKOBJ OBJ(MYLIB/MYFILE) OBJTYPE(*FILE)`);
  
  Error thrown:
  Profound.js Error: Object MYFILE in library MYLIB not found. : CPF9801 - Cause . . . . . :   The object MYFILE in library MYLIB type *FILE not found.  The object name, library name, or the object type is not correct.  If the library name is not specified, the object may be in a library that is not contained in the library list. Recovery  . . . :   Correct the object name, library name, or object type.  If the library name was not specified, specify the library name and try the request again.
    at profound.runCommand (c:\dev\profoundjs\profoundjs\api\runCommand.js:73:29)
    at process.processTicksAndRejections (c:\dev\profoundjs\lib\internal\process\task_queues.js:95:5)
    at async Object.app (c:\dev\profoundjs\modules\ado12345\mypgm_01.js:3:5)
    at async profound.call (c:\dev\profoundjs\profoundjs\api\call.js:162:25)
    at async profound.utils.<computed> [as handleExternalCall] (c:\dev\profoundjs\profoundjs\dat\bdba69cb3be3b6c.js:1:23224)
    at async Strand._fn (c:\dev\profoundjs\profoundjs\server\controller.js:221:11)
    at async C:\dev\profoundjs\node_modules\profoundjs-strands\index.js:29:18
    at async Strand.run (C:\dev\profoundjs\node_modules\profoundjs-strands\index.js:28:16) {statusCode: 'CPF9801', name: 'Profound.js Error', appJob: undefined, currUser: undefined, stack: 'Profound.js Error: Object MYFILE in library M…_modules\\profoundjs-strands\\index.js:28:16)', …}

Example

...

5: Use try/catch
Code Block
CL code:
CHKOBJ     OBJ(MYLIB/MYFILE) OBJTYPE(*FILE)   
MONMSG     MSGID(CPF0000)                     

PJS code:
  try {
    pjs.runCommand(`CHKOBJ OBJ(MYLIB/MYFILE) OBJTYPE(*FILE)`);
  } catch (error) {
    console.log(`handle error here if needed`);
  }
  

Example

...

6: Specify 2nd optional parameter ignoreError as “true”
Code Block
CL code:
CHKOBJ     OBJ(MYLIB/MYFILE) OBJTYPE(*FILE)  
MONMSG     MSGID(CPF0000)                    

PJS code:
  pjs.runCommand(`CHKOBJ OBJ(MYLIB/MYFILE) OBJTYPE(*FILE)`, true);

Example

...

7: Specify 2nd optional parameter ignoreError as “true”, and specify a MsgId field to get error MsgId
Code Block
CL code:
DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)         
CHKOBJ     OBJ(MYLIB/MYFILE) OBJTYPE(*FILE)       
MONMSG     MSGID(CPF0000) EXEC(DO)                
  RCVMSG     MSGID(&MSGID)                        
  /* handle error based on MsgId here */          
ENDDO                                             

PJS code:
  pjs.define("msgId", {type: 'char', length: 7});
  pjs.runCommand(`CHKOBJ OBJ(MYLIB/MYFILE) OBJTYPE(*FILE)`, true, msgId);
  if (msgId != "") {
    console.log(`msgId = ${msgId}`);
    // handle error based on msgId here
  }

Example

...

8: Specify 2nd optional parameter ignoreError as “true”, specify a MsgId field to get error MsgId, and check return value
Code Block
CL code:
DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)      
CHKOBJ     OBJ(MYLIB/MYFILE) OBJTYPE(*FILE)    
MONMSG     MSGID(CPF0000) EXEC(DO)             
  RCVMSG     MSGID(&MSGID)                     
  /* handle error based on MsgId here */       
ENDDO                                          

PJS code:
  pjs.define("msgId", { type: 'char', length: 7});
  if (pjs.runCommand(`CHKOBJ OBJ(MYLIB/MYFILE) OBJTYPE(*FILE)`, true, msgId) != 0) {
    console.log(`msgId = ${msgId}`);
    // handle error based on msgId here
  }

Example

...

9: MONMSG for a specific error MsgId
Code Block
CL code:
DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                  
CHKOBJ     OBJ(MYLIB/MYFILE) OBJTYPE(*FILE) MBR(MYMBR)     
MONMSG     MSGID(CPF9815) EXEC(DO)                         
  RCVMSG     MSGID(&MSGID)                                 
  /* handle error member-not-found here */                 
ENDDO                                                      

PJS code:
  try {
    pjs.runCommand(`CHKOBJ OBJ(MYLIB/MYFILE) OBJTYPE(*FILE) MBR(MYMBR)`);
  } catch (error) {
    if (error.statusCode == "CPF9815")
      console.log(`handle error member-not-found here`);
    else
      throw (error); // throw other errors
  }

...