Author Archive fjourneau

Template for ABAP local ALV event class

Local ALV event class template (to be completed with missing events) :


CLASS lcl_alv DEFINITION.
*------------------------------
* Public section
*------------------------------
  PUBLIC SECTION.

    METHODS :

      handle_toolbar
        FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object
                  e_interactive,

      handle_before_user_command
        FOR EVENT before_user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm
                  sender,

      handle_data_changed
        FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after,

      handle_data_changed_finished
        FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after,

      handle_user_command
        FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm,

      on_f4 FOR EVENT onf4 OF cl_gui_alv_grid
        IMPORTING e_fieldname
                  es_row_no
                  er_event_data
                  et_bad_cells
                  e_display,

      handle_menu_button
        FOR EVENT menu_button OF cl_gui_alv_grid
        IMPORTING e_object e_ucomm.

ENDCLASS. " End of lcl_alv DEFNITION

CLASS lcl_alv IMPLEMENTATION.

  METHOD handle_before_user_command .
***    "overriding standard function
***    CASE e_ucomm.
***      WHEN '&MB_FILTER'.
***        "suppress ALV further execution
***        CALL METHOD sender->set_user_command
***          EXPORTING
***            i_ucomm = space.
***
***    ENDCASE.
***
  ENDMETHOD.

  METHOD handle_data_changed.
***    CLEAR gv_flag_alv_has_error.
***
***    LOOP AT er_data_changed->mt_good_cells ASSIGNING FIELD-SYMBOL(<fs_cell>).
***
***      CASE <fs_cell>-fieldname.
***
***        WHEN 'FIELD'.
***          " -----------------------------------------------------------------------------------
***          " In case of error
***          gv_flag_alv_has_error = abap_true.
***          er_data_changed->add_protocol_entry( i_msgid = 'BD' i_msgno = '899'  i_msgty = 'E'
***                                               i_msgv1 = 'Veuillez saisir un nombre entier positif'
***                                               i_fieldname = 'FIELD'     i_row_id = <fs_cell>-row_id ).
***      ENDCASE.
***
***    ENDLOOP.
***
***    IF gv_flag_alv_has_error = abap_true.
***      er_data_changed->display_protocol( ).
***    ENDIF.
***
  ENDMETHOD.

  METHOD handle_data_changed_finished.
***
***    LOOP AT er_data_changed->mt_good_cells ASSIGNING FIELD-SYMBOL(<fs_cell>).
***
***      CASE <fs_cell>-fieldname.
***
***        WHEN 'FIELD1'.
***          " -----------------------------------------------------------------------------------
***          " Update other field value linked to value of FIELD1
***          er_data_changed->modify_cell( i_row_id    = <fs_cell>-row_id
***                                        i_fieldname = 'FIELD2'
***                                        i_value     = 'New value for FIELD2'
***                                       ).
***
***      ENDCASE.
***
***    ENDLOOP.
***
  ENDMETHOD.

  METHOD handle_toolbar.
***
***    APPEND INITIAL LINE TO e_object->mt_toolbar ASSIGNING FIELD-SYMBOL(<fs_toolbar>).
***    "<fs_toolbar>-butn_type = 0.
***    <fs_toolbar>-function = 'INSERT' ##NO_TEXT.
***    <fs_toolbar>-icon = icon_insert_row.
***    <fs_toolbar>-quickinfo = TEXT-002. " Tooltip (char30 max)
***
  ENDMETHOD.

  METHOD handle_user_command.
    " CASE e_ucomm
  ENDMETHOD.

  METHOD on_f4.
***
***    " --------------------------------------------------------------------
***    " Declare handler (to be done at ALV initialisation) for field SFHNR :
****    DATA : lt_f4       TYPE lvc_t_f4.
****    lt_f4 = VALUE #( ( fieldname = 'SFHNR'  register = abap_true ) ).
****    go_alv->register_f4_for_fields( lt_f4 ).
****    DATA(lo_alv_events) = NEW lcl_alv( ).
****    SET HANDLER lo_alv_events->on_f4 FOR go_alv.
***    " --------------------------------------------------------------------
***
***
***    DATA : lt_return TYPE TABLE OF ddshretval,
***           lt_map    TYPE TABLE OF dselc.
***
***    " If several fields registered for F4, control the current field ==> IF e_fieldname = 'SFHNR'.
***
***    " Specific search-help example :
***
***    lt_map = VALUE #( ( fldname = 'F0001' dyfldname = 'SFHNR' )
***                      ( fldname = 'F0002' dyfldname = 'KTEXT' )
***                      ( fldname = 'F0003' dyfldname = 'PZLFH' ) ).
***
***    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
***      EXPORTING
***        retfield        = 'SFHNR'
***        value_org       = 'S'
***      TABLES
***        value_tab       = lt_data " to be defined
***        dynpfld_mapping = lt_map
***        return_tab      = lt_return
***      EXCEPTIONS
***        parameter_error = 1
***        no_values_found = 2
***        OTHERS          = 3.
***
***    IF lt_return IS NOT INITIAL.
***      LOOP AT lt_return INTO DATA(ls_return).
***        CASE ls_return-retfield.
***          WHEN 'SFHNR'.
***            ls_alv_data-sfhnr = ls_return-fieldval.
***
***          WHEN 'KTEXT'.
***            ls_alv_data-ktext = ls_return-fieldval.
***
***          WHEN 'PZLFH'.
***            ls_alv_data-pzlfh = ls_return-fieldval.
***
***        ENDCASE.
***      ENDLOOP.
***    ENDIF.
***
***
***    " Inform the ALV Grid Control that an own f4 help has been processed to suppress the standard f4 help.
***    er_event_data->m_event_handled = 'X'.
***
  ENDMETHOD.

  METHOD handle_menu_button .

  ENDMETHOD.

