Floorplan Manager Codebeispiele (ABAP): Unterschied zwischen den Versionen
Aus MattWiki
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 92: | Zeile 92: | ||
ENDMETHOD. | ENDMETHOD. | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== FLUSH - Mit Verarbeitung von Change-Log === | |||
Nachfolgendes Listing führt Aktionen abhängig von Change-Log aus. | |||
Laut SAP sollen Änderungen der Daten aber nicht im Flush statt finden, sondern im Get_Data. | |||
Vermutlich ist dieses Listing daher nicht mustergültig, sondern müsste die zu ändernden Daten abhängig von den Eingaben aus dem Change-Log im Flush an das Get_Data übergeben, und dort verarbeiten. | |||
<syntaxhighlight lang="abap"> | |||
METHOD if_fpm_guibb_list~flush. | |||
DATA: lr_new_val TYPE REF TO data, | |||
lv_carnr TYPE /bic/oicarnr. | |||
FIELD-SYMBOLS: <lt_data> TYPE z_tt_car_list, | |||
<ls_list> LIKE LINE OF mt_list, | |||
<ls_change_log> LIKE LINE OF it_change_log, | |||
<ls_new_val> TYPE boolean. | |||
IF lines( it_change_log ) > 0. | |||
ASSIGN it_data->* TO <lt_data>. | |||
mt_list = <lt_data>. | |||
LOOP AT it_change_log ASSIGNING <ls_change_log>. | |||
" Find out which value was changed on the UI | |||
CASE <ls_change_log>-name. | |||
" Perform actions needed when | |||
" approved checkbox was clicked | |||
WHEN 'APPROVED'. | |||
CREATE DATA lr_new_val TYPE boolean. | |||
lr_new_val = <ls_change_log>-new_value. | |||
ASSIGN lr_new_val->* TO <ls_new_val>. | |||
READ TABLE mt_list ASSIGNING <ls_list> INDEX <ls_change_log>-line_index. | |||
IF sy-subrc = 0. | |||
lv_carnr = <ls_list>-carnr_k. | |||
IF <ls_new_val> = abap_true. | |||
LOOP AT mt_list ASSIGNING <ls_list> WHERE carnr_k = lv_carnr. | |||
<ls_list>-approved = abap_true. | |||
<ls_list>-rejected = abap_false. | |||
<ls_list>-tl = MC_ICONS-green. | |||
ENDLOOP. | |||
ELSE. | |||
LOOP AT mt_list ASSIGNING <ls_list> WHERE carnr_k = lv_carnr. | |||
<ls_list>-approved = abap_false. | |||
<ls_list>-tl = MC_ICONS-yellow. | |||
ENDLOOP. | |||
ENDIF. | |||
me->mv_data_changed = abap_true. | |||
ENDIF. | |||
" Perform actions needed when | |||
" rejected checkbox was clicked | |||
WHEN 'REJECTED'. | |||
CREATE DATA lr_new_val TYPE boolean. | |||
lr_new_val = <ls_change_log>-new_value. | |||
ASSIGN lr_new_val->* TO <ls_new_val>. | |||
READ TABLE mt_list ASSIGNING <ls_list> INDEX <ls_change_log>-line_index. | |||
IF sy-subrc = 0. | |||
lv_carnr = <ls_list>-carnr_k. | |||
IF <ls_new_val> = abap_true. | |||
LOOP AT mt_list ASSIGNING <ls_list> WHERE carnr_k = lv_carnr. | |||
<ls_list>-approved = abap_false. | |||
<ls_list>-rejected = abap_true. | |||
<ls_list>-tl = MC_ICONS-red. | |||
ENDLOOP. | |||
else. | |||
LOOP AT mt_list ASSIGNING <ls_list> WHERE carnr_k = lv_carnr. | |||
<ls_list>-rejected = abap_false. | |||
<ls_list>-tl = MC_ICONS-yellow. | |||
" If the Car Nr. is approved right now this means | |||
" that the Car Nr. was already approved. | |||
" In this case the if the new value of the rejected field is false now | |||
" it was true before. Therefore an already approved Car Nr. | |||
" was rejected and un-rejected again and therefore needs to be | |||
" shown as approved again. | |||
IF <ls_list>-carst = z_if_constants=>sc_car_status-approved. | |||
<ls_list>-approved = abap_true. | |||
<ls_list>-tl = MC_ICONS-green. | |||
ENDIF. | |||
ENDLOOP. | |||
ENDIF. | |||
me->mv_data_changed = abap_true. | |||
ENDIF. | |||
WHEN OTHERS. | |||
" No implementation | |||
ENDCASE. | |||
ENDLOOP. | |||
ENDIF. | |||
ENDMETHOD.</syntaxhighlight> | |||
[[Category:ABAP]] | [[Category:ABAP]] |
Version vom 24. Juli 2019, 15:15 Uhr
IF_FPM_GUIBB_LIST
GET_DEFINITION - Grundform
Signatur der Methode:
EO_FIELD_CATALOG - Enthält Feldkatalog in Form eines Strukturtyps, der alle Komponenten umfasst, die als Felder im Formular verwendet werden können ET_FIELD_DESCRIPTION - Liste mit Feldbeschreibungen und beschreibenden Informationen zu den einzelnen Feldern ET_ACTION_DEFINITION - Liste mit möglichen Aktionen
Beispielhafte Befüllung der Description-Tabelle für Form-GUIBB mit dem Ziel, Warnungen im FLUID-Designer zu vermeiden:
METHOD if_fpm_guibb_form~get_definition.
DATA: ...
CLEAR:...
...
...
...
" Definition of field catalog
eo_field_catalog ?= cl_abap_structdescr=>describe_by_name( p_name = 'Z_S_SELECTION' ).
" Build list of field descriptions for FPM containing mostly only field names
" in order to prevent warnings in FPM designer
APPEND VALUE fpmgb_s_formfield_descr( name = 'FISCYEAR' ) TO et_field_description.
APPEND VALUE fpmgb_s_formfield_descr( name = 'ZDOMUSER' ) TO et_field_description.
APPEND VALUE fpmgb_s_formfield_descr( name = 'ZDOMUSERNAME' ) TO et_field_description.
ENDMETHOD.
GET_DEFINITION - Mit Button und Read-Only-Spalten
method IF_FPM_GUIBB_LIST~GET_DEFINITION.
DATA: lt_field_cat TYPE ztt_list,
ls_field_descr TYPE LINE OF fpmgb_t_listfield_descr,
ls_action_def type line of fpmgb_t_actiondef.
eo_field_catalog ?= cl_abap_tabledescr=>describe_by_data( lt_field_cat ).
ls_field_descr-name = 'LFDNR'.
ls_field_descr-read_only = abap_true.
ls_field_descr-condense = 'X'.
APPEND ls_field_descr TO et_field_description.
ls_action_def-id = 'SAVEBUTTON'.
ls_action_def-text = text-001.
ls_action_def-tooltip = text-001.
ls_action_def-imagesrc = 'ICON_SYSTEM_SAVE'.
ls_action_def-enabled = abap_true.
APPEND ls_action_def TO et_action_definition.
endmethod.
GET_DEFINITION - Custom-Spaltenüberschriften
Zusätzlich: Felder mit individuellen Spaltenüberschriften sowie Editierbarkeit-Kennzeichen und Darstellung als Checkbox.
METHOD if_fpm_guibb_list~get_definition.
DATA: ...
CLEAR:...
...
...
...
" Definition of field catalog
eo_field_catalog ?= cl_abap_structdescr=>describe_by_name( p_name = 'Z_TT_LIST' ).
" Build list of field descriptions for FPM containing mostly only field names
" in order to prevent warnings in FPM designer
APPEND VALUE fpmgb_s_listfield_descr( name = 'ROW' technical_field = abap_true ) TO et_field_description.
APPEND VALUE fpmgb_s_listfield_descr( name = 'ZKSTL_K' ) TO et_field_description.
APPEND VALUE fpmgb_s_listfield_descr( name = 'ZKSTL_T' ) TO et_field_description.
APPEND VALUE fpmgb_s_listfield_descr( name = 'ZKRS_K' ) TO et_field_description.
APPEND VALUE fpmgb_s_listfield_descr( name = 'ZKRS_T' ) TO et_field_description.
APPEND VALUE fpmgb_s_listfield_descr( name = 'ZBEM' ) TO et_field_description.
APPEND VALUE fpmgb_s_listfield_descr( name = 'APPROVED' header_label = TEXT-001 ) TO et_field_description.
APPEND VALUE fpmgb_s_listfield_descr( name = 'REJECTED' header_label = TEXT-002 ) TO et_field_description.
ENDMETHOD.
FLUSH - Mit Verarbeitung von Change-Log
Nachfolgendes Listing führt Aktionen abhängig von Change-Log aus. Laut SAP sollen Änderungen der Daten aber nicht im Flush statt finden, sondern im Get_Data. Vermutlich ist dieses Listing daher nicht mustergültig, sondern müsste die zu ändernden Daten abhängig von den Eingaben aus dem Change-Log im Flush an das Get_Data übergeben, und dort verarbeiten.
METHOD if_fpm_guibb_list~flush.
DATA: lr_new_val TYPE REF TO data,
lv_carnr TYPE /bic/oicarnr.
FIELD-SYMBOLS: <lt_data> TYPE z_tt_car_list,
<ls_list> LIKE LINE OF mt_list,
<ls_change_log> LIKE LINE OF it_change_log,
<ls_new_val> TYPE boolean.
IF lines( it_change_log ) > 0.
ASSIGN it_data->* TO <lt_data>.
mt_list = <lt_data>.
LOOP AT it_change_log ASSIGNING <ls_change_log>.
" Find out which value was changed on the UI
CASE <ls_change_log>-name.
" Perform actions needed when
" approved checkbox was clicked
WHEN 'APPROVED'.
CREATE DATA lr_new_val TYPE boolean.
lr_new_val = <ls_change_log>-new_value.
ASSIGN lr_new_val->* TO <ls_new_val>.
READ TABLE mt_list ASSIGNING <ls_list> INDEX <ls_change_log>-line_index.
IF sy-subrc = 0.
lv_carnr = <ls_list>-carnr_k.
IF <ls_new_val> = abap_true.
LOOP AT mt_list ASSIGNING <ls_list> WHERE carnr_k = lv_carnr.
<ls_list>-approved = abap_true.
<ls_list>-rejected = abap_false.
<ls_list>-tl = MC_ICONS-green.
ENDLOOP.
ELSE.
LOOP AT mt_list ASSIGNING <ls_list> WHERE carnr_k = lv_carnr.
<ls_list>-approved = abap_false.
<ls_list>-tl = MC_ICONS-yellow.
ENDLOOP.
ENDIF.
me->mv_data_changed = abap_true.
ENDIF.
" Perform actions needed when
" rejected checkbox was clicked
WHEN 'REJECTED'.
CREATE DATA lr_new_val TYPE boolean.
lr_new_val = <ls_change_log>-new_value.
ASSIGN lr_new_val->* TO <ls_new_val>.
READ TABLE mt_list ASSIGNING <ls_list> INDEX <ls_change_log>-line_index.
IF sy-subrc = 0.
lv_carnr = <ls_list>-carnr_k.
IF <ls_new_val> = abap_true.
LOOP AT mt_list ASSIGNING <ls_list> WHERE carnr_k = lv_carnr.
<ls_list>-approved = abap_false.
<ls_list>-rejected = abap_true.
<ls_list>-tl = MC_ICONS-red.
ENDLOOP.
else.
LOOP AT mt_list ASSIGNING <ls_list> WHERE carnr_k = lv_carnr.
<ls_list>-rejected = abap_false.
<ls_list>-tl = MC_ICONS-yellow.
" If the Car Nr. is approved right now this means
" that the Car Nr. was already approved.
" In this case the if the new value of the rejected field is false now
" it was true before. Therefore an already approved Car Nr.
" was rejected and un-rejected again and therefore needs to be
" shown as approved again.
IF <ls_list>-carst = z_if_constants=>sc_car_status-approved.
<ls_list>-approved = abap_true.
<ls_list>-tl = MC_ICONS-green.
ENDIF.
ENDLOOP.
ENDIF.
me->mv_data_changed = abap_true.
ENDIF.
WHEN OTHERS.
" No implementation
ENDCASE.
ENDLOOP.
ENDIF.
ENDMETHOD.