PDA

View Full Version : Lokale Variable im Serviceprogramm?



Seiten : [1] 2

Lucky662
24-08-21, 07:26
Hallo Zusammen,
gibt es eine Möglichkeit in einem Serviceprogramm die Variableninhalte zu behalten, um bei erneutem Aufruf diese wieder zu benutzen?
Konkret: Gleicher Aufruf -> gleiches Ergebnis ohne erneuter Ausführung

If variable = *null;
...
endif;

return variable;

Die variable wird aber nicht übergeben.

B.Hauser
24-08-21, 07:30
Ja!
Du musst dann die Variable mit dem Schlüssel-Wort STATIC definieren, dann bleibt der Wert erhalten.


DCL-S YourVariable VarChar(10) static;

Birgitta

Lucky662
24-08-21, 07:45
Danke Brigitta,
Das war es :) , funktioniert bestens.

Fuerchau
24-08-21, 08:55
Bedenke aber auch folgendes:
Ein Service dient ja eigentlich einer Funktion, die von mehreren Programmen benötigt werden könnte.
Ansonsten kann man die Funktion ja auch direkt ins Hauptprogramm verlegen.
Da der Service u.U. in der ACTGRP eine Lebensdauer während der gesamten Jobdauer besitzt, kommt es also auch durchaus vor, dass deine Static-Variable einen stundenalten Zustand aufweist und Folgeergebnisse verfälscht werden können.
Besser ist es daher, einen Arbeitsbereich (DS der benötigten Felder) der Funktion per Reference mit zu übergeben und einen Status-Code (Start, Next, Final) zu verwenden.
Dann kann man beim Aufruf dann sicher sein, dass das gewünschte Ergebnis auch Stunden später noch funktioniert.

Lucky662
24-08-21, 09:22
In diesem Fall geht es ja genau darum. Es ist eine dynamische Tabelle, die HausId's beinhaltet.
Diese Liste ändert sich nicht stündlich. Jedes Programm, das im gleichen Aufrufstapel die Prozedur aufruft, soll das gleiche Ergebnis erhalten.
Aber danke für den Hinweis.

BenderD
24-08-21, 11:20
... ich würde die Variable schlicht in dem module global deklarieren, das ist förderlich für Modularisierung.

D*B

Lucky662
24-08-21, 11:31
Hallo BenderD,
es ist kein Modul, sondern ein Serviceprogramm.

B.Hauser
24-08-21, 11:42
Globale Variablen in einem Modul (unabhängig davon ob es in ein Programm oder Service-Programm gebunden wird), können von allen (exportierten) Prozeduren innerhalb des gleichen Moduls verändert werden.
... und wahrscheinlich will man genau das umgehen.

BenderD
24-08-21, 11:46
... wenn das zum Problem wird, ist das Modul zu groß!

BenderD
24-08-21, 11:47
Hallo BenderD,
es ist kein Modul, sondern ein Serviceprogramm.

ohne Modul kein Serviceprogramm, Du meinst wohl es ist das einzige Modul im Serviceprogramm.