Program Samples

In this Topic Hide

i5 Program Call

Service Program

Data Retrieval

Native File Access sample

Data Queues

Data Queue Without Key

Data Queue With key

System Values

User Spaces

Active Job List

Job Log List

Data Areas

Spooled Files

PCML Program Call - PCML Description Used in the PHP Program

PCML Program Call 2 - PCML File External to PHP Program

List of an RPG Program, "TESTSTRUC", Called by the PCML Sample Programs  

Web Services

Web Services - Client Side

i5 Program Call

The i5 program call process contains the following PHP functions:

The sample PHP script below invokes an i5 program:

<?php

$conn = i5_connect($i5_server_ip, $i5_uname, $i5_pass);

if ($conn === false)

{

   print ("FAIL : Failed to connect to server : $i5_server_ip, with user name : $i5_uname and password : $i5_pass <br>\n");

   $errorTab = i5_error();

   var_dump($errorTab);

   die();

}

/* Prepare File for execution */

$desc = array (

array ("name"=>"code", "io"=>I5_INOUT, "type" => I5_TYPE_CHAR, "length"=> "10"),

array ("name"=>"name", "io"=>I5_INOUT, "type" => I5_TYPE_CHAR, "length"=> "10"),

);

$prog = i5_program_prepare("EACDEMO/TESTSTP2", $desc);

if ($prog === FALSE)

{

   $errorTab = i5_error();

   echo "Program prepare failed <br>\n";

   var_dump($errorTab);

   die();

}

/* Execute Program */

$params = array ("code"=>" ","name"=>" ");

$retvals = array("code"=>"code","name"=>"name");

$ret = i5_program_call($prog, $params, $retvals) ;

echo "The return values are: <br>", "Name: ", $name, "<br> Code: ", $code, "<br>";

if ($ret === FALSE)

{

   $errorTab = i5_error();

   echo "FAIL : i5_program_call failure code <br>";

   var_dump($errorTab);

   die();

}

$close_val = i5_program_close ($prog);

if ($close_val === false )

{

   print ("FAIL : i5_program_close returned fales, closing an open prog.<br>\n");

   $errorTab = i5_error();

   var_dump($errorTab);

}

i5_close($conn) || print ("FAIL : Failed to disconnect from server :$i5_server_ip");

?>

Back to Top

Service Program

<?php

// This program calls a service program (*SRVPGM), which was created using the following i5/OS commands:

// CRTRPGMOD SRCFILE(EACDEMO/QRPGLESRC) SRCMBR(TESTMOD)  

// CRTSRVPGM SRVPGM(EACDEMO/TESTSTRUC2) MODULE(EACDEMO/TESTMOD) EXPORT(*ALL)

$Hdlcon = i5_connect($connect, $user, $pass, array(I5_OPTIONS_JOBNAME => "PHPAIX"));

if (is_bool($Hdlcon) && $Hdlcon == FALSE)

die(i5_errormsg());

echo "Connected!<BR>";

$desc = array (

array ("name"=>"code", "io"=>I5_INOUT, "type" => I5_TYPE_CHAR, "length"=> "10"),

array ("name"=>"name", "io"=>I5_INOUT, "type" => I5_TYPE_CHAR, "length"=> "10"),

);

$ret = $prog = i5_program_prepare("EACDEMO/TESTP2SRV(TESTSTMOD)", $desc);

if (!$ret){

getError(I5_ERR_OK, -1);

} else {

echo "1. Prepare - It works! <br>";

}

$hdlPgm = $ret;

$parameter = array("code"=>" ", "name"=>" ");

$parmOut = array("code"=>"code", "name"=>"name");

$ret = i5_program_call($hdlPgm, $parameter, $parmOut);

if (!$ret){

getError(I5_ERR_OK, -1);

} else {

echo "2. Call - It works! <br>";

}

echo "code : $code<BR> name : $name<BR>";

?>

Back to Top

Data Retrieval

<?php

$Hdlcon = i5_connect($connect, $user, $pass);

if (!$Hdlcon) {

die(i5_errormsg());

}

$HdlFile = i5_open("eacdemo/sp_cust", I5_OPEN_READWRITE, $Hdlcon);

if (!is_bool($HdlFile))

{

echo "It works <br>\n";

}

$fealds = i5_list_fields($HdlFile);

$fetch_array = i5_fetch_array($HdlFile,I5_READ_FIRST);

