Eigenschaften von Schriftgutvariablen (SPGV)

Diese Seite beschreibt die Möglichkeiten, die Eigenschaften von Schriftgut-Variablen (nachfolgend SGPV oder Variablen genannt) festzulegen. Sie beschreibt nicht oder nur am Rande die Möglichkeiten zur Änderung des Wertes/Inhalts von SGPVs.

Definition in der MDB

Folgende Eigenschaften können bei der Defintion von SGPV in der mdb über Flags festgelegt werden:

DezimalHex Name Wirkung
1 1 ReadonlyAtRuntime Der Wert der SGPV kann zur Laufzeit nicht angepasst werden (in CTV-Pseudocode oder in TAA-Modulen, die auf Schriftgut zugreifen).
2 2 ReadonlyAtDesigntime Der Wert der SGPV kann bei Aufrufen des Moduls von übergeordnetem Schriftgut aus im CTV-Wizard nicht angepasst werden.
4 4 PublicForCaller Die SGPV ist bei Aufrufen des Moduls von übergeordnetem Schriftgut aus im CTV-Wizard sichtbar. Ob sie änderbar ist, wird durch ReadonlyAtDesigntime festgelegt.
8 8 PublicForCallee Der Wert der SGPV kann zur Laufzeit auch in untergeordnetem Schriftgut abgefragt werden. Ob sie änderbar ist, wird durch ReadonlyAtRuntime festgelegt.
16 10 PublicForSelf Die Eigenschaften und der Defaultwert der SGPV können in der Modulschnittstelle verändert werden. Sichtbar ist sie dort immer.
32 20 PublicInDialog Der Wert der SGPV ist im CTV-Dialog sichtbar. Ob er änderbar ist, wird durch ReadonlyInDialog festgelegt.
64 40 ReadonlyInDialog Wenn eine SGPV im CTV-Dialog sichtbar ist (PublicInDialog), entscheidet diese Angabe darüber, ob sie auch verändert werden darf oder nicht.
128 80 ReevalInDialog Wenn der Wert der SGPV im CTV-Dialog verändert wird, ist eine Neuauswertung des Schriftguts erforderlich.
256 100 Mandatory Der Wert der SGPV darf nicht leer sein. Wird im CTV-Dialog geprüft.
512 200 ApprovalRequired Wenn der Wert der SGPV im CTV-Dialog verändert wird, ist eine neue Freigabe erforderlich (s. auch hier)

Bei SGPV mit Maxindex > 1 beziehen sich die Einstellungen auf alle Instanzen der SGPV.

Die Eigenschaft PublicForSelf bezieht sich - auch wenn der Name anderes vermuten lässt - nur auf die Möglichkeit, in KnowlEdge die in der mdb festgelegten Eigenschaften zu verändern, nicht auf die Sichtbarkeit im aktuellen Schriftgut.

Beispiele:

Flag/Wirkung 8 61 92 125
gesetzte Flags PublicForCallee = 8 ReadonlyAtRuntime = 1 PublicForCaller = 4 ReadonlyAtRuntime = 1
PublicForCaller = 4 PublicForCallee = 8 PublicForCaller = 4
PublicForCallee = 8 PublicForSelf = 16 PublicForCallee = 8
PublicForSelf = 16 ReadonlyInDialog = 64 PublicForSelf = 16
PublicInDialog = 32 PublicInDialog = 32
ReadonlyInDialog = 64
Sichtbar in Schnittstelle x x x x
Änderbar in Schnittstelle - x x x
Sichtbar im Modulaufruf - x x x
Änderbar im Modulaufruf - x x x
Abfragbar in untergeordn. Sgut x x x x
Änderbar in untergeordn. Sgut x - x -
Sichtbar im CTV-Dialog - x - x
Änderbar im CTV-Dialog - x - -
Änderbar zur Laufzeit x - x -
Neuauswertung erforderlich - - -
Muss - - -
Neue Freigabe erforderlich - - -

Wenn - wie im Beispiel Flags 92 - z.B. ReadonlyInDialog gesetzt ist, PublicInDialog jedoch nicht, bewirkt das, dass wenn in der Schnittstelle eine Moduls PublicInDialog auf true gesetzt wird, die Variable dort schreibgeschützt angezeigt wird, es sei denn das Modul ändert explizit auch die Einstellung ReadonlyInDialog.

