EVALUATE Statement

Beispiele

Einfacher EVALUATE:

  1. EVALUATE SNLPPME-T80-VEIN-KNOT-K
  2. *
  3. WHEN K-VEIN-KNOT-RIS
  4. PERFORM M03-0-VTL-UEBER-RIS-FINDEN
  5. PERFORM M54-SNAPME-RIS-SUCHEN
  6. *
  7. WHEN K-VEIN-KNOT-VEV
  8. PERFORM M03-0-VTL-UEBER-VEV-FINDEN
  9. PERFORM M55-SNAPME-VEV-SUCHEN
  10. *
  11. WHEN OTHER
  12. CONTINUE
  13. *
  14. END-EVALUATE
if (Snlppme.T80VeinKnotK == PraeKonstanten.KVeinKnotRis) {
   M030VtlUeberRisFinden();
   M54SnapmeRisSuchen();
}
else if (Snlppme.T80VeinKnotK == PraeKonstanten.KVeinKnotVev) {
   M030VtlUeberVevFinden();
   M55SnapmeVevSuchen();
}
else {
}

Mehrere WHEN-Zweige für eine Aktion:

  1. EVALUATE ZW-PRAETYP-BER
  2. *
  3. WHEN K-INDMPNLAS-NR
  4. WHEN K-INDDAUNLAS-NR
  5. WHEN K-INDZSCH-NR
  6. WHEN K-INDNLAS-NR
  7. WHEN K-TBNDNLAS-NR
  8. WHEN K-INDBNDNLRZ-NR
  9. SET B-BETROFFEN-JA TO TRUE
  10. *
  11. WHEN OTHER
  12. SET B-BETROFFEN-NEIN TO TRUE
  13. END-EVALUATE
if (ZwPraetypBer == SnstrPraeNrSkzTab.KIndmpnlasNr || ZwPraetypBer == SnstrPraeNrSkzTab.KInddaunlasNr || ZwPraetypBer == SnstrPraeNrSkzTab.KIndzschNr || ZwPraetypBer == SnstrPraeNrSkzTab.KIndnlasNr || ZwPraetypBer == SnstrPraeNrSkzTab.KTbndnlasNr || ZwPraetypBer == SnstrPraeNrSkzTab.KIndbndnlrzNr) {
   SwBetroffen.IsBBetroffenJa = true;
}
else {
   SwBetroffen.IsBBetroffenNein = true;
}

Komplexer Matrix-EVALUATE (konkreter Code verkürzt um EVALUATE hervorzuheben):

  1. EVALUATE ZW-PRE-NR ALSO ZW-TO-KNOT-TYP
  2. * 19.07.13 Ticket 31485 ah:
  3. WHEN K-WERTUNG-NR ALSO ANY
  4. CONTINUE
  5. *
  6. * Wenn individueller Mehrpersonennachlass
  7. WHEN K-INDMPNLAS-NR ALSO ANY
  8. * Vertrag merken
  9. PERFORM SNIP_SNIP
  10. *
  11. * Wenn individueller Dauernachlass, dann bei allen gleich
  12. WHEN K-INDDAUNLAS-NR ALSO ANY
  13. PERFORM SNIP_SNIP
  14. *
  15. * Gesamtjahresnettoprämie bei Gruppen-Unfall
  16. * ==========================================
  17. WHEN K-JNETGEPRAE-NR ALSO K-KNOT-TYP-VEL
  18. PERFORM SNIP_SNIP
  19. *
  20. * Manuelle Vorgabe Netto-/Bruttoprämie
  21. * gem. ZW auf Vertrags-, oder Bündelebene
  22. * =======================================
  23. WHEN K-NETPRAEZW-NR ALSO K-KNOT-TYP-VEV
  24. WHEN K-NETPRAEZW-NR ALSO K-KNOT-TYP-BND
  25. WHEN K-BRUPRAEZW-NR ALSO K-KNOT-TYP-VEV
  26. WHEN K-BRUPRAEZW-NR ALSO K-KNOT-TYP-BND
  27. PERFORM SNIP_SNIP
  28. *
  29. * Korrektur aufgrund manueller Vorgabe der Endprämie
  30. * ==================================================
  31. WHEN K-KORMANVOR-NR ALSO K-KNOT-TYP-RIS
  32. PERFORM SNIP_SNIP
  33. *
  34. * Manuelle Vorgabe auf Vertragselementebene
  35. * =========================================
  36. WHEN K-JNETPRAE-NR ALSO K-KNOT-TYP-VEL
  37. PERFORM M1-2-43-MANVOR-VEL-EINGEGEBEN
  38. *
  39. * Korrektur aufgrund manueller Vorgabe auf VEL-Ebene
  40. * ==================================================
  41. WHEN K-KORMANVEL-NR ALSO K-KNOT-TYP-RIS
  42. PERFORM SNIP_SNIP
  43. WHEN OTHER
  44. CONTINUE
  45. END-EVALUATE
