CalendarControl

Das Kalendercontrol wird in diesem Beispiel als Date-Picker für eine Woche angewendet. ein kurzes Programm, das eine Anwendungsmöglichkeit des CalendarControls demonstriert.

Zum Eingabefeld auf dem Selektionsbild wird eine eigene F4-Wertsuchhilfe angeboten. In dem Kalender wird die Kalenderwoche angezeigt und ebenso ausgewählt werden, wir das Datum .

Dynpro 100 Ablauflogik

PROCESS BEFORE OUTPUT.
  MODULE status_0100.
*
PROCESS AFTER INPUT.
  MODULE user_command_0100 AT EXIT-COMMAND.
  MODULE user_command_0100.

Auf dem Dynpro muss ein CustomContainer mit Namen “CAL” angelegt werden. Als Variable für OG_CODE wird SY-UCOMM eingetragen.

Coding

PARAMETERS p_week TYPE spwoc.
DATA container TYPE REF TO cl_gui_custom_container.

*———————————————————————-*
*       CLASS lcl_main DEFINITION
*———————————————————————-*

CLASS lcl_main DEFINITION.
  PUBLIC SECTION.
    DATA:
      calendar  TYPE REF TO cl_gui_calendar,
      style     TYPE i,
      ievents   TYPE cntl_simple_events,
      xevents   LIKE LINE OF ievents.

    METHODS:
       start,
       on_date_selected FOR EVENT date_selected OF cl_gui_calendar
         IMPORTING sender
                  date_begin
                  date_end,
      get_week
         exporting week type buper.

ENDCLASS. “lcl_main DEFINITION
*———————————————————————-*
CLASS lcl_main IMPLEMENTATION.
  METHOD start.

*   Events des Calendar-Controls beim CFW registrieren
    xevents-eventid = cl_gui_calendar=>m_id_date_selected.
    xevents-appl_event = ‘X’.
    APPEND xevents TO ievents.
*   alle aktuellen und zukünftigen Objekte beim Handler registrieren
    SET HANDLER on_date_selected FOR ALL INSTANCES.

*   Wochenauswahl
    style = cnca_sel_week.
    CREATE OBJECT calendar
      EXPORTING
        parent          = container
        selection_style = style
        view_style      = cnca_style_v_navigator.

    calendar->set_registered_events( events = ievents ).

  ENDMETHOD. “start
*———————————————————————-*
  METHOD on_date_selected.


  ENDMETHOD. “on_date_selected

  METHOD get_week.

    DATA lv_date_c(8).
    DATA lv_date TYPE sydatum.

    CLEAR lv_date_c.
    CALL METHOD calendar->get_selection
      IMPORTING
        date_begin = lv_date_c
      EXCEPTIONS
        OTHERS     = 2.
    IF lv_date_c IS NOT INITIAL.
      lv_date = lv_date_c.
      CALL FUNCTION ‘DATE_GET_WEEK’
        EXPORTING
          date = lv_date
        IMPORTING
          week = week.
    ENDIF.
  ENDMETHOD.                    “get_week

ENDCLASS. “lcl_main IMPLEMENTATION


DATA ref_cal TYPE REF TO lcl_main.

 

*———————————————————————-*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_week.
  CALL SCREEN 100 STARTING AT 5 5.

*———————————————————————-*
START-OF-SELECTION.
  WRITE / p_week.


*&———————————————————————*
*&      Module  STATUS_0100  OUTPUT
*&———————————————————————*
MODULE status_0100 OUTPUT.

  SET PF-STATUS ‘STLI’ OF PROGRAM ‘SAPMSSY0’.

  IF ref_cal IS INITIAL.
    CREATE OBJECT container
      EXPORTING
        container_name = ‘CAL’
      EXCEPTIONS
        OTHERS         = 6.

    CREATE OBJECT ref_cal.
    CALL METHOD ref_cal->start.
  ENDIF.

ENDMODULE.                 ” STATUS_0100  OUTPUT
*&———————————————————————*
*&      Module  USER_COMMAND_0100  INPUT
*&———————————————————————*
MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN ‘BACK’ OR ‘%EX’ OR ‘RW’.
      SET SCREEN 0.
      LEAVE SCREEN.
    WHEN others.
      if sy-ucomm(4) = ‘%_GC’.
      CALL METHOD ref_cal->get_week
        IMPORTING
          week = p_week.
      SET SCREEN 0.
      LEAVE SCREEN.
      endif.
  ENDCASE.

ENDMODULE.                 ” USER_COMMAND_0100  INPUT

 

Enno Wulff

Leave a Comment