Moduliteration

Was ist eine Moduliteration?

Die Moduliteration ist eine Erweiterung des normalen Entscheidungstabellen-Umfangs. Sie ist nicht zu verwechseln mit der Pseudocode-Iteration:

  • Eine Moduliteration ist eine Schleife, die über die gesamte Entscheidungstabelle ausgeführt wird. Sie umfasst somit praktisch die gesamte Implementierung des CTV-Moduls, daher die Bezeichnung „Moduliteration“. Sie beeinflusst ganz erheblich die Auswertung der Bedingungen und die Ausführung der Aktionen der Entscheidungstabelle.
  • Eine Pseudocode-Iteration wird komplett innerhalb eines Codeblocks ausgeführt (Aktion, oder vor- oder nachbereitender Bedingungsblock). Sie hat keinen Einfluss auf die Ausführung der Bedingungen und Aktionen der Entscheidungstabelle und beeinflusst die Auswertung der Entscheidungstabelle höchstens indirekt, durch Veränderung von Feld- oder Variableninhalten.

Pro Modul kann eine Moduliteration definiert werden. Geschachtelte Moduliterationen sind nicht möglich.

Wenn ein Modul eine Moduliteration enthält, wird diese zuoberst in der Entscheidungstabelle angezeigt (in der Gesamtabbildung )gelb unterlegter Bereich , und die Schleifen-Spalte (in der Gesamtabbildung grün umrandeter Bereich) wird bei Bedingungen und Aktionen hinzugefügt. Abb. 1: Moduliteration

Moduliteration einfügen

Um eine Moduliteration einzufügen,

  • wählen Sie im Menü Komponenten→Iterationen→Iteration hinzufügen.

Pro Modul ist nur eine Moduliteration möglich, da die Komplexität bei geschachtelten Iterationen zu groß werden würde.

Standardmäßig benennt KnowlEdge Moduliterationen mit dem Namen „Schleife-1“. Sie können diesen Namen in der Titel-Spalte anpassen.

Der Name der Iteration steht auch als Überschrift über der Schleifenspalte bei Bedingungen und Aktionen.

Moduliteration bearbeiten

Moduliterationen werden immer in Pseudocode formuliert, d.h. die Bearbeitung erfolgt immer im Pseudocode-Editor.

Der Iterationscode kann, ebenso wie bei Bedingungen, auf drei Code-Blöcke verteilt werden, einen vorbereitenden Block O, den eigentlichen Schleifenblock P, und einen nachbereitenden Block C .

Vorbereitung und Nachbereigung (O- und C-Block)

Der Vorbereitende Bedingungsteil wird vor Beginn der Schleife einmalig ausgeführt.

Der Nachbereitende Bedingungsteile wird nach Ende der Schleife einmalig ausgeführt.

Für den Code inVorbereitung(O-Block) und Nachbereitung (C-Block) gilt dasselbe wie bei Bedingungen.

Schleifenbedingung (P-Block)

Der P-Block der Moduliteration muss eine gültige Schleifenbedingung enthalten. Anderer Code (wie Wertzuweisungen oder IF-Abfragen) ist dort nicht erlaubt.

In dem Pseudocode des P-Blocks entfällt der im Pseudocode sonst übliche Schleifen-Befehl (DO… END DO); die Schleifenbedingung steht allein. Auch CASE-Anweisungen sind hier nicht möglich.

Ausführung der Moduliteration

Der Ablauf der Auswertung bei einen Modul mit Moduliteration ist wie folgt:

  1. Es wird einmalig der vorbereitende Codeblock der Iteration ausgeführt.
  2. Es wird für jeden Iterationsdurchlauf die Schleifenbedingung geprüft und abhängig von dem Ergenbis, die Schleife beendet oder die Entscheidungstabelle ausgewertet.
  3. Es wird einmalig der nachbereitende Codeblock der Iteration ausgeführt.

Beispiel:

  • O-Block:
    get first myobj 
  • P-Block:
    until myobj._objiseol   
  • C-Block:
    resetcontents myobj   
  • letzte Aktion:
    get next myobj 