// 19.07.13 Ticket 31485 ah:
if (ZwPreNr == SnstrPraeNrSkzRs.KWertungNr) {
}
// Wenn individueller Mehrpersonennachlass
else if (ZwPreNr == SnstrPraeNrSkzTab.KIndmpnlasNr) {
   // Vertrag merken
   SnipSnip();
}
// Wenn individueller Dauernachlass, dann bei allen gleich
else if (ZwPreNr == SnstrPraeNrSkzTab.KInddaunlasNr) {
   SnipSnip();
}
// Gesamtjahresnettoprämie bei Gruppen-Unfall
// ==========================================
else if (ZwPreNr == SnstrPraeNrSkzTab.KJnetgepraeNr && ZwToKnotTyp == KKnotTypVel) {
   SnipSnip();
}
// Manuelle Vorgabe Netto-/Bruttoprämie
// gem. ZW auf Vertrags-, oder Bündelebene
// =======================================
else if (ZwPreNr == SnstrPraeNrSkzTab.KNetpraezwNr && ZwToKnotTyp == KKnotTypVev || ZwPreNr == SnstrPraeNrSkzTab.KNetpraezwNr && ZwToKnotTyp == KKnotTypBnd || ZwPreNr == SnstrPraeNrSkzTab.KBrupraezwNr && ZwToKnotTyp == KKnotTypVev || ZwPreNr == SnstrPraeNrSkzTab.KBrupraezwNr && ZwToKnotTyp == KKnotTypBnd) {
   SnipSnip();
}
// Korrektur aufgrund manueller Vorgabe der Endprämie
// ==================================================
else if (ZwPreNr == SnstrPraeNrSkzTab.KKormanvorNr && ZwToKnotTyp == KKnotTypRis) {
   SnipSnip();
}
// Manuelle Vorgabe auf Vertragselementebene
// =========================================
else if (ZwPreNr == SnstrPraeNrSkzTab.KJnetpraeNr && ZwToKnotTyp == KKnotTypVel) {
   M1243ManvorVelEingegeben();
}
// Korrektur aufgrund manueller Vorgabe auf VEL-Ebene
// ==================================================
else if (ZwPreNr == SnstrPraeNrSkzTab.KKormanvelNr && ZwToKnotTyp == KKnotTypRis) {
   SnipSnip();
}
else {
}

Sonderfälle

Operation-Switch

Falls erkannt wird, dass die EVALUATE Anweisung eine direkte Auswahl der ausgelösten TAA-Operation darstellt, wird eine dementsprechende switch-Anweisung erzeugt.

  1. *------------------------------------------OPERATION ANSTEUERN
  2. EVALUATE TRUE
  3. *
  4. WHEN TC-EVENT-BERECHNEN
  5. PERFORM E01-BERECHNEN
  6. *
  7. WHEN TC-EVENT-DO-SPEZIAL
  8. PERFORM E02-DO-SPEZIAL
  9. *
  10. WHEN TC-EVENT-OFFENEPOSTEN
  11. PERFORM SNLPPME-GETINFO
  12. IF (ITEMS-SNLPPME > ZERO) THEN
  13. PERFORM E03-OFFENEPOSTEN
  14. ELSE
  15. SET TC-STATE-OK OF ME TO TRUE
  16. END-IF
  17. *
  18. WHEN OTHER
  19. *---------------------------------------------FALSCHE OPERATION
  20. SET TC-STATE-FEHLER OF ME TO TRUE
  21. EXEC TAA
  22. SET AND RAISE SEVERE
  23. GROUP STOSTR
  24. CODE 03
  25. ARGUMENTS = (TC-MODULE-NAME, TC-EVENT)
  26. *
  27. OBER = 1
  28. TYP = '01'
  29. SACH-ID = ZEROS
  30. PRIM-ETI-ID = ZEROS
  31. PRIM-ETI-KURZ = ZEROS
  32. SEKD-ETI-ID = ZEROS
  33. SEKD-ETI-KURZ = ZEROS
  34. VMKSCHREIBEN = 04
  35. END-EXEC
  36. END-EVALUATE