Der Flag ReadonlyatRuntime wird zur Zeit in der mdb nie gesetzt.
Der Flag ReadonlyAtDesigntime wird zur Zeit in der mdb nie gesetzt.
Der Flag PublicForCallee ist bei allen SGPV gesetzt.
ApprovalRequired wird zur Zeit in der mdb nie gesetzt

Einflussmöglichkeiten beim Entwurf

KnowlEdge

Bearbeitungsmöglichkeiten abhängig von: PublicForSelf

In KnowlEdge werden für Schriftgut alle SGPVs, die für den Schriftguttyp definiert sind, in der Ansicht CTV-Attribute aufgelistet. Die Anzeige kann eingeschränkt werden auf nur änderbare oder geänderte.

Bei Variablen, die als PublicForSelf definiert sind, können in dieser Ansicht sowohl die meisten in der mdb definierten Eigenschaften angepasst werden als auch der Default-Wert. Änderung ist nicht möglich für die Eigenschaften PublicForCaller, ReadonlyAtDesignTime und PublicForSelf.

Die hier vorgenommenen Änderungen werden in die Schnittstelle des Moduls übernommen.

Flag in MDB Deutsche Bezeichnung in KnowlEdge
ReadonlyAtDesigntimeÄnderbar beim AufrufAchtung Bedeutung umgekehrt!
ReadonlyAtRuntimeÄnderbar zur Laufzeit Achtung Bedeutung umgekehrt!
PublicForCaller Sichtbar beim Aufruf
PublicForCallee Sichtbar in untergeordnetem Schriftgut
PublicInDialog Sichtbar in CTV-Dialog
ReadonlyInDialog Änderbar in CTV-Dialog Achtung Bedeutung umgekehrt!
Mandatory Muss-Variable
ReevalInDialog Bei Änderung ist eine Neuauswertung erforderlich
ApprovalRequired Bei Änderung ist eine erneute Freigabe erforderlich

Bei Variablen mit MaxIndex > 1 ist es hier möglich, für jede Instanz der SGPV einzeln die Eigenschaften zu ändern.

Bausteinaufrufe im CTV-Wizard (KnowlEdge, CEdge)

Bearbeitungsmöglichkeiten abhängig von: PublicForCaller, ReadonlyAtDesignTime

Die Eigenschaften von SGPVs können im Bausteinaufruf nicht verändert werden, sondern nur ggf. der Wert.

in dem CTV-Wizard wird u.a. die Liste der für den Aufrufer sichtbaren SGPVs eines Moduls angezeigt.
Variable, die nicht PublicForCaller sind, sind in der Liste nicht enthalten.
Für Variable mit der Eigenschaft ReadonlyAtDesignTime kann hier der Wert nicht verändert werden.

Zugriff im CTV Dialog

Bearbeitungsmöglichkeiten abhängig von: PublicInDialog, ReadonlyInDialog
Behandelt: Mandatory, ReevalInDialog, ApprovalRequired

Hier kann ggf. der Wert von SGPVs abgefragt oder angepasst werden, aber keine Eigenschaften.
Die Anzeige von SGPV-Werten ist möglich für Variablen mit der Eigenschaft PublicInDialog.
Die Änderung von Werten ist möglich, wenn PublicInDialog gesetzt und ReadonlyInDialog nicht gesetzt ist.

Im CTV-Dialog werden SGPV mit der Eigenschaft Mandatory darauf geprüft, ob sie einen Wert enthalten.
Wenn für eine Variable ReevalInDialog gesetzt ist, wird nach Änderung des Werts einer solchen SGPV das Schriftgut neu ausgewertet.
Wenn für eine Variable ApprovalRequired gesetzt ist, werden nach Änderung des Werts einer solchen SGPV entsprechende Events ausgelöst (s. auch hier).

Zugriffe zur Laufzeit

Bearbeitungsmöglichkeiten abhängig von: PublicForCallee, ReadonlyatRuntime

Auf die eigenen SGPVs kann ein Modul im Code (z.B. Pseudocode, nativeApi) immer zumindest lesend zugreifen. Ob schreibender Zugriff erlaubt ist, hängt von der Einstellung ReadonlyAtRuntime ab.