ENDCLASS. " End of lcl_alv IMPLEMENTATION

Read More

Clear Adobe form cache

If you work with adobe form translations, you will see that translations are not effective immediately. It is because of cache.

To clear the cache, launch program : FP_PDF_TEST_26 .

Search tag : refresh, buffer, pdf

Adobe form: set field color dynamically with javascript

To specify with javascript the color for a text field in adobe form, use the code below.


// data.MAIN.SUBFORM.FIELD_TO_CHANGE_COLOR::initialize - (JavaScript, client)
this.font.fill.color.value = "255,0,0"; // Color Red in RGB Color

The color has to be specified in RGB format.

Read More

Reverse sorting of an internal table

Use method CL_RS_DATA=>SWITCH_ORDER( ) :


CALL METHOD cl_rs_data=>switch_order( CHANGING c_t_data = lt_my_table ).

Check if BADI is implemented

Transaction SE18, enter your BADI name and go to
Enhancement Implementation –> Overview :

Generate a random number in ABAP

Use class CL_ABAP_RANDOM_INT to generate a random integer number :


DATA(lv_random_num) = cl_abap_random_int=>create( seed = cl_abap_random=>seed( )
                                                  min  = 1
                                                  max  = 100 )->get_next( ).
* lv_random_num will be type i

Read More

DELKZ : Code list of MRP elements

Most used :
ValueDesignation ENDesignation FR
AR Dependent reservationRéservation dépendante
FE Production orderOrdre de fabrication
PP Planned independent requirementBesoins indépendants Prévisionnel (BIP)
QM Inspection lot for quality management Lot de contrôle QM
SA Simulation orderOrdre de simulation
SM Sim. dependent reqmtsBesoin dépendant de simulation
WB Plant stockStock division
All values :
Read More

Message : synthax templates

Trigger message from standard data :


    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

Set BAPIRET2 structure from standard data :


  ls_return-type = sy-msgty.
  ls_return-id   = sy-msgid.
  ls_return-number = sy-msgno.
  ls_return-message_v1 = sy-msgv1.
  ls_return-message_v2 = sy-msgv2.
  ls_return-message_v3 = sy-msgv3.
  ls_return-message_v4 = sy-msgv4.
  MESSAGE ID sy-msgid
          TYPE sy-msgty
          NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
          INTO ls_return-message.

Trigger message from BAPIRET2 structure :


  MESSAGE ID     ls_return-id
          TYPE   ls_return-type
          NUMBER ls_return-number
          WITH   ls_return-message_v1
                 ls_return-message_v2
                 ls_return-message_v3
                 ls_return-message_v4.

Manipulate dates in ABAP

Add days/month/year to date

check dedicated post to Add days/month/year to date.

Manipulate dates in worked days (or factory days)

Add working days to a date

You can use Function BKK_ADD_WORKINGDAY.

Difference between 2 dates in worked days

You can use Function RKE_SELECT_FACTDAYS_FOR_PERIOD.

Template ABAP for local classes

Local class template :
See also Template for ABAP local ALV event class


CLASS lcl_sample_class DEFINITION.
*------------------------------
* Public section
*------------------------------
  PUBLIC SECTION.

    TYPES : BEGIN OF ts_public_type,
              flag  TYPE abap_bool,
              value TYPE char20,
            END OF ts_public_type.

    DATA : gt_public_table TYPE STANDARD TABLE OF ts_public_type WITH DEFAULT KEY. "Global table inside the class (table must be fully typed to be used in return types)

    METHODS constructor IMPORTING iv_input TYPE char20.


    METHODS public_method IMPORTING iv_input         TYPE char20
                          RETURNING VALUE(rs_output) TYPE ts_public_type.

    CLASS-METHODS public_static_method IMPORTING iv_input         TYPE char20
                                       RETURNING VALUE(rv_output) TYPE char20.


*------------------------------
* Private section
*------------------------------
  PRIVATE SECTION.

    TYPES : BEGIN OF ts_private_type,
              flag  TYPE abap_bool,
              value TYPE char20,
            END OF ts_private_type,
            ti_private_type TYPE STANDARD TABLE OF ts_private_type WITH DEFAULT KEY. " (tables must be fully typed to be used in return types)

    DATA : gt_private_table TYPE ti_private_type. "Global table inside the class

    CLASS-DATA : gs_static_private_structure TYPE mara,
                 gv_static_private_var       TYPE matnr.

    METHODS _private_method IMPORTING iv_input         TYPE char20
                            RETURNING VALUE(rs_output) TYPE ts_public_type.

    CLASS-METHODS _private_static_method IMPORTING iv_input         TYPE char20
                                         RETURNING VALUE(rv_output) TYPE char20.

ENDCLASS. " End of lcl_sample_class DEFNITION



CLASS lcl_sample_class IMPLEMENTATION.

  METHOD constructor.
    " Init process for instanciated class
  ENDMETHOD.

  METHOD public_method.
    " Public (instanciated) method
    " Code...
  ENDMETHOD.

  METHOD public_static_method.
    " Code...
  ENDMETHOD.

  METHOD _private_method.
    " Private (instanciated) method
    " Code...
  ENDMETHOD.

  METHOD _private_static_method.
    " Code...
  ENDMETHOD.

ENDCLASS. " End of lcl_sample_class IMPLEMENTATION