Beachten Sie in diesem Beispiel, dass das Nachlesen des Objekts nicht im C-Block stattfindet, sondern in der letzten Aktion! Ein Nachlesen Im C-Block der Schleife hätte zur Folge, dass die Iteration als Endlosschleife ausgeführt werden würde!

In einer Aktion kann das vorzeitige Verlassen der Schleife („QUIT“) oder der vorzeitige Sprung zum Beginn des nächsten Schleifendurchlaufs („SKIP“) veranlasst werden.

Optionen für Bedingungen

Wenn das aktuell bearbeitete Modul eine Moduliteration enthält, kann pro Bedingung angegeben werden, wie oft die Bedingung innerhalb der Moduliteration ausgewertet werden soll.

Wenn Sie auf die Schleifenspalte doppelklicken, wird ein Dialog angezeigt, in dem Sie die Einstellung für die betreffende Bedingung anpassen können:

Abb. 2: Iterations-Optionen für Bedingungen

Sie erreichen diesen Dialog auch über Kontextmenü oder Menü Komponenten→Bedingungen→Bedingungsauswertung in der Iteration anpassen.

Die aktuelle Einstellung ist in der Schleifenspalte ablesbar:

  • Jedesmal: Die Regeln zur Bedingung werden bei jedem Iterationsdurchlauf erneut ausgewertet (Default).
    Diese Einstellung sollten Sie wählen, wenn Sie wissen, dass sich der Wert eines Feldes, das in der Bedingung abgefragt wird, im Laufe der Iteration verändert, und wenn die Ausführung von Aktionen vom Inhalt dieses Feldes abhängig sein soll.Wenn Sie andererseits wissen, dass die in der Bedingung benutzten Variablen sich nicht verändern, oder Sie ganz bewusst immer den Inhalt beim ersten Schleifendurchlauf benutzen möchten, sollten Sie die Einstellung …einmalig beim Einstieg… wählen.
  • Beim 1. Mal: Die Regeln zur Bedingung werden nur einmal bei Einstieg in die Iteration, d.h. beim ersten Iterationsdurchlauf, ausgewertet.
    Diese Einstellung ist dann sinnvoll, wenn sich die Werte, die für die Bedingung ausgewertet werden, im Laufe der Iteration nicht ändern, oder wenn sich Änderungen in den Werten nicht mehr auf die Auswertung der Aktion auswirken sollen. Sie ist nicht sinnvoll, wenn die Ausführung von Aktionen z.B. in einer FOREACH-Schleife vom aktuellen Inhalt eines Feldes aus dem Mengenobjekt abhängig sein soll.
  • Nur wenn leer: Die Regeln zur Bedingung spielen nur dann eine Rolle, wenn die Iteration leer ist. Dies bedeutet, dass die Bedingung nur dann ausgewertet wird, wenn die Auswertung der Entscheidungstabelle ergeben hat, dass aufgrund der Regeln keine Aktion in der Entscheidungstabelle ausgeführt wurde. Wenn dies der Fall ist, wird in einem weiteren Verarbeitungsschritt die Entscheidungstabelle nochmals ausgeführt, und dabei nur die Bedingungen berücksichtigt, die für den Leer-Fall definiert wurden.

Wenn der Cursor über der Schleifenspalte steht, wird ein Tooltip angezeigt, in dem die Einstellung für die aktuelle Bedingung beschrieben ist. Über dem Spaltenkopf wird eine Zusammenfassung der möglichen Angaben angezeigt.

Optionen für Aktionen

Wenn das aktuell bearbeitete Modul eine Moduliteration enthält, kann pro Aktion angegeben werden, für welche Schleifendurchläufe die Aktion ausführt werden soll.

Die aktuelle Einstellung ist in der Schleifenspalte ablesbar, dargestellt durch Schritte, wobei der linke für den ersten, der rechte für den letzten, und der mittlere für einen von mehrfachen Schleifendurchläufen steht:

  • der blaue Schritt bedeutet, dass die Aktion gezielt nur für den ersten, letzten oder einzigen Durchlauf ausgeführt wird,
  • ein grüner Schritt bedeutet, dass die Aktion ausgeführt wird, wenn die Schleife mehr als ein Mal durchlaufen wird,
  • ein gelber Schritt bedeutet, dass die Aktion gezielt für den letzten Durchlauf ignoriert wird (für die anderen Durchläufe gibt es diese Variante nicht).

