...
Codeblock |
---|
|
var Vertrag = EventData.GetContext("Vertrag");
var Sparte = EventData.GetContext("Sparte");
var ResVal = "";
// Die Funktion "CheckValidation" soll die Logik für uns ein wenig kapseln,
// damit wir später strukturierter und übersichtlicher die Feldprüfungen
// untereinander schreiben können.
function CheckValidation(ctrl, validationResult, invalidTextMsg) {
// Wir zeigen das Control im jeweiligen Zustand an, um dem Anwender
// ein bißchen Hilfestellung zu leisten
ctrl.SetDataIsValid(validationResult);
if (!validationResult) {
// War die Prüfung nicht erfolgreich, dann merken wir uns
// die Validierungsmeldung und prüfen die restlichen Controls
// falls noch weitere Werte nicht korrekt eingegeben wurden.
ResVal += "\r\n" + invalidTextMsg;
}
}
// Prüfung für Feld Tarif
CheckValidation(afnDataEdit7
, Sparte.FindField(afnDataEdit7.FieldName).AsString == "Wert ist ok"
, "- Tarif hat keinen gültigen Wert");
// Prüfung für Feld Betrag
CheckValidation(afnDataEdit43
, Sparte.FindField(afnDataEdit43.FieldName).AsString >= 0
, "- Betrag darf nicht negativ sein");
// Prüfung für Feld xxxxx
// Prüfung für Feld yyyyy
// Prüfung für Feld .
// Sollte es Validierungsmeldungen, dann geben wir die aus der Funktion zurück.
// AMS wird den Speicherprozess unterbrechen und dem
if (ResVal && ResVal != "") {
ActionData.SetString("Result", "Validierungsergebnis:" + ResVal);
} |
...
SetReadOnly
Beispielimplementierung mit der namentlichen Aufführung aller relevanten Controls
Codeblock |
---|
|
var Vertrag = EventData.GetContext("Vertrag");
var Sparte = EventData.GetContext("Sparte");
// Abfragen wie der Sperrzustand von AMS ist.
var AMS = EventData.GetContext("AMS");
var tmpReadOnly = AMS.IsReadOnly();
// hier werden nun alle Felder aufgelistet, die gesperrt werden müssen.
// Da die Routine sowohl die Sperrung, als auch Entsperrung vornehmen muss
// wird mit dem Wert gearbeitet, der von AMS zurückgeliefert wird.
afnMemo1.ReadOnly = tmpReadOnly;
afnDataComboBox7.Enabled = !tmpReadOnly;
afnDataEdit8.Enabled = !tmpReadOnly;
// Führt zur Entsperrung der oberen Panels, sodass die darunter
// liegenden Controls bedient werden können.
ActionData.SetString("Result", "JA"); |
Beispielimplementierung mit Iteration der Maskencontrols
Codeblock |
---|
|
var Vertrag = EventData.GetContext("Vertrag");
var Sparte = EventData.GetContext("Sparte");
var AMS = EventData.GetContext("AMS");
// Abfragen wie der Sperrzustand von AMS ist.
var tmpReadOnly = AMS.IsReadOnly();
function IsLockableClass(classname) {
// Wir sammeln hier zentral alle Klassen die wir nie sperren wollen.
classname = classname.toLowerCase();
return (classname != 'tlabel')
&& (classname != 'tpanel')
// && (classname != 'xyzzzz')
;
}
// ControlCount wird on demand ermittelt, sodass wir etwas Laufzeit sparen, wenn wir das in eine Variable speichern.
var ctrlCount = AMS.ControlCount;
for (var i = 0; i < ctrlCount; i++) {
// ControlsByIndex wirft Exception, wenn nach Index gefragt wird, der nicht existiert.
var ctrl = AMS.ControlsByIndex(i);
if (ctrl && IsLockableClass(ctrl.ClassName)) {
try {
// Wir versuchen ReadOnly zu setzen für Controls die das unterstützen
ctrl.ReadOnly = tmpReadOnly;
} catch (e) {
// Wenn ReadOnly nicht unterstützt wird, dann setzen wir enabled/disabled.
// Kann ebenfalls scheitern, wenn das Control .Enabled nicht unterstützt.
ctrl.Enabled = !tmpReadOnly;
}
}
}
// Führt zur Entsperrung der oberen Panels, sodass die darunter
// liegenden Controls bedient werden können.
ActionData.SetString("Result", "JA"); |
...