COND

Aus SAP Wiki ツ
Version vom 12. August 2021, 11:55 Uhr von M1ch3lde (Diskussion | Beiträge) (→‎Mit COND)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Erklärungsvideo

Seit ABAP 7.40 kann COND verwendet werden. Dies stellt eine Alternative zum IF da, vorallem weil der Code wesentlich kürzer, aber zum Teil auch unübersichtlicher wird.

Der Vorteil ist eine Bedingung direkt bei Wertzuweisung einer Variable oder bei Parameter bei Methoden zu setzen.

Mit COND

Hier wird das COND bei einem Methodenaufruf verwendet, um ein Parameter wie ein Unterobjekt für den Anwendungslog zu übergeben:

 me->_go_bal = cf_reca_message_list=>create( 
  EXPORTING id_object = 'ZMONITUTIL'
            id_subobject = COND balsubobj( WHEN me->get_current_mode( ) = me->gcs_mode_is-dump THEN 'DUMPS'
                                          WHEN me->get_current_mode( ) = me->gcs_mode_is-slg1 THEN 'BAL'
                                          WHEN me->get_current_mode( ) = me->gcs_mode_is-idoc THEN 'IDOC'
                                          ELSE THROW zcx_monitoring_utilities( )
                                           ) "ELSE ist optional
                                          ).

Nach COND ist der Datentyp zu sehen. Hier hätte man auch mit # arbeiten können, da der Typ bei id_suboject bereits bekannt ist. Würde man eine Inline Deklaration durchführen, wo der Typ garnicht bekannt ist, müsste man diesen hinter COND angeben.

Mit IFs

Ohne COND müsste man z.B. mi IFs abfragen welcher Modus gerade aktiv ist, um das jeweilige richtige Unterobjekt zuzuordnen:

DATA: lv_subobject TYPE balsubobj. 

IF me->get_current_mode( ) = me->gcs_mode_is-dump.
 lv_subobject = 'DUMPS'
ELSEIF me->get_current_mode( ) = me->gcs_mode_is-slg1.
 lv_subobject = 'BAL'
ELSEIF me->get_current_mode( ) = me->gcs_mode_is-idoc.
 lv_subobject = 'IDOC'
ELSE
 RAISE EXCEPTION TYPE zcx_... .
ENDIF.

me->_go_bal = cf_reca_message_list=>create(  EXPORTING id_object = 'ZMONITUTIL'
                                                       id_subobject = lv_subobject ).