-
*.CL Routine von Applet aus aufrufen
hallo!
ich habe vor mittels eines java-applets
eine *.cl routine auf einer as400 aufzurufen
was bringt mir hierbei das java native interface,
ist das notwendig??
welche befehle gibt es um einen derartigen aufruf zu machen?
danke schon mal im voraus,
mfg burton007
-
Am besten nutzt du einfach SQL, da auf der AS/400 jedes Programm per "CALL MYLIB.MYPGM [ (P1, P2, ...) ]" aus SQL aufrufbar ist.
-
Hi!
Geht alles mit JTOpen. Einfach mal Doku runterladen und lesen.
Gibt spez. Klassen womit man PGMs, SRVPGMs, CMDs usw. mit aufrufen kann. Such mal nach "com.ibm.as400.access.ProgramCall".
Ciao
Nili
-
Hallo,
Applets laufen auf dem Client, sprich Browser, innerhalb einer Sandbox, aus der sie keine Verbindung zu einem Rechner aufmachen dürfen, von dem sie nicht selber geladen wurden. Von daher gesehen geht das nicht so ohne weiteres.
- Der JDBC Weg würde ein komplettes laden des Applets und des Treibers von der AS400 erfordern, das wäre nicht sehr flott. (dazu gab es mal einen Artikel von mir im Midrange Magazin - oder war das Client Server?)
- mit fast denselben Problemen behaftet wäre REXEC
- mit Signierung des Applets ginge das auch, das überschreitet allerdings die Möglichkeiten des Forums, das darzustellen.
- man könnte auch noch die Java Security im Browser abschalten, was man besser lässt.
- mit JNI hat das alles nix zu tun, das regelt den wechselseitigen Aufruf zwischen Java und C Funtionalitäten innerhalb eines Prozesses.
mfg
Dieter Bender
Zitat von burton007
hallo!
ich habe vor mittels eines java-applets
eine *.cl routine auf einer as400 aufzurufen
was bringt mir hierbei das java native interface,
ist das notwendig??
welche befehle gibt es um einen derartigen aufruf zu machen?
danke schon mal im voraus,
mfg burton007
-
weißt du wie die genaue syntax der parameterübergabe lautet??
wie gebe ich eine genaue anzahl von leerstellen an?
vielen dank
>
Zitat von Fuerchau
Am besten nutzt du einfach SQL, da auf der AS/400 jedes Programm >per "CALL MYLIB.MYPGM [ (P1, P2, ...) ]" aus SQL aufrufbar ist.
-
Zeichenketten werden in einfachen Hochkommata übergeben, Ziffern im GENAUEN Format, das vom Programm erwartet wird:
('xxxxxxxxxx' 00000123.12)
das Entspricht für CL *CHAR(10) sowie *DEC(10, 2)
Damit übergibst du auch die Anzahl Lehrstellen korrekt.
-
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
-
vielen dank für die rasche antwort.
leider funkt. noch nicht, parameter passen,aber beim aufruf
QSYSObjectPathName path = new QSYSObjectPathName("SAPPGM","DRPBXC","PGM");
ProgramCall pgm = new ProgramCall(as400,path.getPath(),parmList);
System.out.println("test______1");
try
{
//pgm.run(); // PROBLEM BEI PROGRAMMAUFRUF !!!!!!!
if( pgm.run()== false )
{
System.out.println("test______2");
.......
test______1 wird noch ausgegeben zu test______2 kommt er nicht mehr!!
mfg burton007
-
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
-
Hi!
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
-
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
-
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
Similar Threads
-
By Vicky-B in forum NEWSboard Java
Antworten: 17
Letzter Beitrag: 06-05-08, 11:05
-
By pfpk0997 in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 15-11-06, 09:40
-
By cc in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 08-08-06, 23:11
-
By sarge in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 06-12-04, 08:40
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks