COND: Unterschied zwischen den Versionen

Aus SAP Wiki ツ
M1ch3lde (Diskussion | Beiträge)
M1ch3lde (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
Zeile 23: Zeile 23:


Ohne COND müsste man z.B. mi IFs abfragen welcher Modus gerade aktiv ist, um das jeweilige richtige Unterobjekt zuzuordnen:
Ohne COND müsste man z.B. mi IFs abfragen welcher Modus gerade aktiv ist, um das jeweilige richtige Unterobjekt zuzuordnen:
<syntaxhighlight lang="abap" line start="1">
  DATA: lv_subobject TYPE balsubobj.  
  DATA: lv_subobject TYPE balsubobj.  
   
   
Zeile 37: Zeile 38:
  me->_go_bal = cf_reca_message_list=>create(  EXPORTING id_object = 'ZMONITUTIL'
  me->_go_bal = cf_reca_message_list=>create(  EXPORTING id_object = 'ZMONITUTIL'
                                                         id_subobject = lv_subobject ).
                                                         id_subobject = lv_subobject ).
</syntaxhighlight>

Aktuelle Version vom 21. Dezember 2024, 16:16 Uhr

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 ).