[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Sep 2002
    Beiträge
    47
    weißt du wie die genaue syntax der parameterübergabe lautet??
    wie gebe ich eine genaue anzahl von leerstellen an?
    vielen dank

    >[/QUOTE]

    Hi!

    Simples Beispiel:

    // Programm definieren
    ProgramCall xxxcall = new ProgramCall(myi5);

    QSYSObjectPathName pgmName = new QSYSObjectPathName("%LIBL%", "XXXPGM", "PGM");

    // ParameterListe definieren Beispiel 7 Stück
    ProgramParameter parmlist = new ProgramParameter[7];

    // Parameter 1 füllen
    parmlist[0] = new ProgramParameter( new AS400Text(10).toBytes("Hallo") );

    // Parameter 2 füllen
    parmlist[1] = new ProgramParameter( new AS400Text(10).toBytes("Du") );

    // Parameter 3
    parmlist[2] = new ProgramParameter( new AS400Text(17).toBytes("xxxxxxx"));

    // Parameter 4 Returnparm
    parmlist[3] = new ProgramParameter( 10);

    // Parameter 5 Returnparm
    parmlist[4] = new ProgramParameter( 10);

    // Parameter 6 Returnparm
    parmlist[5] = new ProgramParameter( 10);

    //Parameter 7 Returnparm
    parmlist[6] = new ProgramParameter( 1024);

    // CALL absetzen
    try{
    xxxcall.setProgram(pgmName.getPath(), parmlist);
    xxxcall.run();


    // Return Parm auswerten ....
    // Empfangsparameter 4 entpacken
    byte data = parmlist[3].getOutputData();

    AS400Text key = new AS400Text(10);

    // Empfangsparameter 5 entpacken
    data = parmlist[4].getOutputData();

    .............

    } catch (Exception e) {
    }

    Ciao
    Nili

  2. #2
    Registriert seit
    Sep 2005
    Beiträge
    18
    AS400 as400 = new AS400("AS400", "HZI", "HZI"); //declare a new instance of as400

    try
    {

    ProgramParameter parmList = new ProgramParameter[6];

    parmList[0] = new ProgramParameter(new AS400Text(1).toBytes("x"));
    parmList[1] = new ProgramParameter(new AS400Text(6).toBytes("xxxxxx"));
    parmList[2] = new ProgramParameter(new AS400Text(5).toBytes("xxxxx"));
    parmList[3] = new ProgramParameter(new AS400Text(10).toBytes("05483"));
    parmList[4] = new ProgramParameter(new AS400Text(1).toBytes("y"));
    parmList[5] = new ProgramParameter(new AS400Text(45).toBytes(
    "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx "));

    QSYSObjectPathName path = new QSYSObjectPathName("SAPPGM","DRPBXC","PGM");

    ProgramCall pgm = new ProgramCall(as400,path.getPath(),parmList);
    System.out.println("test______1");
    try
    {
    // PROBLEM BEI PROGRAMMAUFRUF !!!!!!!

    pgm.run();
    System.out.println("test______2");
    AS400Message messageList = pgm.getMessageList();
    ......

    bin schon ziemlich ratlos, hab keine ahnung warum bei der zeile pgm.run()
    ein totaler programmabsturz stattfindet!

    mfg burton007

  3. #3
    Registriert seit
    Sep 2002
    Beiträge
    47
    Hi!

    Zitat Zitat von burton007
    AS400 as400 = new AS400("AS400", "HZI", "HZI"); //declare a new instance of as400

    ....

    // PROBLEM BEI PROGRAMMAUFRUF !!!!!!!

    pgm.run();
    System.out.println("test______2");
    AS400Message messageList = pgm.getMessageList();
    ......

    mfg burton007
    Bekommst Du in messageList was zurück?
    Wie sieht der Programmabbruch aus, Log wäre gut!
    Schon mal auf i5 nachgeschaut, ob JobLog Hinweise gibt.
    Meist ist es ein Bibliotheken Problem, das PGM A PGM B benötigt und nicht findet.
    Den Job auf der i5 kann man identifizieren mit .getServerJob().
    Ciao
    Nili

  4. #4
    Registriert seit
    Sep 2005
    Beiträge
    18
    Zitat Zitat von Nili
    Hi!



    Bekommst Du in messageList was zurück?
    Wie sieht der Programmabbruch aus, Log wäre gut!
    Schon mal auf i5 nachgeschaut, ob JobLog Hinweise gibt.
    Meist ist es ein Bibliotheken Problem, das PGM A PGM B benötigt und nicht findet.
    Den Job auf der i5 kann man identifizieren mit .getServerJob().
    hi!
    bekomme bei der massageList nichts zurück, weil (glaub ich) das programm schon
    vorher abstürzt, sonst würde ja System.out.println("test______2");
    schon eine ausgabe erzeugen.
    das nächste blöde ist, dass durch den abbruch auch kein log/hinweis im eclipse
    erscheint.
    du meinst, dass das PPGM A auf der i5 auch ein PGM B benötigen könnte??

    vielen dank für alles tips,

    mfg burton007

  5. #5
    Registriert seit
    Sep 2002
    Beiträge
    47

    Wink

    Hi!

    tu mir mal nen Gefallen und führ den Code bei Dir aus.
    Danach poste mal die Ausgabe von der Console.

    Code:
    import com.ibm.as400.access.AS400;
    import com.ibm.as400.access.AS400Message;
    import com.ibm.as400.access.AS400Text;
    import com.ibm.as400.access.ProgramCall;
    import com.ibm.as400.access.ProgramParameter;
    import com.ibm.as400.access.QSYSObjectPathName;
    
    /**
     * @author Nili
     */
    public class TestPGM {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		
    		// Hier Deine i5 und Anmeldung rein
    		AS400 as400 = new AS400("i5", "XX", "XX");
    
    		ProgramParameter[] parmList = new ProgramParameter[6];
    
    		parmList[0] = new ProgramParameter(new AS400Text(1).toBytes("x"));
    		parmList[1] = new ProgramParameter(new AS400Text(6).toBytes("xxxxxx"));
    		parmList[2] = new ProgramParameter(new AS400Text(5).toBytes("xxxxx"));
    		parmList[3] = new ProgramParameter(new AS400Text(10).toBytes("05483"));
    		parmList[4] = new ProgramParameter(new AS400Text(1).toBytes("y"));
    		parmList[5] = new ProgramParameter(new AS400Text(45).toBytes(
    							"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));
    
    		QSYSObjectPathName path = new QSYSObjectPathName("SAPPGM","DRPBXC","PGM");
    
    		ProgramCall pgm = new ProgramCall(as400,path.getPath(),parmList);
    		System.out.println("test______1");
    
    		try {
    			pgm.run();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    		System.out.println("test______2");
    		
    		AS400Message[] messageList = pgm.getMessageList(); 
    		for(int i=0; i<messageList.length; i++) {
    			System.out.println(messageList[i].getText());
    		}
    		
    	}
    }
    Ciao
    Nili

  6. #6
    Registriert seit
    Sep 2005
    Beiträge
    18
    hi nili!

    erstmal danke für dein bemühen.
    habe deinen code eingefügt, zum testen in eine eigene applilkation!

    jedoch kommt auch hier das selbe raus.

    ausgabe:
    test______1

    leider wieder keine fehlermessages....

    bin ratlos, vielleicht noch tips ??

    mfg burton007

  7. #7
    Registriert seit
    Sep 2005
    Beiträge
    18

    Thumbs up

    so. mein Problem ist jetzt endlich gelöst, es hat sich lediglich um ein
    case-sensitve problem gehandelt.

    in der zeile

    parmList[4] = new ProgramParameter(new AS400Text(1).toBytes("Y"));

    gehört das Y gross !!

    billiger fehler. grosse auswirkung!

    danke an alle helfenden gehirne!!

    mfg burton007

Similar Threads

  1. RPG aus Java aufrufen
    By Vicky-B in forum NEWSboard Java
    Antworten: 17
    Letzter Beitrag: 06-05-08, 11:05
  2. ILE RPG aus Stored Procdure aufrufen
    By pfpk0997 in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 15-11-06, 09:40
  3. free AS400 Telnet Applet
    By cc in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 08-08-06, 23:11
  4. URL aufrufen
    By sarge in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 06-12-04, 08:40
  5. RPG-Procedur aus CL aufrufen
    By Peter Kosel in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 21-07-04, 08:17

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •