- 13 May 2024
- 5 Minutes to read
- Print
- DarkLight
- PDF
Lösung Programmierung
- Updated on 13 May 2024
- 5 Minutes to read
- Print
- DarkLight
- PDF
McrFmBMW
! Allgemein:
! Für die Variablen werden folgendene Präfixe verwenden:
! c .... Character
! b .... boolean
! ==================================================================
! Aufgabe 1:
! Beim Modell sollen, abhängig von der Modellreihe, nur die zulässigen Antworten angezeigt werden.
! ------------------------------------------------------------------
! => InmBMW: zur Initialisierung der cBMW-Variablen
! => VdmFpModellreihe: merken der Eingabe in Modellreihe
! => HdmFpModell: selektieren der zur eingegebenen Modellreihe passenden Antworten
! ==================================================================
! Aufgabe 2:
! Bei der Motorisierung sollen, abhängig vom Modell, nur die richtigen Motorisierungen angezeigt werden.
! ------------------------------------------------------------------
! => InmBMW: zur Initialisierung der cBMW-Variablen
! => VdmFpModell: Speichern des gewählten Modells in eine Variable
! => HdmFpMotorisierung: selektieren der zum eingegebenen Modell passenden Antwortgruppe für Motorisierung
! ==================================================================
! Aufgabe 3:
! Der Allradantrieb soll nur bei 3er Touring, 5er Touring und X5 auswählbar sein.
! ------------------------------------------------------------------
! siehe McrFmAusstatt
! ==================================================================
! Aufgabe 4:
! Wenn das Interieur Braun ist, darf das Cockpit nicht Leder Schwarz sein.
! ------------------------------------------------------------------
! siehe McrFmInnenraum
! ==================================================================
! Aufgabe 5:
! Metalliclackierung darf nur bei Limousine und Coupe auswählbar sein.
! ------------------------------------------------------------------
! siehe McrFmAusstattung
! ==================================================================
/*****************************************************************
Initialisierungsmakro der Startmaske FmBMW
*****************************************************************/
PROCEDURE InmBmw
! ================================================
! die Anweisung RUN public\lib.SetDefaultPreferences muss in das Inm-Makro der Startmaske.
! In Folgemasken muss es nicht.
! diese Prozedur enthält folgende Anweisungen:
! ADJUSTGAPATRUNTIME = true dient dazu, Lücken,
! die durch das Ausblenden einiger Parameter entstehen können, zu fülle
! RUNTIMECHANGE = true ermöglicht Änderungen der Maske während der Laufzeit
RUN public\lib.SetDefaultPreferences
!===========================================
!Für jeden Frageparameter, der im Weiteren benötigt wird, eine Variable anlegen und initialisieren,
!damit man später die eingegebenen Werte darin abspeichern kann.
!===========================================
cBMW = ""
cBMW.cModellreihe = ""
cBMW.cModell = ""
!===========================================
END !InmBMW
/*****************************************************************
Validierungsmakro für FpModellreihe
*****************************************************************/
! Aufgabe1:
! Beim Modell sollen, abhängig von der Modellreihe, nur die zulässigen Antworten angezeigt werden.
! Dazu muss ich mir hier in einer Variable merken, welche Modellreihe ausgewählt wurde,
! damit ich später im Unterdrückungsmakro von FpModell darauf zugreifen kann.
PROCEDURE VdmFpModellreihe
! gewählten Wert in eine Variable speichern
! ASKPRMID ist eine Systemvariable, die die ID des jeweiligen Fragenparameters speichert.
! EVAL gibt den darin enthaltenen Wert zurück
cBMW.cModellreihe = EVAL(ASKPRMID)
END
/*****************************************************************
Validierungsmakro für FpModell
*****************************************************************/
! Aufgabe 2:
! Bei der Motorisierung sollen, abhängig vom Modell, nur die richtigen Motorisierungen angezeigt werden.
! Dazu muss man sich hier im Validierungsmakro für FpModell das eingegebene Modell merken.
PROCEDURE VdmFpModell
cBMW.cModell = EVAL(ASKPRMID)
END
/*****************************************************************
Unterdrückungsmakro für FpModell
*****************************************************************/
! Aufgabe1:
! Beim Modell sollen, abhängig von der Modellreihe, nur die zulässigen Antworten angezeigt werden.
! Aus dem Validierungsmakro VdmFpModellreihe kennen wir die ausgewählte Modellreihe (cBMW.cModellreihe)
PROCEDURE HdmFpModell
VALIDANSWERS = TRUE !das wird benötigt, um die Funktion zum ein- bzw. ausblenden von Antworten zur Verfügung zu haben
! die ersten beiden Buchstaben der gewählten Modellreihe in der lokalen Variable cMr speichern
DEFINE VARIABLE cMr
cMr = LEFT$(cBMW.cModellreihe,2)
! je nach gewählter Modellreihe nur die relevanten Modelle anzeigen.
! z.B. für Modellreihe 3er zeige alle Modelle, die mit '3' beginnen
CASE cMr
WHEN "3e" DO VALIDANSWERS.SELECT = "3*"
WHEN "5e" DO VALIDANSWERS.SELECT = "5*"
WHEN "7e" DO VALIDANSWERS.SELECT = "7*"
WHEN "Z3" DO VALIDANSWERS.SELECT = "Z3"
WHEN "Z8" DO VALIDANSWERS.SELECT = "Z8"
WHEN "X5" DO VALIDANSWERS.SELECT = "X5*"
OTHERWISE
END
END
/*****************************************************************
Unterdrückungsmakro für FpMotorisierung
*****************************************************************/
! Aufgabe2:
! Bei Motorisierung sollen, abhängig vom gewählten Modell, nur die zulässige Antwortgruppe angezeigt werden.
! Aus dem Validierungsmakro VdmFpModell kennen wir das gewählte Modell (cBMW.cModell)
PROCEDURE HdmFpMotorisierung
VALIDANSWERGROUPS = true !das wird benötigt, um die Funktion zum ein- bzw. ausblenden von Antwortgruppen zur Verfügung zu haben
CASE cBMW.cModell
WHEN "3Cab" DO VALIDANSWERGROUPS.SELECT = "Pp3Cab"
WHEN "3Com" DO VALIDANSWERGROUPS.SELECT = "Pp3Com"
WHEN "3Cou" DO VALIDANSWERGROUPS.SELECT = "Pp3Cou"
WHEN "3Lim" DO VALIDANSWERGROUPS.SELECT = "Pp3Lim"
WHEN "3Tou" DO VALIDANSWERGROUPS.SELECT = "Pp3Tou"
WHEN "5Lim" DO VALIDANSWERGROUPS.SELECT = "Pp5Lim"
WHEN "5Tou" DO VALIDANSWERGROUPS.SELECT = "Pp5Tou"
WHEN "7Lim" DO VALIDANSWERGROUPS.SELECT = "Pp7Lim"
WHEN "X5" DO VALIDANSWERGROUPS.SELECT = "PpX5"
WHEN "Z3Cou" DO VALIDANSWERGROUPS.SELECT = "PpZ3C"
WHEN "Z3Roa" DO VALIDANSWERGROUPS.SELECT = "PpZ3R"
WHEN "Z8" DO VALIDANSWERGROUPS.SELECT = "PpZ8"
OTHERWISE
END
END
McrFmAusstatt
! ==================================================================
! Aufgabe 3:
! Der Allradantrieb soll nur bei 3er Touring, 5er Touring und X5 auswählbar sein.
! ------------------------------------------------------------------
! => InmAusstattung: Ein-/Ausblenden von FpAllrad und TextAllrad je nach gewähltem Modell
! => VdmFpAusstatt: zurücksetzen von FpAllrad auf 0 bei einem Modell, das Allrad nicht ermöglicht
! ==================================================================
! Aufgabe 5:
! Metalliclackierung darf nur bei Limousine und Coupe auswählbar sein.
! ------------------------------------------------------------------
! => HdmFpLackierung: Unterdrückungsmakro, um die Antwortgruppe Metalliclackierung gegebenenfalls auszublenden.
! ==================================================================
/*****************************************************************
Initialisierungsmakro der Maske FmAusstattung
*****************************************************************/
PROCEDURE InmAusstattung
! ==================================================================
! Aufgabe 3:
! Der Allradantrieb soll nur bei 3er Touring, 5er Touring und X5 auswählbar sein.
! ------------------------------------------------------------------
! Frageparameter können mithilfe der Eigenschaft Verwendungsart ein- bzw. ausgeblendet werden.
! ------------------------------------------------------------------
! mögliche Verwendungsarten:
! Eingabe, Anzeige, verborgen (als wäre es nicht da), Hintergrund (nicht sichtbar, aber es läuft im Hintergrund, alle Makros springen an)
! Eingabe = 1
! Anzeige = 2
! verborgen = 3
! Hintergurnd = 4
! -------------------------------------------------------------------
! mit useof kann ich die Verwendungsart eines Prüfparameters definieren
! ===================================================================
! Zur besseren Lesbarkeit eine lokale Variable für Modell anlegen. Diese Information kommt aus McrFmBMW
DEFINE VARIABLE cModell
cModell = cBMW.cModell
IF cModell = "3Tou" OR cModell = "5Tou" OR cModell = "X5" THEN
!Allradantrieb ist bei diesem Modell möglich
bAllradErlaubt = 1 ! Boolsche Variable, die abspeichert, ob Allrad erlaubt ist oder nicht
FpAllrad.USEOF = 1
TextAllrad.USEOF = 3
ELSE
! Allradantrieb ist bei diesem Modell nicht möglich
bAllradErlaubt = 0 !Boolsche Variable, die abgspeichert, ob Allrad erlaubt ist oder nicht
FpAllrad.USEOF = 3
TextAllrad.USEOF = 2
ENDIF
END !InmAusstattung
/*****************************************************************
Validierungsmakro von FpAusstatt
*****************************************************************/
PROCEDURE VdmFpAusstatt
! Für den Fall, dass nach einem Modellwechsel von einem Modell mit Allradmöglichkeit zu einem Modell ohne Allradmöglichkeit
! noch ein veraltetes eingeschaltetes Häkchen bei Allrad vorhanden ist,
! muss dieses gelöscht werden, der Wert also auf 0 gesetzt werden.
! Das funktioniert mit DISPLAYVALUE. Diese Eigenschaft ist allerding nur in einem Validierungsmakro gültig.
! Deshalb steht dieser Code im ersten angesteuerten Validierungsmakro der Maske.
IF bAllradErlaubt = FALSE THEN
FpAllrad.DISPLAYVALUE = 0 !Wert auf 0, also ausgeschaltet, zurücksetzen, so dass ein früheres 'Häkchen' gelöscht wird
ENDIF
END
PROCEDURE HdmFpLackierung
VALIDANSWERGROUPS = TRUE
! eine boolsche Variable, die true ist, wenn das gewählte Modell eine Limousine oder ein Coupe ist.
DEFINE VARIABLE bLimorCou
! boolsche Variable bLimorCou setzten
IF RIGHT$(cBMW.cModell,3) = "Lim" OR RIGHT$(cBMW.cModell,3) = "Cou" THEN
! es handelt sich entweder um eine Limousine oder um ein Coupe
bLimorCou = 1
ELSE
! es handelt weder um eine Limosine noch um ein Coupe -->
bLimorCou = 0
ENDIF
IF NOT bLimorCou THEN
! es handelt weder um eine Limosine noch um ein Coupe -->
! Mellaliclackierung in diesem Fall nicht erlaubt
VALIDANSWERGROUPS.EXCLUDE = "PpMetalliclack"
ENDIF
END
McrFmInnenraum
! ==================================================================
! Aufgabe 4:
! Wenn das Interieur Braun ist, darf das Cockpit nicht Leder Schwarz sein.
! ------------------------------------------------------------------
! => InmInnenraum: zur Initialisierung der cInnenraum-Variablen
! => VdmFpInterieurs: merken der Eingabe in Interieurs
! => HdmFpCockpit: gegebenenfalls Leder Schwarz als Antwort für FpCockpit ausblenden
! ==================================================================
/*****************************************************************
Initialisierungsmakro von FmInnenraum
*****************************************************************/
PROCEDURE InmInnenraum
cInnenraum = ""
cInnenraum.cInterieurs = ""
END !InmInnenraum
/*****************************************************************
Validierungsmakro für FpInterieurs
*****************************************************************/
! Aufgabe4:
! Wenn das Interieur Braun ist, darf das Cockpit nicht Leder Schwarz sein.
! Dazu muss ich mir hier in einer Variable merken, welches Interieurs gewählt wurde,
! damit ich später im Unterdrückungsmakro von FpCockpit darauf zugreifen kann.
PROCEDURE VdmFpInterieurs
cInnenraum.cInterieurs = EVAL(ASKPRMID)
END
/*****************************************************************
Unterdrückungsmakro für FpCockpit
*****************************************************************/
! Aufgabe 4
! Wenn das Interieur Braun ist, darf das Cockpit nicht Leder Schwarz sein.
PROCEDURE HdmFpCockpit
VALIDANSWERS = TRUE
IF cInnenraum.cInterieurs = "BR" THEN
VALIDANSWERS.EXCLUDE = "L"
ENDIF
END
McrFmSonderAusst
PROCEDURE InmFmSonderausstatt !Initialisierungsmakro des Fragemodells FmSonderausstatt
!ADJUSTGAPATRUNTIME = TRUE dient dazu, die Lücken, die durch das Ausblenden einiger Parameter entstehen können, zu füllen
ADJUSTGAPATRUNTIME = TRUE
!RUNTIMECHANGE = TRUE ermöglicht Änderungen der Maske während der Laufzeit
RUNTIMECHANGE = TRUE
END !InmFmSonderausstatt