Anmelden

View Full Version : UIM Menü Panel



Sven Schneider
03-05-05, 17:45
Lang lang ist's her ...

Wie kann ich in einem UIM Menü die Menü-ACTIONS un deren Beschreibung variabel gestalten?
(z.B. durch Lesen aus einem MSGF oder einer PF)




.* -------------------------------------
.* Specify the action to be taken for each option
.* -------------------------------------
:MENUI OPTION=1
ACTION='CMD &CMD1' <-- ???
HELP='menu/option1'.&CMDD1 <-- ???



Danke Sven

Fuerchau
03-05-05, 18:49
Dies geht nur mit einem Programm, dass das UIM-Menü als Panel eröffnet und die Variablen mittels API füllt.
Als eigenständiges UIM-Menü gibt es keine variablen ausser der angegebenen Kommandozeile um mittels ergänzungen Kommandos zu vervollständigen (siehe z.B. WRKSPLF mit Auswahl "2" über mehrerer Zeilen und Ergänzung OUTQ(xxx) in der Kommandozeile).

Ansonsten kann mittls &MSGID eine Nachricht zur Erstellzeit eingebunden werden. Dies wirkt wie MSGCON in DSPF's und PRTF's. Deshalb sind auch die UIM-Menüs des OS in den Sprachlibs jeweils vorhanden.

Sven Schneider
03-05-05, 20:29
Vielen Dank Baldur,

Dann hilft wohl nur ein generisches Programm, analog :



:COND NAME=OPT1
EXPR='chkpgm("MENUOPTCHK")'.
:COND NAME=OPT2
EXPR='chkpgm("MENUOPTCHK")'.
...
.* -------------------------------------
.* Specify the action to be taken for each option
.* -------------------------------------
:MENUI OPTION=1
COND=OPT1
ACTION='CMD call menupgm ''OPTION1"'
HELP='menu/option1''.&MSG(OPT0001).
:MENUI OPTION=2
COND=OPT2
ACTION='CMD call menupgm ''OPTION2"'
HELP='menu/option2''.&MSG(OPT0002).


Wobei in menupgm der Parameter &OPTION abgefragt wird und ggf über MSGF/MSGID das eigentliche Menüprogram + Parameter ermittelt und aufgerufen wird.
Der Menütext der Option wird leider nur zur Compile-Zeit gesetzt, aber damit könnte ich noch leben.

Ich muss zumindest nichts "fest" in der Source codieren, sondern ggf. nur das Menü-Panel neu kompilieren.
Die Anzeige/Einschränkung der erlaubten Menüpunkte kann ich dann über ein :COND CHKPGM/CHKOBJ/CHKUSRCLS steuern, da ich 15 Optionen fest hinterlegt habe, welche momentan nicht alle benutzt werden bzw. nicht von allen Anwendern benutzt werden dürfen.

Sven

Fuerchau
04-05-05, 08:47
Naja, ganz so würde ich es nicht steuern.
Generische Menüs machen eigentlich überhaupt keinen Sinn.
Sinn und Zweck einen Menüs ist doch wohl, ganz bestimmte Auswahlen in einen Zusammenhang zu bringen und für den Anwender leicht zugänglich zu machen.
Dabei kann eigentlich die Auswahl selbst nicht dynamisch sein. Die Auswahlpunkte sind also starr kodiert.
Was die Möglichkeit der Auswahl betrifft, so hast du Recht dies über COND zu steuern, wobei CHKPGM eigentlich nur die Verfügbarkeit eines Objekts prüft. Bei *PUBLIC *USE wird das meistens doch positiv.

Was das Tag &MSG angeht, so ist dieses eigentlich nur für verschiedene Sprachen sinnvoll, so dass je Sprache zur Compile-Zeit die entsprechende Lib der MSGF vorgeschaltet wird und das Menü in die Sprachlib gestellt wird.

Für wiederkehrende Definition solltest du dir halt Copystrecken mit ".im" reinziehen (z.B. COND und Keylisten).

Sven Schneider
06-05-05, 12:31
Hallo Baldur,
eigentlich hatte ich ja ein Problem... ;-)
aber mit COND und CHKPGM bist du im Irrtum. Hier kann ein Exit-PGM aufgerufen werden und über den Rückkehrcode die CONDition gesetzt werden.
Leider ist das nicht in "..Display Programming .." beschrieben sondern nur hier :

http://publib.boulder.ibm.com/iseries/v5r2/ic2924/index.htm?info/apis/xuiconde.htm

Also ich möchte über eine externe Benutzerverwaltung 15 Menüpunkte dynamisch verwalten.
Und das sollte so wie oben beschreiben funktioneren, also

- Menütexte im MSGF
- Aufruf-CMDs ebenfalls in MSGF über dyn. Menuepgm
- Berechtigungen mit Benutzer und 15 Menüpunkten in sql-Tabelle, Abfrage mit chkpgm("MENUOPTCHK")

Ein Panel-Programm wollte ich bewusst nicht schreiben.

Trotzdem Danke
Sven