Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

...

Codeblock
languagejs
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
languagejs
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
languagejs
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");

...