Ob in untergeordnetem Schriftgut auf die SGPV's des Aufrufers zugegriffen werden kann, ist ist abhängig von der Eigenschaft PublicForCallee. Wenn diese Eigenschaft gesetzt ist, kann der Wert von SGPVs des Aufrufers abgefragt und, abhängig von ReadonlyatRuntime, ggf. auch verändert werden.

Zugriff im Pseudocode (KnowlEdge)

Der Pseudocode wird zwar in dem Entwurfswerkzeug KnowlEdge erfasst, aber zur Laufzeit ausgewertet. Deshalb gelten Änderung an SGPVs im Pseudocode als Änderungen zur Laufzeit.

Im Pseudocode kann nicht nur der Wert von SGPVs angepasst werden, sondern auch bestimmte Eigenschaften.

Folgende Eigenschaften können im Pseudocode referenziert oder verändert werden:

  • VisibleInDialog: Gibt an, ob der Platzhalter im CTV-Dialog sichtbar sein soll (entspricht PublicInDialog).
  • ReadonlyInDialog: Gibt an, ob der Platzhalter im CTV-Dialog durch den Benutzer geändert werden darf.
  • FixedValues: Gibt an, dass der Benutzer im CTV-Dialog einen Wert auswählen, aber kein neuen Wert eingeben darf (z.B. bei aus Schlüsseltabelle geladenen Werten).

Außerdem gibt es die Methode

  • AddValue: Fügt er Variablen einen Wert hinzu. Der Benutzer kann im CTV-Dialog aus den zugewiesenen Werten einen auswählen.

Diese Angaben können nur verändert werden, wenn die SGPV als Intrinsic angesprochen wird, also z.B.
me.Empf-Typ.FixedValues = true.

Die Angaben VisibleInDialog und ReadonlyInDialog überschreiben die aus der Modulschnittstelle übernommenen Angaben. Die Sicht- und Änderbarkeit im CTV-Dialog kann damit abhängig von spezifischen Umständen im Pseudocode angepasst werden. Dies hat keinen Einfluss auf sonstige Zugriffe zur Laufzeit aus Code heraus.

Zugriff mit BasisAssemblies

Die Möglichkeiten des Zugriffs auf SGPV bei der Nutzung von BasisAssembies (nativeApi) sind hier1) beschrieben.

Eigenschaften von SGPVs können über die nativeApi nicht verändert werden.

Beim Zugriff auf SGPV über nativeApi wird im allgemeinen schon beim Entwurf sichergestellt, dass Sgpv, die bestückt werden, nicht schreibgeschützt sind. Bei indizierten Variablen sind allerdings alle Instanzen der SGPV nicht schreibgeschützt, wenn eine der Instanzen nicht schreibgeschützt ist. Sollte eine der schreibgeschützten Instanzen im Code bestückt werden, so kann das nicht im Entwurf erkannt werden , sondern führt zu einem Laufzeitfehler.

Auch kann z.B. beim Zugriff auf indizierte SGPVs über variable Indizes die Zulässigkeit des Index nicht überprüft werden.

Solche Situationen führen zur Laufzeit zu Conditions. Diese werden bei Zugriff über nativeApi geraised und führen zum Verarbeitungsabruch, wenn sie nicht abgefangen werden.

Fehlerhafte Zugriffe

Sowohl bei der Prüfung von Pseudocode in KnowlEdge als auch bei Nutzung von BasisAssemblies (nativeAPI) wird versucht, die unerlaubte Nutzung von SGPVs schon beim Design zu erkennen. Leider ist dies nicht in allen Fällen möglich.

Für den Zugriff auf SGPV, die schreibgeschützt oder unbekannt sind, oder für die ein unzulässiger Index angegeben ist, gab es bisher2) OOpse. Ab Release 9.11 werden hierfür Conditions erstellt.

1)
ab V9.11
2)
bis V9.10
faq:ctv:sgpv · Zuletzt geändert: 04.02.2021 16:54

Copyright © 1992-2024 TeamWiSE Gesellschaft für Softwaretechnik mbH         Adressen |  Kontakt |  AGB |  Datenschutzerklärung |  Impressum