View Full Version : Auswahl im Command
Hallo zusammen,
ich beschäftige mich gerade wieder mit den Befehlsdefinitionen
und möchte gerne folgendes erreichen.
In den Befehlsdefinitionen habe ich ein 20 stelliges Feld.
Die gültigen Werte sind in einer Tabelle gespeichert.
Gibt es die Möglichkeit wenn der User auf dem Feld
steht quasi ein F4 im Befehl zu ermöglichen.
Also das ein PGM gestartet wird. Der User wählt mit 1
einen Eintrag und der ausgewählte Eintrag steht dann
in dem Feld im Befehl.
Zweite Frage:
Kann man den Eintrag im Befehl auf einen Eintrag in einer Tabelle prüfen ?
Ich hoffe es ist verständlich genug ausgedrückt.
Gruss
Michael
Beim CRTCMD ... VLDCKR(...) ... PMTOVRPGM(...) auswählen.
Beim PARM ... CHOICEPGM(...) und/oder PMTCTLPGM(...) definieren.
Die Schnittstellenbeschreibung steht im CL-Programmierhandbuch.
Frank Hildebrandt
23-03-06, 14:18
Hier ein bischen Sourcecode.
Befehl MYCMD
CMD PROMPT(MYCMD)
/* Parameter */
PARM KWD(PRM) TYPE(*CHAR) LEN(10) MIN(1) +
CHOICE(*PGM) CHOICEPGM(MYCMDPMTR) +
PROMPT('Parameter')
Muss mit dem Parameter VLDCKR(MYCMDCHKR) umgewandelt werden
Programm MYCMDCHKR (Prüfung)
/* Programmstart */
PGM PARM(&PRM)
/* Variable deklarieren */
DCL VAR(&PRM) TYPE(*CHAR) LEN(10)
DCL VAR(&MSG) TYPE(*CHAR) LEN(132)
/* Der Parameter ist ungültig */
IF COND(&PRM *NE '*VALID1' *AND &PRM *NE +
'*VALID2') THEN(DO)
SNDPGMMSG MSGID(CPD0006) MSGF(QCPFMSG) MSGDTA('0000 ' +
*CAT 'Fehlerhafte Eingabe') MSGTYPE(*DIAG)
SNDPGMMSG MSGID(CPF0002) MSGF(QCPFMSG) MSGTYPE(*ESCAPE)
ENDDO
/* Programmende */
ENDPGM
Programm MYCMDPMTR (Bedienerführung)
h DftActGrp(*NO) ActGrp(*CALLER)
*
* Prozedurenprototyp für Prozedur 'MYCMDPMTR'
*
dMYCMDPMTR PR
d 21A Const --> Parameter 1
d 2000A <-- Parameter 2
*
* Prozedurenschnittstelle für Prozedur 'MYCMDPMTR'
*
dMYCMDPMTR PI
d PIPrm1 21A Const --> Parameter 1
d PIPrm2 2000A <-- Parameter 2
*
*-------------------------------------------------------------------------------------------*
*
* Anzahl Werte
*
d DS
d ITNbrInt 1 2U 0
d ITNbrChar 1 2A
*
* Länge Wert
*
d DS
d ITLenInt 1 2U 0
d ITLenChar 1 2A
*
*-------------------------------------------------------------------------------------------*
*
c Select
* Parameter 'PRM' verarbeiten
c When %Subst(PIPrm1 : 11 : 10) = 'PRM'
c Select
* Werte zu 'C' erscheinen rechts neben dem Eingabefeld
c When %Subst(PIPrm1 : 21 : 1) = 'C'
* 'Wert' in 'Parameter 2' einfügen (Maximal 30 Stellen)
c Eval %Subst(PIPrm2 : 1 : 30) = '*VALID1 ...'
* Werte zu 'P' erscheinen wenn F4 gedrückt wird
c When %Subst(PIPrm1 : 21 : 1) = 'P'
* * * Initialisierung * * *
* 'Parameter 2' initialisieren
c Eval PIPrm2 = *Blanks
* 'Anzahl Werte' initialisieren
c Eval ITNbrInt = *Zero
* * * Wert '*VALID1' einfügen * * *
* 'Anzahl Werte' erhöhen
c Eval ITNbrInt = ITNbrInt + 1
* 'Länge Wert' ermitteln
c Eval ITLenInt = %len('*VALID1')
* 'Länge Wert' und 'Wert' in 'Parameter 2' einfügen
c Eval PIPrm2 = %Trim(PIPrm2) +
c ITLenChar + '*VALID1'
* * * Wert '*VALID2' einfügen * * *
* 'Anzahl Werte' erhöhen
c Eval ITNbrInt = ITNbrInt + 1
* 'Länge Wert' ermitteln
c Eval ITLenInt = %len('*VALID2')
* 'Länge Wert' und 'Wert' in 'Parameter 2' einfügen
c Eval PIPrm2 = %Trim(PIPrm2) +
c ITLenChar + '*VALID2'
* * * Abschluss * * *
* 'Anzahl Werte' in 'Parameter 2' einfügen
c Eval PIPrm2 = ITNbrChar + PIPrm2
c EndSl
c EndSl
* Programm nicht hauptspeicherresident verlassen
c Eval *INLR = *On
Zu beachten ist, dass hier die beiden Werte *VALID1 und *VALID2 die einzigen gültigen Werte sind. Es sollte keine Probleme machen das ganze entsprechend nach den eigenen Vorstellungen zu modifizieren. Wichtig ist auch noch, dass die 2000 Bytes im Parameter PIPrm2 nur ein Beispielwert ist. Der kann je nach der Definition des Parameters im Befehlsobjekt auch höher sein.
Hallo zusammen,
vielen Dank für die Antworten.
Gruss
Michael