$fetch_assoc = i5_fetch_assoc($HdlFile,I5_READ_NEXT);

$fetch_object = i5_fetch_object($HdlFile,I5_READ_PREV);

$fetch_row = i5_fetch_row($HdlFile,I5_READ_LAST);

print_r($fetch_array); echo"<br>\n <br>\n";

print_r($fetch_assoc); echo"<br>\n <br>\n";

print_r($fetch_object); echo"<br>\n <br>\n";

print_r($fetch_row); echo"<br>\n <br>\n";

$info = i5_info($HdlFile,1);

print_r($info); echo"<br>\n <br>\n";

$field_length = i5_field_len($HdlFile,1);

$field_name = i5_field_name($HdlFile,1);

$field_type = i5_field_type($HdlFile,1);

$field_scale = i5_field_scale($HdlFile,1);

echo "Field Name: {$field_name} <br>\n Field Lenght: {$field_length} <br>\n Field Type: {$field_type} <br>\n Field Scale: {$field_scale}<br>\n";

$list_fields = i5_list_fields($HdlFile);

print_r($list_fields);

$num_fields = i5_num_fields($HdlFile);

echo "<br>\n {$num_fields}";

$result = i5_result($HdlFile,2);

echo "<br>\n {$result}";

i5_close($Hdlcon);

?>

Back to Top

Native File Access sample

<?php

$conn = i5_connect($connect, $user, $pass);

if ($conn === false) die(i5_errormsg());

$file = i5_open("EACDEMO/SP_CUST", I5_OPEN_READWRITE, $conn);

if ($file === false) die(i5_errormsg());

i5_addnew($file);

i5_setvalue($file,array('11111', 'Kauai', 'Erica', 'Norm', '4-976 Hwy', 'Suite 103', 'Kapaa', 'HI', '94766', 'US', '808-555', '808-555'));

i5_update($file);

i5_edit($file);

i5_delete($file);

i5_cancel_edit($file);

$tabf = array(1500);

i5_range_from($file, FALSE, $tabf);

$tabf = array(1600);

i5_range_to($file, FALSE, $tabf);

$fetch = i5_fetch_row($file, I5_READ_FIRST);

echo $fetch[0], " ",$fetch[1], " ", $fetch[2], "<br>";

$fetch = i5_fetch_row($file, I5_READ_NEXT);

echo $fetch[0], " ",$fetch[1], " ", $fetch[2], "<br>";

i5_range_clear($file);

$fetch = i5_fetch_row($file, I5_READ_FIRST);

echo $fetch[0], " ",$fetch[1], " ", $fetch[2], "<br><br>";

i5_data_seek($file, 2);

$rowTab = i5_fetch_row($file);

echo $rowTab[0], " ",$rowTab[1], " ", $rowTab[2], "<br>";

$tab=array(1510);

$seek = i5_seek($file, "=", $tab);

$rowTab = i5_fetch_row($file);

echo $rowTab[0], " ",$rowTab[1], " ", $rowTab[2], "<br>";

$id = i5_bookmark($file);

echo $id, "<br>";

i5_new_record($file, array('1229', 'Kauai Dive Shoppe ', 'Irica', 'Norman', '4-976 Sugarloaf Hwy', 'Suite 103', 'Kapaa Kauai', 'HI', '94766-1234', 'US', '808-555-0269', '808-555-0278'));

i5_fetch_row($file,I5_READ_FIRST);

i5_update_record($file,array("FIRSTNAME"=>"Lina","LASTNAME"=>"Karasko"));

i5_delete_record($file);

$keys = i5_get_keys($file);

echo $keys;

i5_free_file($file);

?>

Back to Top

Data Queues

Data Queue Without Key

<?php

$conn = i5_connect($i5_server_ip, $i5_uname, $i5_pass);

if (!$conn) {

  die(i5_errormsg());

}

$description = array("Name"=>"DATA", "Type"=>I5_TYPE_CHAR, "Length"=>"50");

$queue = i5_dtaq_prepare("eacdemo/DTAQ_FIFO", $description);

$ret = i5_dtaq_send($queue,"","the dataqueue test data");

var_dump($ret); echo "<br>\n";

if(!$ret)  var_dump(i5_error());

$ret = i5_dtaq_receive($queue);

var_dump($ret);

i5_dtaq_close($queue);

i5_close($conn);

?>

Data Queue With key

<?php