Die obenstehende Abbildung steht somit für „Wenn die Aktion genau einmal zutrifft, oder wenn die Aktion mehrmals zutrifft, wobei das Ergebnis des letzten Durchlaufs nicht verwendet werden soll“.

Da die Interpretation der Schritt-Symbole dennoch mühsam ist, wird die Bedeutung zusätzlich in einem Tooltip zu der Spalte erklärt, und zwar allgemein über der Spaltenüberschrift, spezifisch für die Aktion in der entsprechenden Zeile.

Wann und wie oft soll die Aktion ausgeführt werden?

Wenn Sie auf die Schleifenspalte doppelklicken, wird ein Dialog angezeigt, in dem Sie die Einstellung für die betreffende Aktion anpassen können: Abb. 3: Iterations-Optionen für Aktionen

Sie erreichen diesen Dialog auch über Kontextmenü oder Menü Komponenten→Aktionen→Aktionsverwendung in der Iteration anpassen.

Im oberen Teil des Dialogs geben Sie an, ob die Aktion jedesmal ausgeführt werden soll, wenn die Regeln der Entscheidungstabelle dafür zutreffen, oder nur in bestimmten Fällen.

Der Default ist: wenn die Regeln mehrmals zutreffen, und dann bei jedem Treffer, sowie wenn die Regeln genau einmal zutreffen. Diese Angabe bewirkt, dass die Aktion jedesmal, wenn die Regeln zutreffen, auch ausgeführt wird.

Für Pseudocode-Aktionen gibt es nur zwei Möglichkeiten: sie werden entweder immer ausgeführt, oder nur beim ersten bzw. einzigen Mal. Alle anderen Einstellungen sind aus technischen Gründen nicht machbar.

Für Bausteinaufruf-Aktionen gibt es sehr viel mehr Möglichkeiten, die sich teilweise kombinieren lassen; hier ein Überblick über die vermutlich wichtigsten:

Wenn Sie möchten, dass die Aktion … …, dann kreuzen Sie an:
…mehrmals ausgeführt wird, und zwar:
immer, wenn die Regeln zutreffen - mehrmals zutreffen, … und dann… alle Ergebnisse verwenden
- genau einmal zutreffen
nur, wenn die Regeln mehrmals zutreffen (also nicht, wenn die Regeln nur einmal zutreffen) - mehrmals zutreffen… und dann… alle Ergebnisse verwenden
beim ersten und beim letzten Mal - mehrmals zutreffen, und dann… nur beim ersten Treffer , nur beim letzten Treffer
immer außer beim letzten Mal - mehrmals zutreffen, und dann… alle Ergebnisse verwenden, Ergebnis vom letzten Durchlauf nicht verwenden
…nur einmalig ausgeführt wird, und zwar:
beim ersten Mal, wenn die Regeln zutreffen, egal ob die Regeln einmal oder mehrmals zutreffen - mehrmals zutreffen, und dann… - nur beim ersten Treffer - genau einmal zutreffen
nur, wenn die Regeln genau ein einziges Mal zutreffen - genau einmal zutreffen
nur, wenn die Regeln mehrmals zutreffen, aber dann nur beim ersten Mal (z.B. Ausgabe einer Kopfzeile) - mehrmals zutreffen, und dann… - nur beim ersten Treffer
nur, wenn die Regeln mehrmals zutreffen, aber dann nur beim letzten Mal (z.B. Ausgabe einer Summenzeile) - mehrmals zutreffen, und dann… - nur beim letzten Treffer
beim letzten Mal, wenn die Regeln zutreffen, oder beim einzigen Mal, wenn sie nur einmal zutreffen - mehrmals zutreffen, und dann… - nur beim letzten Treffer - genau einmal zutreffen

Aktionsergebnisse zusammenhalten