// ------------------------------------------OPERATION ANSTEUERN
switch (this.Operation.Active) {
case OperationEnum.Berechnen:
   E01Berechnen();
   break;
case OperationEnum.DoSpezial:
   E02DoSpezial();
   break;
case OperationEnum.Offeneposten:
   SnlppmeGetinfo();
   if (ItemsSnlppme > 0) {
      E03Offeneposten();
   }
   else {
     this.State.Active = StateEnum.Ok;
   }
   break;
default:
   // ---------------------------------------------FALSCHE OPERATION
   this.State.Active = StateEnum.Fehler;
   {
      var cnd = this.Condition.New<Mldg_Aarch.Stostr.Message3>(SeverityEnum.Severe, this.Name, this.OperationName(this.Operation.Active));
      cnd.Associations["OBER"] = 1;
      cnd.Associations["TYP"] = "01";
      cnd.Associations["SACH-ID"] = 0;
      cnd.Associations["PRIM-ETI-ID"] = 0;
      cnd.Associations["PRIM-ETI-KURZ"] = 0;
      cnd.Associations["SEKD-ETI-ID"] = 0;
      cnd.Associations["SEKD-ETI-KURZ"] = 0;
      cnd.Associations["VMKSCHREIBEN"] = 4;
      cnd.Raise();
   }
   break;
}

Zustands-Switch

Wenn erkannt wird, dass die EVALUATE-Anweisung eine Auswahl über den Rückkehrwert eines gerufenen TAA-Bausteins darstellt, wird eine dementsprechende switch-Anweisung generiert:

  1. EVALUATE TRUE
  2. *
  3. WHEN TC-STATE-OK OF Z0AAX50
  4. *
  5. CONTINUE
  6. *
  7. WHEN TC-STATE-NICHT-OK OF Z0AAX50
  8. WHEN TC-STATE-NICHT-GEFUND OF Z0AAX50
  9. WHEN TC-STATE-DUPKEY OF Z0AAX50
  10. WHEN TC-STATE-FEHLERLISTE OF Z0AAX50
  11. WHEN TC-STATE-ABBRUCH OF Z0AAX50
  12. *
  13. SET TC-STATE-NICHT-OK OF ME TO TRUE
  14. EXEC TAA
  15. SET AND RAISE ERROR
  16. GROUP SNPRAEMIE
  17. * PRAEMIENTYP-SCHLUESSELTABELLE KANN NICHT AUSGE-
  18. * LESEN WERDEN -> PRAEMIE KANN NICHT BERECHNET
  19. * WERDEN!
  20. CODE 92
  21. END-EXEC
  22. *
  23. WHEN OTHER
  24. *
  25. SET TC-STATE-FEHLER OF ME TO TRUE
  26. EXEC TAA
  27. SET AND RAISE SEVERE
  28. GROUP STOSTR
  29. CODE 06
  30. ARGUMENTS = ("Z0AAX50", TC-EVENT)
  31. END-EXEC
  32. *
  33. END-EVALUATE
switch (LastCall.Z0aax50State) {
case Base.Ezug.Aarch.Z0aax50.StateEnum.Ok:
   break;
case Base.Ezug.Aarch.Z0aax50.StateEnum.NichtOk:
case Base.Ezug.Aarch.Z0aax50.StateEnum.NichtGefund:
case Base.Ezug.Aarch.Z0aax50.StateEnum.Dupkey:
case Base.Ezug.Aarch.Z0aax50.StateEnum.Fehlerliste:
case Base.Ezug.Aarch.Z0aax50.StateEnum.Abbruch:
   this.State.Active = StateEnum.NichtOk;
   this.Condition.New<Mldg_Privat.Snpraemie.Message92>(SeverityEnum.Error).Raise();
   break;
default:
   this.State.Active = StateEnum.Fehler;
   this.Condition.New<Mldg_Aarch.Stostr.Message6>(SeverityEnum.Severe, "Z0AAX50", this.OperationName(this.Operation.Active)).Raise();
   break;
}

TODO Liste

  • Wenn festgestellt wird, dass der EVALUATE in allen Fällen einen Vergleich von einem einzigen Datenelement mit ausschließlich konstanten Werten (ggf. symbolische) abbildet, soll eine switch-Anweisung erzeugt werden.
cobmig:cs:procdiv:stmt:evaluate · Zuletzt geändert: 14.11.2019 17:04

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