COND: Unterschied zwischen den Versionen

Aus SAP Wiki ツ
 
 
Zeile 8: Zeile 8:


Hier wird das COND bei einem Methodenaufruf verwendet, um ein Parameter wie ein Unterobjekt für den Anwendungslog zu übergeben:
Hier wird das COND bei einem Methodenaufruf verwendet, um ein Parameter wie ein Unterobjekt für den Anwendungslog zu übergeben:
 
<syntaxhighlight lang="abap" line start="1">
  me->_go_bal = cf_reca_message_list=>create(  
  me->_go_bal = cf_reca_message_list=>create(  
   EXPORTING id_object = 'ZMONITUTIL'
   EXPORTING id_object = 'ZMONITUTIL'
Zeile 17: Zeile 17:
                                           ) "ELSE ist optional
                                           ) "ELSE ist optional
                                           ).
                                           ).
 
</syntaxhighlight>
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.
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.



Aktuelle Version vom 12. August 2021, 12:55 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 ).