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.
Folgende Eigenschaften können bei der Defintion von SGPV in der mdb über Flags festgelegt werden:
Dezimal | Hex | 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
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 Aufruf | Achtung 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.
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.
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).
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.
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:
Außerdem gibt es die Methode
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.
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.
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.