| 
 | 
I am having some difficulty getting a data structure returned to my Java
program using ServiceProgamCall to call an RPG procedure. I can watch it
in debug and the data structure gets populated okay. 
Can anyone shed some light on this ? I would really appreciate some
expertise on this problem. 
d RtvJDARtlWrapper...                                 
d                 pr                                  
d pSKU                           9p 0 const           
d pStore                         5p 0 const           
d pReturnDS                           likeDS(returnDS)
                    
d returnDS        ds                  qualified       
d regularPrice                        like(o4regu)    
d POSPrice                            like(o4posu)    
d eventStartDate...                                   
d                                     like(o3sdt)     
d eventEndDate                        like(o3edt)     
d precedenceLevel...                                  
d                                     like(o3ppre)    
 
import java.math.BigDecimal;
import com.ibm.as400.access.AS400;
import com.ibm.as400.access.AS400Message;
import com.ibm.as400.access.AS400PackedDecimal;
import com.ibm.as400.access.AS400DataType;
import com.ibm.as400.access.AS400Structure;
import com.ibm.as400.access.ProgramParameter;
import com.ibm.as400.access.ServiceProgramCall;
 
public class ServiceProgramCallExample {
 
    public static void main(String[] args) {
 
            try {
                AS400 as400 = new AS400();
                
                //create ServiceProgram call object passing two 5-byte
                //parms and output a data structure
                ServiceProgramCall srvpgm = new
ServiceProgramCall(as400);
 
                ProgramParameter[] parmlist = new ProgramParameter[] {
                                    new ProgramParameter(5),
                                    new ProgramParameter(5),
 
new ProgramParameter(24)
                };
                
 
srvpgm.setProgram("/QSYS.LIB/QGPL.LIB/RTVJDASRV.SRVPGM");
                srvpgm.setProcedureName("RTVJDARTLWRAPPER");
                srvpgm.setParameterList(parmlist);      
 
                // Create a structure of data types to handle the
returned data
                AS400DataType[] myStruct = {
                        new AS400PackedDecimal(13, 3),
                                                            new
AS400PackedDecimal(13, 3),
                        new AS400PackedDecimal(6, 0),
                                                            new
AS400PackedDecimal(6, 0),
                        new AS400PackedDecimal(2, 0)
                        };
                
                // Create a conversion object using the structure 
                AS400Structure dataConverter = new
AS400Structure(myStruct); 
 
                Object[] returnData = {
                                    new BigDecimal(0),
                                    new BigDecimal(0),
                                    new BigDecimal(0),
                                    new BigDecimal(0),
                                    new BigDecimal(0)
                };
                
                // convert from Java object to byte array
                byte[] as400Data = dataConverter.toBytes(returnData);
                
                //convert each parm
                AS400PackedDecimal sku = new AS400PackedDecimal(9, 0); 
                parmlist[0].setInputData(sku.toBytes(171403));
                AS400PackedDecimal store = new AS400PackedDecimal(5, 0);
                parmlist[1].setInputData(store.toBytes(1));
                parmlist[2].setInputData(as400Data);
                
 
parmlist[0].setParameterType(ProgramParameter.PASS_BY_REFERENCE);
 
parmlist[1].setParameterType(ProgramParameter.PASS_BY_REFERENCE);
 
parmlist[2].setParameterType(ProgramParameter.PASS_BY_REFERENCE);
                
                if (srvpgm.run() != true) {
                        AS400Message[] msgList =
srvpgm.getMessageList();
                        System.out.println("AS/400 messages : ");
                        for (int i = 0; i < msgList.length; i++) {
 
System.out.println(msgList[i].getText());
 
System.out.println(msgList[i].getID());
 
System.out.println(msgList[i].getSeverity());
 
System.out.println(msgList[i].getType());
                        }
                }
                else {
                        //get the returned data
                        byte[] data = parmlist[2].getOutputData();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
                e.printStackTrace();
            }
        }
    }
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 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.