Klassenbasierter Ersatz für Funktion EVAL_FORMULA?

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
2 Beiträge • Seite 1 von 1
2 Beiträge Seite 1 von 1

Klassenbasierter Ersatz für Funktion EVAL_FORMULA?

Beitrag von black_adept (Top Expert / 3385 / 65 / 642 ) » 05.01.2020 18:25
Der Funktionsbaustein EVAL_FORMULA scheint eine Lehrbuchimplementierung eines LR-Parsers zu sein. Weiß jemand, ob es eine klassenbasierte Version gibt, die insbesondere keine Callback-Forms benötigt?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de


Re: Klassenbasierter Ersatz für Funktion EVAL_FORMULA?

Beitrag von m.andreschak (ForumUser / 22 / 2 / 3 ) » 20.04.2020 14:22
Hi,
es gibt die CL_FOBU_* und CL_FOEV_*-Klassen. Mittels FOBU erstellst Du eine Formel und mittels FOEV kannst Du sie dann auswerten. Das ganze ist extrem mächtig, bietet grafische Formeleditor, die Möglichkeit für Callbacks, String- und Math- Funktionen von Haus aus etc. etc.,

ein sehr simples Beispiel - wie gewollt ohne Callbacks - wäre dieses hier. Das heißt aber, dass die Formel nur sehr einfach werden kann (Zugriff auf SYST-Felder, etc.). Für komplexere Formeln kannst du dann in einer Callback-Klasse die Interfaces IF_FOBU_CONNECTOR und IF_FOEV_CONNECTOR implementieren um z.B. im Formeleditor neue Felder oder Funktionen anzubieten (IF_FOBU...), oder um einzelne "Token" in der Formel (z.B. Feldnamen) "aufzulösen" (IF_FOEV...). (Und noch sooo vieles mehr.). Deine Klasse, die diese Interfaces implementiert, wird dann beim erstellen der CL_FOBU.. und CL_FOEV..-Instanzen als "environment" mitgegeben.

/Edit:
PS: Sorry für das Wiederbeleben, hab den Thread über die Suche gefunden und fand wollte es nicht unbeantwortet lassen.

Code: Alles auswählen.

CLASS lcl_application DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
      start_of_selection.
ENDCLASS.                    "lcl_application DEFINITION


CLASS lcl_application IMPLEMENTATION.
  METHOD start_of_selection.
    DATA lo_fobu_formula       TYPE REF TO cl_fobu_formula.
    DATA lo_foev_formula       TYPE REF TO cl_foev_formula.
    DATA lr_result             TYPE REF TO data.
    FIELD-SYMBOLS <l_result>   TYPE        data.

    TRY.
        cl_fobu_formula=>create( IMPORTING ex_formula = lo_fobu_formula ).
        lo_fobu_formula->parse( 'SYST-DATUM >= ''20190101'' AND SYST-DATUM <= ''20191231''' ).

        lo_foev_formula = cl_foev_formula=>load_from_fobu( lo_fobu_formula ).
        lr_result = lo_foev_formula->evaluate( ).

        IF lr_result IS BOUND.
          ASSIGN lr_result->* TO <l_result>.
        ENDIF.

        IF  <l_result> IS ASSIGNED
        AND <l_result> EQ abap_true.

          WRITE / 'Back to the future!'.

        ELSEIF <l_result> IS ASSIGNED
        AND    <l_result> EQ abap_false .

          WRITE / 'Wir sollten im Hier und Jetzt leben.'.

        ENDIF.
      CATCH cx_foev_formula_invalid
            cx_fobu_formula_empty
            cx_fobu_formula_invalid
            cx_fobu_formula_not_found.

            WRITE / 'Ärgerlich.'.
    ENDTRY.
  ENDMETHOD.                    "start_of_selection
ENDCLASS.                    "lcl_application IMPLEMENTATION

START-OF-SELECTION.
  lcl_application=>start_of_selection( ).

Folgende Benutzer bedankten sich beim Autor m.andreschak für den Beitrag:
Jan


Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Vergleichbare Themen

Frage: Formula FOX
von 1nfo5mat1ke5 » 19.06.2009 20:16
Material auf Auslauf mit Ersatz
von fnmuli » 13.02.2014 11:00
Ersatz für Business Connector
von Gast » 22.01.2004 12:36
Funktionsbausteine - FUNKTION/FUNKTION TOOL
von kafka » 06.02.2018 08:04
Top-Of-Page-Ersatz beim ALV Grid-Control
von LB_FAN86 » 19.09.2007 15:33