$conn = i5_connect($i5_server_ip, $i5_uname, $i5_pass);

if (!$conn) {

  die(i5_errormsg());

}

$descriptionC = array("DSName"=>"PS", "DSParm"=>array(

array("Name"=>"PS1", "Type"=>I5_TYPE_CHAR, "Length"=>"10"),

array("Name"=>"PS2", "Type"=>I5_TYPE_PACKED, "Length"=>"10.4"),

array("Name"=>"PS3", "Type"=>I5_TYPE_CHAR, "Length"=>"10")

)

);

$dtaqHdl_KEY = i5_dtaq_prepare("EACDEMO/DTAQ_KEY", $descriptionC,10);

var_dump($dtaqHdl_KEY); echo "<br>\n";

$parameter = array("PS1"=>"test1", "PS2"=>13.1415, "PS3"=>"test2");

$key = "abcd";

$ret = i5_dtaq_send($dtaqHdl_KEY, $key, $parameter);

var_dump($ret); echo "<br>\n";

$ret = i5_dtaq_receive($dtaqHdl_KEY, "EQ", $key);

var_dump($ret);

i5_dtaq_close($dtaqHdl_KEY);

i5_close($conn);

?>

Back to Top

System Values

<?php

$conn = i5_connect($i5_server_ip, $i5_uname, $i5_pass);

print "Date is: ".i5_get_system_value("QDATE");

i5_close($conn);

?>

Back to Top

User Spaces

<?php

$conn = i5_connect($connect, $user, $pass);

if (!$Hdlcon) {

die(i5_errormsg());

}

$property = array(

I5_INITSIZE=>10,

I5_DESCRIPTION=>"Created by PHP",

I5_INIT_VALUE=>"A",

I5_EXTEND_ATTRIBUT=>"File",

I5_AUTHORITY=>"*ALL",

I5_LIBNAME=>"EACDEMO",

I5_NAME=>"USERSPACE"

);

$ret = i5_userspace_create($property);

if ($ret) echo "1. It works! <br>\n";

$description = Array(

array("Name"=>"filler0", "IO"=>I5_INOUT, "Type"=>I5_TYPE_CHAR, "Length"=>"64"),

array("Name"=>"generic", "IO"=>I5_INOUT, "Type"=>I5_TYPE_LONG),

array("Name"=>"filler", "IO"=>I5_INOUT, "Type"=>I5_TYPE_CHAR, "Length"=>"36"),

array("Name"=>"outputsize", "IO"=>I5_INOUT, "Type"=>I5_TYPE_LONG),

array("Name"=>"offsetInput", "IO"=>I5_INOUT, "Type"=>I5_TYPE_LONG)

);

 

$parameter = Array(

"filler0"=>"AAAA",

"generic"=>10,

"filler"=>"BBB",

"outputsize"=>100,

"offsetInput"=> 0

);

 

$parmOut = array("filler0"=>"filler0", "filler"=>"filler",

"generic"=>"generic", "outputsize"=>"outputsize",

"offsetInput"=>"offsetInput");

$UspcHdlBad = i5_userspace_prepare("EACDEMO/USERSPACE", $description);

if ($UspcHdlBad) echo "2. It works! <br>\n";

$ret = i5_userspace_put($UspcHdlBad, $parameter);

if ($ret) echo "3. It works! <br>\n";

$ret = i5_userspace_get($UspcHdl, $parmOut);

if (!$ret) echo "4. It works! <br>\n";

if ($ret) echo "5. It works!";

var_dump($ret);*/

$ret = i5_command("DLTUSRSPC USRSPC(EACDEMO/USERSPACE)");

if ($ret) echo "6. It works!";

i5_close($conn);

?>

Back to Top

Active Job List

<?php

$Hdlcon = i5_connect($connect, $user, $pass, array(I5_OPTIONS_JOBNAME => "PHPAIX"));

if (is_bool($Hdlcon) && $Hdlcon == FALSE){

die(i5_errormsg());}

 

echo "i5_job_list: ";

$ret = i5_job_list();

if (!$ret)

die(i5_errormsg());

else

echo "It works!<br>";

 

$listHdl = $ret;

echo 'i5_job_list_read: ';

$ret = i5_job_list_read($listHdl);

if (!$ret)

die(i5_errormsg());

 else

echo "It works! <br>";

 

echo 'i5_job_list_close: ';

$ret = i5_job_list_close($listHdl);

