View Full Version : *SRVPGM in VB.NET nutzen???
Hallo!
Gibt es eine Möglichkeit Serviceprogramme der AS400 in VB.NET zu nutzen?
Kenne mich mit VB nicht aus, aber meine *SRVPGMs sind in Ordnung. ;)
Lg Peter
Hallo,
die einfachste Lösung ist eigentlich immer das Programm oder die Prozeduren im Service-Programm entweder als SQL-Stored Procedures (wenn keine Rückgabewerte erforderlich sind) oder als SQL-User Defined Functions (UDF) zu registrieren.
Der Aufruf erfolgt dann über einen SQL-CALL (Stored Procedure) oder einen Dummy-Select bei UDFs.
Birgitta
Danke für die schnelle Antwort!
Das heißt also für jede exportierte Funktion eine UDF erstellen, oder?
Hm, das ist eine gute Idee, warum kommt man da selber nicht drauf ... :rolleyes:
Vielen Dank!
So, jetzt hab ich aber noch das Problem, dass die UDF mit Status MCH3402 abstürzt wenn ich sie aus dem interaktiven SQL aufrufe. Anscheinend wird auf ein nicht mehr vorhandenes Objekt verwiesen. :eek:
Wenn ich in die UDF debugge hab ich aber sehrwohl den gewünschten Wert im Rückgabestring. Die Funktion stürzt erst nach dem RETURN.
Hab auf diese Weise schon einige UDFs gemacht, aber dieses Problem ist mir neu.
Was kanns da bitte haben??:confused:
Hallo,
machst Du irgendwelche Schweinereien mit Aktivierungsgruppen, RCLACTGRP oder RCLRSC in Deiner Prozedur?
MCH3402 titt z.B. dann auf, wenn RCLRSC Dateien in Service-Programmen geschlossen werden und diese Service-Programmer durch Aktivierungsgruppe *CALLER in der Default-Aktivierungsgruppe laufen. Die Dateien geschlossen und das Service-Programm bekommt das nicht mit, d.h. auch bei der Prüfung mit %Open meint das Service-Programm dass die Datei noch geöffnet ist und beim Write knallt's dann.
... zumindest hat mich dieser Sachverhalt neulich ein paar Tage gekostet, nachdem der Kunde darauf bestand, dass alles mit Aktivierungsgruppe *CALLER erstellt werden muss.
Birgitta
Hallo!
Das Serviceprogramm ist zwar mit *CALLER gewandelt und läuft in der DFTACTPRP, aber darin ist alles in SQL gelöst, also keine READS/WRITES, und es gibt kein RCLRSC. Die SQLs laufen zwar unter COMMIT, aber das sollte eigentlich kein Problem sein.
Kann es sein weil ich die UDF mit *InLR=*ON und dann RETURN verlasse?
Also das min *INLR wars nicht ...
Ich habs!
Danke Birgitta, das mit der Aktivierungsgruppe war schuld!
Ist es klug das UDF-RPG jetzt mit ACTGRP(*NEW) zu wandeln, oder mit ACTGRP(PGMNAME) ??
UDF's MÜSSEN mit *CALLER laufen und dürfen selber keine Commit's enthalten !
Hm, Commits sind nur im Serviceprogramm das von der UDF benutzt wird.
In der UDF sind eigentlich nur 5 Zeilen Code.
Warum müssen UDFs mit *CALLER gewandelt werden?
Ich meine, wie wirkt sich das aus?