(nur für Aufruf-Aktionen) Normalerweise werden Schriftstücke in der Reihenfolge aneinandergefügt, wie die Aktionen ausgeführt werden. Wenn Sie also in einer Entscheidungstabelle 3 Aktionen haben, die Textbausteine aufrufen, und diese drei Aktionen werden je drei mal ausgeführt, so sieht das Ergebnis so aus:

  Text von Aktion 1
  Text von Aktion 2
  Text von Aktion 3
  Text von Aktion 1
  Text von Aktion 2
  Text von Aktion 3
  Text von Aktion 1
  Text von Aktion 2
  Text von Aktion 3

Sie haben aber auch die Möglichkeit, die Textausgaben einer Aktion zusammen ausgeben zu lassen. Die Texte aus einer Aktion werden dann alle an der Stelle im Dokument ausgegeben, wo der erste Text der Aktion eingefügt wurde. Wenn also in dem obigen Beispiel die Textausgaben von Aktion 2 zusammengehalten werden sollen, die von Aktion 1 und 3 aber nicht, so sähe das Ergebnis so aus:

  Text von Aktion 1
  Text von Aktion 2
  Text von Aktion 2
  Text von Aktion 2
  Text von Aktion 3
  Text von Aktion 1
  Text von Aktion 3
  Text von Aktion 1
  Text von Aktion 3

Für jede Aktion, deren Ergebnisse zusammengehalten werden sollen, kreuzen Sie an: Aktionsergebnisse zusammenhalten.1)

Im Aktions-Knopf in der Entscheidungstabelle erkennen Sie Aktionen, deren Ergebnisse zusammengehalten werden, an der Büroklammer über dem Symbol.

Nach der Aktion: Weitermachen, abbrechen oder nächsten Durchlauf beginnen

Schleifen werden erfahrungsgemäß nicht immer bis zum Ende ausgeführt, sondern es kann vorkommen, dass die Verarbeitung vorzeitig abgebrochen werden soll. Es kommt auch vor, dass unter bestimmten Umständen die restliche Verarbeitung eines Schleifendurchlaufs entfallen soll und der nächste Schleifendurchlauf sofort beginnen soll. Diese Möglichkeiten bestehen auch in der Moduliteration.

Hier werden Abbruch und Sprung zum nächsten Schleifendurchlauf als Bestandteil einer Aktion definiert.

Öffnen Sie dafür den Dialog zur Definition der Aktionsausführung in der Schleife.

Im unteren Bereich finden Sie die Möglichkeiten zum Verlassen der Schleife:

  • Wenn die Moduliteration aufgrund des Zutreffens einer Regel vorzeitig abgebrochen werden soll („QUIT“), wählen Sie Anschließend … die Iterationsebene vorzeitig verlassen. In der Schleifenspalte wird dann dieses Symbol gezeigt.

  • Wenn aufgrund des Zutreffens einer Regel nach dieser Aktion der nächste Schleifendurchlauf begonnen werden soll („SKIP“), wählen Sie Anschließend … nachfolgende Aktionen überspringen und einen weiteren Schleifendurchlauf versuchen. In der Schleifenspalte wird dann dieses Symbol gezeigt.
  • Wenn die Moduliteration normal weiter ausgeführt werden soll, wählen Sie Anschließend … nachfolgende Aktionen verarbeiten und Iteration fortsetzen. Dies ist der Default.

Wenn für eine Aktion Quit oder Skip angegeben ist, werden zuerst die Anweisungen der Aktion ausgeführt (Pseudocode oder Bausteinaufruf), anschließend erfolgt dann der Abbruch oder der Sprung zum nächsten Schleifendurchlauf. Wenn Sie einen Abbruch oder Aussprung veranlassen möchten, ohne dass in der Aktion andere Anweisungen ausgeführt werden, fügen Sie eine leere Pseudocode-Aktion ein.

1)
Diese Angabe ist nur für Bausteinaufruf-Aktionen möglich, die bei jedem Treffer ausgeführt werden sollen.
ctv:knowledge:iteration · Zuletzt geändert: 09.08.2024 13:25

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