if (!$ret) {

die(i5_errormsg());

} else {

echo "It works! <br>";

}

 

$listHdl = i5_job_list(array(I5_JOBNAME=>"*ALL", I5_JOBTYPE=>"S"));

if (is_bool($listHdl))

die(i5_errormsg());

else

echo "List <BR>";

 

 

$a= 0;

$ret = true;

 

while($ret && $a < 3){

echo "<p>Message $a<BR>";

$ret = i5_job_list_read($listHdl);

$a ++;

if (is_bool($ret))

die(i5_errormsg());

else

{

print_r($ret);echo "<p>";

echo "Job queue Name : " . $ret[I5_JOB_QUEUE_NAME] . ", Response Id : " . $ret[I5_JOB_PROCESS_ID] . "
";

echo "I5_JOB_JOBMSGQFL : " . $ret[I5_JOB_JOBMSGQFL] . "<BR>";

}

}

$ret = i5_job_list_close($listHdl);

?>

Back to Top

Job Log List

<?php

$Hdlcon = i5_connect($connect, $user, $pass, array(I5_OPTIONS_JOBNAME => "PHPAIX"));

if (is_bool($Hdlcon) && $Hdlcon == FALSE){

die(i5_errormsg());}

 

$listHdl = i5_jobLog_list();

if (is_bool($listHdl))

die(i5_errormsg());

 else

echo "List<BR>";

 

$a= 0;

$ret = true;

 

while($ret && $a < 2){

echo "Message $a<BR>";

$ret = i5_jobLog_list_read($listHdl);

$a ++;

if (is_bool($ret))

die(i5_errormsg());

else

{

print_r($ret);echo "<p>";

echo "Message : " . $ret[I5_LOBJ_MSG]. ",<BR> data : ". $ret[I5_LOBJ_MSGDTA] . "<BR>";

}

}

$ret = i5_jobLog_list_close($listHdl);

if (is_bool($ret))

