× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.


  • Subject: Re: AS400 Toolbox problems - ServiceProgramCall
  • From: Gary L Peskin <garyp@xxxxxxxxxxxx>
  • Date: Thu, 16 Aug 2001 11:37:59 -0700
  • Organization: The Firstech Corporation

You have a choice, declared in the called procedure:
  Pass by reference
  Pass by value
  Pass by read-only reference

Gary

Dave Wall wrote:
> 
> Sorry it took so long to get back to you.  I don't know this level of
> detail concerting RPG so I asked around trying to find out if character
> parameters in RPG are passed on the stack or if a pointer is passed.  No
> one answered my question but I would think they would be passed by
> reference.  I would think it would work better if it was pass by reference.
> Anyone else on the forum know how character parameters are passed in RPG?
> 
> David Wall
> AS/400 Toolbox for Java
> 
> 
>                     "Price, Chris"
>                     <chris_price@nsb.c       To:     
>"'JAVA400-L@midrange.com'" <JAVA400-L@midrange.com>
>                     o.uk>                    cc:
>                     Sent by:                 Subject:     RE: AS400 Toolbox 
>problems - ServiceProgramCall
>                     owner-java400-l@mi
>                     drange.com
> 
> 
>                     08/14/2001 10:18
>                     AM
>                     Please respond to
>                     JAVA400-L
> 
> 
> 
> Thanks for your example.
> 
> Unfortunately it didn't work on my system as we don't seem to have a
> QTOCNETSTS service program.
> 
> I'm trying to call my own service program, written in RPG IV.
> The Java class sets the String input parameter to a test value, and calls
> the procedure. The procedure compares the passed in string to a value, and
> if the same returns 99, otherwise returns -1. If written as a service
> program, the return value is always -1. Yet if I convert the service
> program
> into a program, making the nessesscary changes to the class, the return
> value is 99.
> 
> Here's a sample of my Java & RPG code:
> 
> public class Temp
> {
> public static void main(String[] parameters) {
> 
>     AS400 as400 = new AS400();
> 
>     QSYSObjectPathName sprogramName =
>         new QSYSObjectPathName("R1005DVOBJ", "CJPTEST", "SRVPGM");
> 
>     ServiceProgramCall spgm = new ServiceProgramCall(as400);
> 
>     //Service Program Call
>     try {
>         // One Parameter - String in. Returns short
> 
>         ProgramParameter[] parmlist = new ProgramParameter[1];
> 
>         AS400Text text1 = new AS400Text(10, as400);
>         byte[] text = text1.toBytes("CHRISPRICE");
> //        parmlist[0] = new ProgramParameter(text);
>         parmlist[0] = new ProgramParameter();
>         parmlist[0].setInputData(text);
>         parmlist[0].setParameterType(ProgramParameter.PASS_BY_VALUE);
> 
>         //run the serivce program
>         spgm.setProgram(sprogramName.getPath(), parmlist);
>         spgm.setProcedureName("CJPTEST_PROC");
>         if (spgm.run() != true) {
>             AS400Message[] msgList = spgm.getMessageList();
>             System.out.println("The program did not run.  AS/400
> messages:");
>             for (int i = 0; i < msgList.length; i++) {
>                 System.out.println(msgList[i].getText());
>             }
>         } else {
>             AS400Bin2 as400Int = new AS400Bin2();
>             byte[] as400Data = spgm.getReturnValue();
>             short result = as400Int.toShort(as400Data, 0);
>             System.out.println("Service Program Call Result is : " +
> result);
> 
>         }
> 
>     } catch (Exception e) {
>         System.out.println("Service Program call failed");
>         System.out.println(e);
>     }
> 
>     System.exit(0);
> }
> }
> 
> The very simple RPG module:
> D CJPTEST_PROC    PR             5I 0
> D  String                       10     Value
> 
> P CJPTEST_PROC    B                    Export
> D                 PI             5I 0
> D String                        10     Value
> C                   If        String = 'CHRISPRICE'
> C                   Return    99
> C                   Else
> C                   Return    -1
> C                   Endif
> 
> -----Original Message-----
> From: Dave Wall [mailto:dawall@us.ibm.com]
> Sent: 14 August 2001 15:45
> To: JAVA400-L@midrange.com
> Subject: Re: AS400 Toolbox problems - ServiceProgramCall
> 
> Here is code to call entry point QtocLstNetIfc in service program
> QTOCNETSTS.  The entry point takes three parameters -- two strings (passed
> by reference) and the error code.  The strings are converted from Unicode
> to EBCDIC before being sent to the server.  When calling programs or
> service programs, pay particular attention to lengths.  The Toolbox client
> passes data to the program call server who dumps the data in one big
> buffer.  It then passes pointers to that buffer or pulls data out of the
> buffer when calling the service program.  If a length is off the wrong data
> will be passed, but since all data comes out of one big buffer you may not
> get a addressing errors (trying to get to memory you don't own).  You will
> just get bad data.
> 
> Are you trying to call an OS/400 service program or one of your own?  Some
> Toolbox objects are implemented by calling OS/400 service programs via
> ServiceProgramCall so I know it can work.
> 
>         AS400 system = new AS400();
> 
>         // The first parm is 20 characters, 10 chars of user space followed
> by 10 chars of library.
>         // Create a converter for 20 chars.
>         AS400Text char20 = new AS400Text(20, system);
> 
>         // The second parm is the format name (8 chars).  Create a
> converter.
>         AS400Text char8  = new AS400Text(8, system);
> 
>         // Create program parameters
>         ProgramParameter[] parms = new ProgramParameter[3];
> 
>         // First parm is qualified user space CHAR(20)
>         //   CHAR(0-9) is the user space name
>         //   CHAR(10-19) is the library name
>         String qSpace = "DAW       DAW       ";
> 
>         // First parm is the library qualified UserSpace
>         parms[0] = new ProgramParameter(char20.toBytes(qSpace));
>         parms[0].setParameterType(ProgramParameter.PASS_BY_REFERENCE);
> 
>         // Second parm is the format
>         parms[1] = new ProgramParameter(char8.toBytes("NIFC0100"));
>         parms[1].setParameterType(ProgramParameter.PASS_BY_REFERENCE);
> 
>         // Last parm is the error code.  We pass an array of 0x00s so
> messages are returned.
>         byte[] bytes = new byte[32];
>         parms[2] = new ProgramParameter(bytes, 32);
>         parms[2].setParameterType(ProgramParameter.PASS_BY_REFERENCE);
> 
>         ServiceProgramCall sPGMCall = null;
> 
>         System.out.println("About to create the program");
>         sPGMCall =  new ServiceProgramCall(system,
>                                            "/QSYS.LIB/QTOCNETSTS.SRVPGM",
>                                            "QtocLstNetIfc",
> 
> ServiceProgramCall.NO_RETURN_VALUE,
>                                            parms);
> 
>         System.out.println(sPGMCall.run());
> 
>         AS400Message[] ml = sPGMCall.getMessageList();
> 
>         for (int i=0; i<ml.length; i++)
>            System.out.println(ml[i].getID() + ": " + ml[i].getText());
> 
> David Wall
> 553-5329
> AS/400 Toolbox for Java
> 
>                     "Price, Chris"
> 
>                     <chris_price@nsb.c       To:
> "'java400-l@midrange.com'" <java400-l@midrange.com>
>                     o.uk>                    cc:
> 
>                     Sent by:                 Subject:     AS400 Toolbox
> problems - ServiceProgramCall
>                     owner-java400-l@mi
> 
>                     drange.com
> 
>                     08/14/2001 05:31
> 
>                     AM
> 
>                     Please respond to
> 
>                     JAVA400-L
> 
> Has anyone successfully managed to call a procedure in a service program,
> using the ServiceProgramCall class?
> 
> I'm having major problems getting this to work:
> 
> Passing by reference doesn't work at all - get null pointer errors in the
> procedure.
> 
> Passing by value works for integers, but Strings get garbled. I thought
> this
> might be a CCSID problem, but the same code works fine for a ProgramCall.
> 
> Does anyone have any working examples using this class, there aren't any
> that I can find in the toolbox documentation.
> 
> Confused,
> Chris.
> 
> =======DISCLAIMER=======
> This email transmission and any attachments may contain confidential
> information which is legally privileged.  You are also notified that the
> contents of this email and any which you may send in reply, may be viewed
> by
> authorised personnel on behalf of NSB Retail Systems Plc or its
> subsidiaries
> (the Company) in accordance with the Company's Information Access Policy.
> The content of this email is always subject to contract.  The information
> is
> intended only for the individual or entities to whom it is addressed.  If
> you are not an intended recipient please contact me immediately and you are
> hereby notified that any disclosure, copying, distribution, storage on any
> medium or use of the information contained in this transmission is strictly
> prohibited.
> 
> +---
> | This is the JAVA/400 Mailing List!
> | To submit a new message, send your mail to JAVA400-L@midrange.com.
> | To subscribe to this list send email to JAVA400-L-SUB@midrange.com.
> | To unsubscribe from this list send email to JAVA400-L-UNSUB@midrange.com.
> | Questions should be directed to the list owner: joe@zappie.net
> +---
> 
> +---
> | This is the JAVA/400 Mailing List!
> | To submit a new message, send your mail to JAVA400-L@midrange.com.
> | To subscribe to this list send email to JAVA400-L-SUB@midrange.com.
> | To unsubscribe from this list send email to JAVA400-L-UNSUB@midrange.com.
> | Questions should be directed to the list owner: joe@zappie.net
> +---
> 
> =======DISCLAIMER=======
> This email transmission and any attachments may contain confidential
> information which is legally privileged.  You are also notified that the
> contents of this email and any which you may send in reply, may be viewed
> by
> authorised personnel on behalf of NSB Retail Systems Plc or its
> subsidiaries
> (the Company) in accordance with the Company's Information Access Policy.
> The content of this email is always subject to contract.  The information
> is
> intended only for the individual or entities to whom it is addressed.  If
> you are not an intended recipient please contact me immediately and you are
> hereby notified that any disclosure, copying, distribution, storage on any
> medium or use of the information contained in this transmission is strictly
> prohibited.
+---
| This is the JAVA/400 Mailing List!
| To submit a new message, send your mail to JAVA400-L@midrange.com.
| To subscribe to this list send email to JAVA400-L-SUB@midrange.com.
| To unsubscribe from this list send email to JAVA400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner: joe@zappie.net
+---

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.