Passing parameters by value

Post Reply
mattsura
Posts: 12
Joined: Mon Apr 26, 2010 9:56 am

Passing parameters by value

Post by mattsura » Mon Jan 11, 2016 9:36 pm

Hello,

I have a problem trying to call a service program which has some parameters passed by value.
The same program works fine if the parameters are set to be passed by reference.

PHP Code:

Code: Select all

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');

require_once('ToolkitService.php');
require_once('iToolkitService.php');

$databaseName = "*LOCAL";
$namingMode = DB2_I5_NAMING_ON; 
$userdb = "USERNAME";
$passdb = "PASSWORD";
											   
$db = db2_connect($databaseName, $userdb, $passdb, array('i5_naming' => $namingMode));

$ToolkitServiceObj = ToolkitService::getInstance($db, $namingMode);
$ToolkitServiceObj->setToolkitServiceParams(array('stateless'=>true, 'debug'=>true));
		  
$id = "a123";
$usr = "mattia";
$OldPsw = "a123";
$NewPsw = "a456";
$errMsg = "";
$param = array();
$retParam = null;
$param[] = $ToolkitServiceObj->AddParameterChar('in', 10, 'group id', 'GroupId', $id);
$param[] = $ToolkitServiceObj->AddParameterChar('in', 50, 'user', 'user', $usr,'on');
$param[] = $ToolkitServiceObj->AddParameterChar('in', 50, 'old psw', 'OldPsw', $OldPsw,'on'); //VALUE
$param[] = $ToolkitServiceObj->AddParameterChar('in', 50, 'new psw', 'NewPsw', $NewPsw,'on'); //VALUE
$param[] = $ToolkitServiceObj->AddParameterBin('both', 271, 'Error String', 'dsErr', $errMsg);
  
$result = $ToolkitServiceObj->PgmCall('MODGRP', '', $param, $retParam, array('func'=>'GRP_CHANGEPWD'));
if(!$result) {
	$msg = 'Error calling program. Code: ' . $ToolkitServiceObj->getErrorCode() . ' Msg: ' . $ToolkitServiceObj->getErrorMsg();       
	echo $msg;
}

//output:
//Error calling program. Code: UNEXPECTED Msg: XML run loop failed (p(54) 

?>
debug.log:

Code: Select all