die(i5_errormsg());

 else {

print_r($ret);echo "<p>";

echo "Message : " . $ret[I5_LOBJ_MSG]. ",<BR> data : ". $ret[I5_LOBJ_MSGDTA] . "<BR>";

?>

Back to Top

Data Areas

<?php

$Hdlcon = i5_connect($connect, $user, $pass);

if (!$Hdlcon) {

die(i5_errormsg());

}

$ret = i5_data_area_create("eacdemo/MYDTA", "50");

if ($ret) echo "1.It works! <br>";

$ret = i5_data_area_write("eacdemo/MYDTA", "coucou");

if ($ret) echo "3.It works! <br>";

$ret = i5_data_area_read("eacdemo/MYDTA", 2, 4);

if ($ret) echo "4.It works!: ", $ret, "<br>";

$ret = i5_data_area_read("eacdemo/MYDTA");

if ($ret) echo "5.It works!: ", $ret, "<br>";

$ret = i5_data_area_write("eacdemo/MYDTA", "lina", 5, 45);

if ($ret) echo "6.It works! <br>";

$ret = i5_data_area_read("eacdemo/MYDTA", 1, 5);

if ($ret) echo "7.It works!: ", $ret, "<br>";

$ret = i5_data_area_read("eacdemo/MYDTA");

if ($ret) echo "8.It works!: ", $ret, "<br>";

$ret = i5_data_area_delete("eacdemo/MYDTA");

if ($ret) echo "9.It works! <br>";

?>

Back to Top

Spooled Files

<?php

$conn = i5_connect($connect, $user, $pass);

if (!$conn) die("<br>Connect fail");

echo "<br>================<br>";

echo "<br>connected.";

$spool = i5_spool_list(array("username"=>"lina"),$conn);

if ($spool)

{

$count = 0;

while (($a = i5_spool_list_read($spool)) && ($count <= 2))

{

        echo "<br>================<br>";

        var_dump($a);

        echo "<br>data {$count}:<br>";

        $data = i5_spool_get_data($a['SPLFNAME'], $a['JOBNAME'],

                              $a['USERNAME'], $a['JOBNBR'],  

                              $a['SPLFNBR']);

       if (is_bool($data)) var_dump(i5_error());

       var_dump($data);

       $count++;

   }

  

   i5_spool_list_close($spool);

}

else echo "No spool today.";

i5_close($conn);

XII. Object Listing

$conn = i5_connect($connect, $user, $pass);

if (!$conn) die("<br>Connect fail");

echo "<br>================<br>";

echo "<br>connected. <br>";

$objects = i5_objects_list("EACDEMO", "*ALL", "*PGM");

if ($objects) echo "1.It works! <br>";

$HdlObj = $objects;

$objects = i5_objects_list_read($HdlObj);

if (!is_bool($objects))

{

   echo "2.It works! <br>";

   print_r($objects); echo "<br>";

}

$continue = true;

$count = 0;

while($continue)

{

$objects = i5_objects_list_read($HdlObj);

if (is_bool($objects) && $objects == FALSE )

$continue = false;

else

{

   echo "3.It works! <br>";

   print_r($objects); echo "<br>";

}

$count ++;

if ($count == 2) break;

}

$objects = i5_objects_list_close($HdlObj);

if (is_bool($objects) && $objects == FALSE)

   $continue = false;

else

   echo "4.It works! <br>";

?>

Back to Top

PCML Program Call - PCML Description Used in the PHP Program

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Program call example using PCML</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="style.css" rel="stylesheet" type="text/css">

<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">

</head>

<body>

<?php

include("conn.php");

/* connection step  */

$Hdlcon = i5_connect($connect,$user, $pass, array(I5_OPTIONS_JOBNAME=>"I5JOB"));

// This is the PCML taken from the following i5/OS command:

// CRTRPGMOD SRCFILE(EACDEMO/QRPGLESRC) SRCMBR(TESTSTRUC)  PGMINFO(*PCML) INFOSTMF('/tmp/teststruc.pcml')

// we only defined some parameters as "output" to have minimal network load

// we also changed the program name tag to specify the "path" value for the program

// we also replace " with \" to have a correct PHP syntax. We also could load it from the IFS.

$description = "<pcml version=\"4.0\">                                                                

   <!-- RPG module: TESTSTRUC  -->                                                  

   <!-- created: 2006-10-12-11.46.56 -->                                            

   <!-- source: EACDEMO/QRPGLESRC(TESTSTRUC) -->                                    

   <!-- 5 -->                                                                       

   <struct name=\"S2\">                                                               

      <data name=\"ZOND2\" type=\"zoned\" length=\"10\" precision=\"5\" usage=\"inherit\" />  

      <data name=\"PACK2\" type=\"packed\" length=\"19\" precision=\"5\" usage=\"inherit\" />

      <data name=\"PACK3\" type=\"packed\" length=\"19\" precision=\"5\" usage=\"inherit\" />

      <data name=\"ALPH2\" type=\"char\" length=\"20\" usage=\"inherit\" />                 

   </struct>                                                                        

   <!-- 1 -->                                                                       

   <struct name=\"S1\">                                                               

      <data name=\"ZOND\" type=\"zoned\" length=\"10\" precision=\"5\" usage=\"inherit\" />   

      <data name=\"PACK1\" type=\"packed\" length=\"19\" precision=\"5\" usage=\"inherit\" />

      <data name=\"ALPH1\" type=\"char\" length=\"10\" usage=\"inherit\" />                 

   </struct>                                                                        

   <program name=\"TESTSTRUC\" path=\"/QSYS.LIB/EACDEMO.LIB/TESTSTRUC.PGM\">   

      <data name=\"CODE\" type=\"char\" length=\"10\" usage=\"output\" />                  

      <data name=\"S1\" type=\"struct\" struct=\"S1\" usage=\"inputoutput\" />                  

      <data name=\"S2\" type=\"struct\" struct=\"S2\" usage=\"inputoutput\" />                  

      <data name=\"PACK\" type=\"packed\" length=\"1\" precision=\"1\" usage=\"output\" />   

      <data name=\"CH10\" type=\"char\" length=\"19\" usage=\"output\" />                  

      <data name=\"CH11\" type=\"char\" length=\"20\" usage=\"output\" />                  

      <data name=\"CH12\" type=\"char\" length=\"29\" usage=\"output\" />                  

      <data name=\"CH13\" type=\"char\" length=\"33\" usage=\"output\" />                  

   </program>                                                                           

</pcml>                                                                                 

   ";

// define some input values

$pack3value=7789777.44;

$alph2value=4;

// now, prepare the program (only pcml parsing at this stage)

($hdlPgm = i5_program_prepare_PCML($description))

or trigger_error("Error while parsing PCML: " . i5_errormsg(), E_USER_ERROR);

// let's define some input values

$in_parameters = Array(

"S1"=>Array("ZOND"=>54.77, "PACK1"=>16.2, "ALPH1"=>"MyValue"),

"S2"=>Array("ZOND2"=>44.66, "PACK2"=>24444.99945, "PACK3"=>$pack3value, "ALPH2"=>$alph2value)

);

// now we need to define where to place output values; it will create new local variables

$out_parameters = array(

"S1"=>"S1_Value", "S2"=>"S2_Value",

"CH10"=>"CH10_Value", "CH11"=>"CH11_Value", "CH12"=>"CH12_Value", "CH13"=>"CH13_Value",

"CODE"=>"Code_Value", "PACK"=>"Pack"

);

// the call is made here

i5_program_call($hdlPgm, $in_parameters, $out_parameters)

or trigger_error("Error while executing program: " . i5_errormsg(), E_USER_ERROR);

// all variables are now filled with program results.

echo "<br>S1:"; var_dump($S1_Value);

echo "<br>S2:"; var_dump($S2_Value);

echo "<br>CH10:"; var_dump($CH10_Value);

echo "<br>CH11:"; var_dump($CH11_Value);

echo "<br>CH12:"; var_dump($CH12_Value);

echo "<br>CH13:"; var_dump($CH13_Value);

echo "<br>Code:"; var_dump($Code_Value);

echo "<br>Pack:"; var_dump($Pack);

 

?>

</body>

</html>

Back to Top

PCML Program Call 2 - PCML File External to PHP Program

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Program call example using PCML</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="style.css" rel="stylesheet" type="text/css">

<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">

</head>

<body>

<?php

include("conn.php");

/* connection step  */

$Hdlcon = i5_connect($connect,$user, $pass, array(I5_OPTIONS_JOBNAME=>"I5JOB"));

// This is the PCML taken from the following i5/OS command:

// CRTRPGMOD SRCFILE(EACDEMO/QRPGLESRC) SRCMBR(TESTSTRUC)  PGMINFO(*PCML) INFOSTMF('/tmp/teststruc.pcml')

// we only defined some parameters as "output" to have minimal network load

// we also changed the program name tag to specify the "path" value for the program

// we also replace " with \" to have a correct PHP syntax. We also could load it from the IFS.

// the PCML file is located in the same location as the PHP program

($description = file_get_contents("/www/zendcore/htdocs/teststruc.pcml"))

or trigger_error("Error while opening PCML file", E_USER_ERROR);

// define some input values

$pack3value=7789777.44;

$alph2value=4;

// now, prepare the program (only pcml parsing at this stage)

($hdlPgm = i5_program_prepare_PCML($description))

 or trigger_error("Error while parsing PCML: " . i5_errormsg(), E_USER_ERROR);

// let's define some input values

$in_parameters = Array(

"S1"=>Array("ZOND"=>54.77, "PACK1"=>16.2, "ALPH1"=>"MyValue"),

"S2"=>Array("ZOND2"=>44.66, "PACK2"=>24444.99945, "PACK3"=>$pack3value, "ALPH2"=>$alph2value)

);

// now we need to define where to place output values; it will create new local variables

$out_parameters = array(

"S1"=>"S1_Value", "S2"=>"S2_Value",

"CH10"=>"CH10_Value", "CH11"=>"CH11_Value", "CH12"=>"CH12_Value", "CH13"=>"CH13_Value",

"CODE"=>"Code_Value", "PACK"=>"Pack"

);

// the call is made here

i5_program_call($hdlPgm, $in_parameters, $out_parameters)

or trigger_error("Error while executing program: " . i5_errormsg(), E_USER_ERROR);

// all variables are now filled with program results.

echo "<br>S1:"; var_dump($S1_Value);

echo "<br>S2:"; var_dump($S2_Value);

echo "<br>CH10:"; var_dump($CH10_Value);

echo "<br>CH11:"; var_dump($CH11_Value);

echo "<br>CH12:"; var_dump($CH12_Value);

echo "<br>CH13:"; var_dump($CH13_Value);

echo "<br>Code:"; var_dump($Code_Value);

echo "<br>Pack:"; var_dump($Pack);

 

?>

</body>

</html>

Back to Top

List of an RPG Program, "TESTSTRUC", Called by the PCML Sample Programs  

D S1              DS

     D  ZOND                   1     10S 5

     D  pack1                  11    20P 5

     D  alph1                  21    30

     D S2              DS

     D  ZOND2                  1     10S 5

     D  pack2                  11    20P 5

     D  pack3                  21    30P 5

     D  alph2                  31    50

     D                SDS

     D  $PGM                    1      10

     D  $LIB                    81     90

     D  $JOB                    244   253

     D  $USER                   254   263

     D  $JOBNM                  264   269

     D INFDS           DS

     D  KEY                     369   369

     D  PAGRRN                  378   379B 0

     D*

     D F03             C                   CONST(X'33')

     C*-------------------------------------------------------------------

  ******************

     C     *ENTRY        PLIST

     C                   PARM                    CODE            10

     C                   PARM                    S1

     C                   PARM                    S2

     C                   PARM                    PACK              1 1

     C                   PARM                    ch10             19

     C                   PARM                    ch11             20

     C                   PARM                    ch12             29

     C                   PARM                    ch13             33

     **********************

     C                   MOVEL     'HELLO'       CODE

     C                   Z-SUB     0.5           PACK

     C                   eval      ch10 = *all'A'

     C                   eval      ch11 = *all'B'

     C                   eval      ch12 = *all'ZX'

     C                   eval      ch13 = *all'5'

     C                   eval      ZOND = 0 - zond

     C                   eval      pack1 = 0 - pack1

     C                   eval      alph1 ='alph1'

     C                   - service side eval      ZOND2 = 0 - zond2

     C                   eval      pack2 = 0-pack2

     C                   eval      pack3 =0 - pack3

     C                   eval      alph2 ='alph2'

     C*

     C                   SETON                                        LR

     C                   RETURN

Back to Top

Web Services

<?php

/*

This service invokes a RPG program with two parameters

*/

class i5_program_service {

 

private $conn = false;

function __construct() {

    

        $this->conn = i5_connect('127.0.0.1', 'user', 'password'/*, $connection_parameters*/);

        if (!is_resource($this->conn)) {

     throw new SoapFault('i5_program_service', 'Connection to i5 server failed, use i5_errormsg() to get the failure reason');

    }

 

}

 

public function service_for_i5_program($var_0, $var_1) {

        $description = Array (

        array ('Name' => 'code', 'IO' => I5_INOUT, 'Type' => I5_TYPE_CHAR, 'Length' => '10'),

        array ('Name' => 'name', 'IO' => I5_INOUT, 'Type' => I5_TYPE_CHAR, 'Length' => '10'));

    

        $prog = i5_program_prepare('eacdemo/teststp2', $description, $this->conn);

        if (is_resource($prog)) {   

    

         /* Execute Program */

            $params = array (

            'code' => $var_0, 'name' => $var_1);

           

            $retvals = array(

            'code' => 'ret_val_1', 'name' => 'ret_val_2');

            $ret = i5_program_call($prog, $params, $retvals) ;

            if ($ret === true) {

                 $ret = array($ret_val_1, $ret_val_2);

                 return $ret;

            }

            

            else {

                throw new SoapFault('i5_program_service', 'Failed to call the program, use i5_errormsg() to get the failure reason');

            }

                

            if (!i5_program_close ($prog) ) {

                 throw new SoapFault('i5_program_service', 'Failed to free program resource handle, use i5_errormsg() to get the failure reason');

            }  

        }

      

        else {

            throw new SoapFault('i5_program_service', 'Program prepare failed, use i5_errormsg() to get the failure reason');      

        }   

}

    function __destruct() {

    

    if (!i5_close($this->conn)) {

            // Failed to disconnect from i5 server, use i5_errormsg() to get the failure reason

        }

    }

}

ini_set('soap.wsdl_cache_enabled', '0');

$server = new SoapServer('zend.wsdl');

$server->setClass('i5_program_service');

$server->handle();

?>

Web Services - Client Side

<?php

/*

This client calls the above service using ’r;zend.wsdl’ XML file generated by the WSDL Wizard in the Zend Studio.

/*

ini_set('soap.wsdl_cache_enabled', '0');

$my_client =  new SoapClient('zend.wsdl');

try{

var_dump($my_client->service_for_i5_program('111', ' '));    

} catch (SoapFault $exception) {

    echo $exception;       

  }       

                                    

?

 

 

Related Links

Related Links:

PHP Toolkit for IBM i

PHP Toolkit Functions

PHP Toolkit Data Description