PDA

View Full Version : *SRVPGM in VB.NET nutzen???



Seiten : [1] 2

dabeda
23-08-08, 11:06
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

B.Hauser
23-08-08, 12:50
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

dabeda
23-08-08, 12:55
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!

dabeda
27-08-08, 15:13
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:

B.Hauser
27-08-08, 15:42
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

dabeda
27-08-08, 16:12
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?

dabeda
27-08-08, 16:24
Also das min *INLR wars nicht ...

dabeda
27-08-08, 16:41
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) ??

Fuerchau
27-08-08, 16:45
UDF's MÜSSEN mit *CALLER laufen und dürfen selber keine Commit's enthalten !

dabeda
27-08-08, 16:54
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?