Creating new conn with database: 'Resource id #2', user or i5 naming flag: '1', transport: 'ibm_db2', persistence: ''
Re-using an existing db connection with schema separator: /
Exec start: 2016-01-11 22:07:57
Version of toolkit front end: 1.5.0
IPC: ''. Control key: *cdata *here
Stmt: call ZENDSVR6/iPLUG10M(?,?,?,?) with transport: ibm_db2
Input XML: <?xml version="1.0" encoding="ISO-8859-1" ?>
<script>
<pgm name='MODGRP' lib='' func='GRP_CHANGEPWD'>
<parm io='in' comment='Id gruppo'><data var='GroupId' type='10A'>a123</data></parm>
<parm io='in' comment='utente'><data var='Utente' type='50A' varying='on'>mattia</data></parm>
<parm io='in' comment='old psw'><data var='OldPsw' type='50A' varying='on'>a123</data></parm>
<parm io='in' comment='new psw'><data var='NewPsw' type='50A' varying='on'>a456</data></parm>
<parm comment='Error String'><data var='dsErr' type='271B' /></parm>
</pgm>
</script>
Output XML: <?xml version="1.0" encoding="ISO-8859-1" ?>
<report>
<version>XML Toolkit 1.8.3</version>
<error>
<errnoxml>1100004</errnoxml>
<xmlerrmsg><![CDATA[XML run loop failed]]></xmlerrmsg>
<xmlhint><![CDATA[p(54) <pgm name='MODGRP' lib='' func='GRP_CHANGEPWD']]></xmlhint>
</error>
<error>
<errnoxml>1000009</errnoxml>
<xmlerrmsg><![CDATA[ILECALL failed]]></xmlerrmsg>
<xmlhint><![CDATA[GRP_CHANGEPWD]]></xmlhint>
</error>
<error>
<errnoxml>1100016</errnoxml>
<xmlerrmsg><![CDATA[XML run pgm failed]]></xmlerrmsg>
<xmlhint><![CDATA[<pgm name='MODGRP' lib='' func='GRP_CHANGEPWD'>
<parm io='i]]></xmlhint>
</error>
<error>
<errnoxml>1100004</errnoxml>
<xmlerrmsg><![CDATA[XML run loop failed]]></xmlerrmsg>
<xmlhint><![CDATA[p(54) <pgm name='MODGRP' lib='' func='GRP_CHANGEPWD']]></xmlhint>
</error>
<xmloutput><![CDATA[<?xml version="1.0" encoding="ISO-8859-1" ?>
<script>
<pgm name='MODGRP' lib='' func='GRP_CHANGEPWD'>
</pgm>
]]></xmloutput>
<jobinfo>
<jobipc></jobipc>
<jobipcskey>FFFFFFFF</jobipcskey>
<jobname>QSQSRVR</jobname>
<jobuser>QUSER</jobuser>
<jobnbr>130511</jobnbr>
<jobsts>*ACTIVE</jobsts>
<curuser>IPBACKUP</curuser>
<ccsid>1144</ccsid>
<dftccsid>1144</dftccsid>
<paseccsid>0</paseccsid>
<langid>ITA</langid>
<cntryid>IT</cntryid>
<sbsname>QSYSWRK</sbsname>
<sbslib>QSYS</sbslib>
<curlib></curlib>
<syslibl>QSYS QSYS2 QHLPSYS QUSRSYS</syslibl>
<usrlibl>QTEMP BBSAVE QGPL</usrlibl>
<jobcpffind>see log scan, not error list</jobcpffind>
</jobinfo>
<joblogscan>
<joblogrec>
<jobcpf>CPF1124</jobcpf>
<jobtime><![CDATA[11/01/16  21:07:57,750365]]></jobtime>
<jobtext><![CDATA[Lavoro 130511/QUSER/QSQSRVR avviato il 11/01/16 alle]]></jobtext>
</joblogrec>
<joblogrec>
<jobcpf>CPF1301</jobcpf>
<jobtime><![CDATA[11/01/16  21:07:57,750365]]></jobtime>
<jobtext><![CDATA[IPBACKUP QWTCCCHJ main 129 ACGDTA per 130511/QUSER/QSQSRVR non è stato registrato su]]></jobtext>
</joblogrec>
<joblogrec>
<jobcpf>CPF1301</jobcpf>
<jobtime><![CDATA[11/01/16  21:07:57,750365]]></jobtime>
<jobtext><![CDATA[IPBACKUP QSQSRVR QSQSRVR 8584 ACGDTA per 130511/QUSER/QSQSRVR non è stato registrato su]]></jobtext>
</joblogrec>
<joblogrec>
<jobcpf>*NONE</jobcpf>
<jobtime><![CDATA[11/01/16  21:07:57,750365]]></jobtime>
<jobtext><![CDATA[IPBACKUP QSQSRVR QSQSRVR 8675 QSQSRVR QSQSRVR 8675 User Profile = IPBACKUP]]></jobtext>
</joblogrec>
<joblogrec>
<jobcpf>CPF9898</jobcpf>
<jobtime><![CDATA[11/01/16  21:07:57,750365]]></jobtime>
<jobtext><![CDATA[IPBACKUP QSQSRVR QSQSRVR 8766 QSQSRVR QSQSRVR 8766 SERVER MODE CONNECTING JOB IS 130081/QTMHHTTP/ZENDSVR6.]]></jobtext>
</joblogrec>
<joblogrec>
<jobcpf>MCH3601</jobcpf>
<jobtime><![CDATA[11/01/16  21:07:57,750365]]></jobtime>
<jobtext><![CDATA[IPBACKUP SYSMSGT MSG_SETERRID 2000 SYSMSGT MSG_SETERRID 2000 Puntatore non impostato per ubicazione di riferimento.]]></jobtext>
</joblogrec>
</joblogscan>
<joblog job='QSQSRVR' user='QUSER' nbr='130511'>
<![CDATA[5770SS1 V7R1M0 100423                 Visual. registr. del lavoro                   S21B3E6V 11/01/16 21:07:58          Pag.    1
  Nome del lavoro  . . . . . . :   QSQSRVR         Utente  . . . . . :   QUSER        Numero . . . . . . . . . . . :   130511
  Descrizione del lavoro . . . :   QDFTSVR         Libreria  . . . . :   QGPL
IDMSG      TIPO                    SEV  DATA      ORA              DA   PROG    LIBRERIA    INST     A  PROG     LIBRERIA    INST
CPF1124    Informazioni            00   11/01/16  17:19:14,181179  QWTPIIPP     QSYS        04C0     *EXT                    *N
                                     Messaggio . . . :   Lavoro 130511/QUSER/QSQSRVR avviato il 11/01/16 alle
                                       17:19:14 nel sottosistema QSYSWRK in QSYS. Lavoro immesso nel sistema il
                                       11/01/16 alle 17:19:14..
CPF1301    Informazioni            30   11/01/16  21:05:58,391010  QWTCHGJB     QSYS        11F5     QWTCCCHJ    QSYS        *STMT
                                     Dall'utente . . . . . . . . :   IPBACKUP
                                     Al modulo . . . . . . . . . :   QWTCCCHJ
                                     Alla procedura  . . . . . . :   main
                                     Istruzione  . . . . . . . . :   129
                                     Messaggio . . . :   ACGDTA per 130511/QUSER/QSQSRVR non è stato registrato su
                                       giornale; codice d'errore 1.
                                     Causa  . . . : I dati di account della risorsa Lavoro per il lavoro
                                       130511/QUSER/QSQSRVR non sono stati registrati sul giornale di account di
                                       sistema QSYS/QACGJRN. -- I codici d'errore e i loro significati sono i
                                       seguenti: -- 1-Il valore di sistema del livello di account (QACGLVL)
                                       indicava che questo livello di account delle risorse non doveva essere
                                       eseguito quando il lavoro è immesso nel sistema. -- 2-Il giornale di account
                                       QSYS/QACGJRN non può ricevere i dati. I dati di account sono stati inviati
                                       alla registrazione cronologica (QHST) come testo del messaggio CPF1303. Per
                                       l'azione correttiva, consultare CPF1302 nella registrazione cronologica
                                       (QHST). -- 3-Il giornale di account QSYS/QACGJRN è stato allocato ad un
                                       altro lavoro. I dati di account sono stati inviati alla registrazione
                                       cronologica (QHST) come testo del messaggio CPF1303.
CPF1301    Informazioni            30   11/01/16  21:07:57,688138  QWTCHGJB     QSYS        11F5     QSQSRVR     QSYS        *STMT
                                     Dall'utente . . . . . . . . :   IPBACKUP
                                     Al modulo . . . . . . . . . :   QSQSRVR
                                     Alla procedura  . . . . . . :   QSQSRVR
                                     Istruzione  . . . . . . . . :   8584
                                     Messaggio . . . :   ACGDTA per 130511/QUSER/QSQSRVR non è stato registrato su
                                       giornale; codice d'errore 1.
                                     Causa  . . . : I dati di account della risorsa Lavoro per il lavoro
                                       130511/QUSER/QSQSRVR non sono stati registrati sul giornale di account di
                                       sistema QSYS/QACGJRN. -- I codici d'errore e i loro significati sono i
                                       seguenti: -- 1-Il valore di sistema del livello di account (QACGLVL)
                                       indicava che questo livello di account delle risorse non doveva essere
                                       eseguito quando il lavoro è immesso nel sistema. -- 2-Il giornale di account
                                       QSYS/QACGJRN non può ricevere i dati. I dati di account sono stati inviati
                                       alla registrazione cronologica (QHST) come testo del messaggio CPF1303. Per
                                       l'azione correttiva, consultare CPF1302 nella registrazione cronologica
                                       (QHST). -- 3-Il giornale di account QSYS/QACGJRN è stato allocato ad un
                                       altro lavoro. I dati di account sono stati inviati alla registrazione
                                       cronologica (QHST) come testo del messaggio CPF1303.
*NONE      Completamento                11/01/16  21:07:57,688165  QSQSRVR      QSYS        *STMT    QSQSRVR     QSYS        *STMT
                                     Dall'utente . . . . . . . . :   IPBACKUP
                                     Dal modulo  . . . . . . . . :   QSQSRVR
                                     Dalla procedura . . . . . . :   QSQSRVR
                                     Istruzione  . . . . . . . . :   8675
                                     Al modulo . . . . . . . . . :   QSQSRVR
                                     Alla procedura  . . . . . . :   QSQSRVR
                                     Istruzione  . . . . . . . . :   8675
                                     Messaggio . . . :   User Profile = IPBACKUP
CPF9898    Completamento           40   11/01/16  21:07:57,688275  QSQSRVR      QSYS        *STMT    QSQSRVR     QSYS        *STMT
 5770SS1 V7R1M0 100423                 Visual. registr. del lavoro                   S21B3E6V 11/01/16 21:07:58          Pag.    2
  Nome del lavoro  . . . . . . :   QSQSRVR         Utente  . . . . . :   QUSER        Numero . . . . . . . . . . . :   130511
  Descrizione del lavoro . . . :   QDFTSVR         Libreria  . . . . :   QGPL
IDMSG      TIPO                    SEV  DATA      ORA              DA   PROG    LIBRERIA    INST     A  PROG     LIBRERIA    INST
                                     Dall'utente . . . . . . . . :   IPBACKUP
                                     Dal modulo  . . . . . . . . :   QSQSRVR
                                     Dalla procedura . . . . . . :   QSQSRVR
                                     Istruzione  . . . . . . . . :   8766
                                     Al modulo . . . . . . . . . :   QSQSRVR
                                     Alla procedura  . . . . . . :   QSQSRVR
                                     Istruzione  . . . . . . . . :   8766
                                     Messaggio . . . :   SERVER MODE CONNECTING JOB IS 130081/QTMHHTTP/ZENDSVR6.
                                     Causa  . . . : Questo messaggio è usato da programmi applicativi come un
                                       messaggio di uscita generico.
MCH3601    Uscita                  40   11/01/16  21:07:57,750365  SYSMSG       BBSAVE      *STMT    SYSMSG      BBSAVE      *STMT
                                     Dall'utente . . . . . . . . :   IPBACKUP
                                     Dal modulo  . . . . . . . . :   SYSMSGT
                                     Dalla procedura . . . . . . :   MSG_SETERRID
                                     Istruzione  . . . . . . . . :   2000
                                     Al modulo . . . . . . . . . :   SYSMSGT
                                     Alla procedura  . . . . . . :   MSG_SETERRID
                                     Istruzione  . . . . . . . . :   2000
                                     Messaggio . . . :   Puntatore non impostato per ubicazione di riferimento.
                                     Causa  . . . : È stato usato un puntatore, direttamente o come puntatore di
                                       base, che non è stato impostato ad un indirizzo.
]]>
</joblog>
</report>

Exec end: 2016-01-11 22:07:58. Seconds to execute: 0.86709189414978.
Versions:
PHP Toolkit API (front end): 1.5.0
XMLSERVICE (back end): XML Toolkit 1.8.3


I found out an undocumented parameter 'by' on AddParameterChar, which can be set to ref/val but I had no luck trying to use it.

Any Idea?

Thanks,
Mattia.

Post Reply