Thursday, 13 March 2014

Sample Program to send email using function 'SO_NEW_DOCUMENT_SEND_API1


REPORT  zrqm_quality_notification   .

TABLESqmel.

TYPESBEGIN OF ty_qmel,
       qmnum TYPE qmel-qmnum,
       erdat TYPE qmel-erdat,
       mzeit TYPE qmel-mzeit,
      END OF ty_qmel.

*Begin of RavulS1 D47K9A0XEZ 04-Oct-2013
TYPES BEGIN OF ty_email_add_text,
        qmnum TYPE qmel-qmnum,
        flag TYPE " this flag will be X if there are issues while
                      " adding the default tasks.
        END OF ty_email_add_text .

DATA gt_add_extra_line TYPE STANDARD TABLE OF ty_email_add_text,
       gw_add_extra_line TYPE ty_email_add_text .
*End of RavulS1 D47K9A0XEZ 04-Oct-2013

DATA gt_return      TYPE STANDARD TABLE OF bapiret2,
      gt_add_task     TYPE STANDARD TABLE OF rfc_viqmsm,
      gt_add_task1    TYPE STANDARD TABLE OF rfc_viqmsm,
      gt_qmel1        TYPE STANDARD TABLE OF zqm_qmel,
      gt_qmel2        TYPE STANDARD TABLE OF zqm_qmel,
      gt_global_prms  TYPE STANDARD TABLE OF ztqm_global_prms.

DATAgw_add_task     TYPE rfc_viqmsm,
      gw_qmel         TYPE zqm_qmel,
      gw_global_prms  TYPE ztqm_global_prms ,
      gv_counter1     TYPE ,
      gv_counter2     TYPE ,
      gv_tabix        TYPE sy-tabix,
      gv_i            TYPE i.

CONSTANTSgc_x                   TYPE char1   VALUE   'X',
           gc_u                   TYPE char1   VALUE   'U',
           gc_z_zxqqmu01_sqop(17TYPE c       VALUE   'Z_ZXQQMU01_SQOP'.

DATA gt_qn_email TYPE STANDARD TABLE OF ztqm_email_notif,
       gw_qn_email TYPE ztqm_email_notif.

*created a table ZQM_QMEL which gets updated whenever a Quality Notification
* is created either automatically by QE01 or manually by QM01.
SELECT  FROM zqm_qmel INTO TABLE gt_qmel1.

IF gt_qmel1 IS  NOT INITIAL.
*Add tasks from the Global parameter table
  SELECT FROM ztqm_global_prms INTO TABLE gt_global_prms
                                 WHERE cprog EQ gc_z_zxqqmu01_sqop ."'Z_ZXQQMU01_SQOP' .

  IF sy-subrc EQ 0.

    SORT gt_global_prms BY counter ASCENDING.
    DESCRIBE TABLE gt_global_prms LINES gv_i .

    LOOP AT gt_global_prms INTO gw_global_prms.
      CLEAR gv_counter1,
              gv_tabix.
      gv_tabix sy-tabix.
      gv_counter1 gw_global_prms-counter.

      IF gv_tabix EQ .
        gv_counter2 gv_counter1 .
      ENDIF.

      IF gv_counter1 NE gv_counter2 .

        APPEND gw_add_task TO gt_add_task.
        CLEAR gw_add_task.

        gv_counter2 gv_counter1 .

      ENDIF.
*Add below tasks from the global parameter table.
      CASE gw_global_prms-variable_name.
        WHEN 'SORT_NUMBER'.
          gw_add_task-qsmnum gw_global_prms-variable_value.
        WHEN 'CODE_GROUP'.
          gw_add_task-mngrp  gw_global_prms-variable_value.
        WHEN 'TASK_CODE'.
          gw_add_task-mncod  gw_global_prms-variable_value.
        WHEN 'PARTNER_FUNCTION'.
          gw_add_task-parvw  gw_global_prms-variable_value.
      ENDCASE.


      IF gv_tabix EQ gv_i.
        APPEND gw_add_task TO gt_add_task.
        CLEAR gw_add_task.
      ENDIF.


    ENDLOOP.
  ENDIF" IF sy-subrc eq 0.


  IF gt_add_task IS NOT INITIAL.

    IF gt_qmel1 IS NOT INITIAL.

      CLEAR gt_qn_email.

      SELECT FROM ztqm_email_notif INTO TABLE gt_qn_email
                                         FOR ALL ENTRIES IN gt_qmel1
                                         WHERE werks EQ gt_qmel1-werks.

    ENDIF"if gt_qmel1 is not INITIAL.




    CLEAR gw_qmel.
    LOOP AT gt_qmel1 INTO gw_qmel.

      CLEAR gt_add_task1,
              gw_add_task.

      LOOP AT gt_add_task INTO gw_add_task.
        CLEAR gv_tabix.
        gv_tabix sy-tabix .

        CLEAR gw_qn_email.

        READ TABLE gt_qn_email INTO gw_qn_email
                   WITH KEY werks gw_qmel-werks .
        IF sy-subrc EQ  .

          gw_add_task-parnr gw_qn_email-parnr .

        ENDIF.
        APPEND gw_add_task TO gt_add_task1 .
        CLEAR gw_add_task .

      ENDLOOP.


*This Function module used to add task for the notification F2
*      CALL FUNCTION 'Z_QM_QN_ADD_TASK'
*        EXPORTING
*          i_qmnum    = gw_qmel-qmnum
*        TABLES
*          i_viqmsm_t = gt_add_task
*          i_return_t = gt_return.

      CALL FUNCTION 'Z_QM_QN_ADD_TASK'
        EXPORTING
          i_qmnum    gw_qmel-qmnum
        TABLES
          i_viqmsm_t gt_add_task1
          i_return_t gt_return.
      IF gt_return IS INITIAL.

        APPEND gw_qmel TO gt_qmel2 .
*Begin of RavulS1 D47K9A0XEZ 04-Oct-2013
      ELSE.

        APPEND gw_qmel TO gt_qmel2 .
        CLEAR gw_add_extra_line .
        gw_add_extra_line-qmnum gw_qmel-qmnum .
        gw_add_extra_line-flag 'X' .

        APPEND gw_add_extra_line TO gt_add_extra_line .
*End of RavulS1 D47K9A0XEZ 04-Oct-2013
      ENDIF.
      CLEAR gw_qmel,
              gt_return.

    ENDLOOP.
  ENDIF.
ENDIF."  if gt_qmel is  not INITIAL.

CLEAR gw_add_task,
        gw_qmel,
        gw_global_prms.

REFRESH gt_add_task,
          gt_return,
          gt_qmel1,
          gt_global_prms.

PERFORM send_email_for_qn .

DELETE zqm_qmel FROM TABLE gt_qmel2 .
REFRESH gt_qmel2.

*&---------------------------------------------------------------------*
*&      Form  SEND_EMAIL_FOR_QN
*&---------------------------------------------------------------------*
*       Send an Email for the QN Notification to user
*----------------------------------------------------------------------*

FORM send_email_for_qn .
*  Send an Email for the QN Notification F2 for the responsible user

  DATA ls_email_data TYPE sodocchgi1,
         lt_email_text TYPE STANDARD TABLE OF solisti1,
         ls_email_text TYPE solisti1,
         lt_email_send TYPE STANDARD TABLE OF somlreci1,
         ls_email_send TYPE somlreci1 ,
         lt_qn_email TYPE STANDARD TABLE OF ztqm_email_notif,
         lw_qn_email TYPE ztqm_email_notif.

  CLEAR lt_qn_email,
          lw_qn_email.
  IF gt_qmel2 IS NOT INITIAL.

*    SELECT * FROM ztqm_email_notif INTO TABLE lt_qn_email
*                                   FOR ALL ENTRIES IN gt_qmel2
*                                   WHERE werks EQ gt_qmel2-werks.

    CLEAR gw_qmel.
    CLEAR ls_email_data,
            lt_email_text,
            ls_email_text,
            lt_email_send,
            ls_email_send.
    LOOP AT gt_qmel2 INTO gw_qmel.


*Fetch email id
      CLEAR lw_qn_email.
*      READ TABLE lt_qn_email INTO lw_qn_email
*                             WITH KEY werks = gw_qmel-werks .
      READ TABLE gt_qn_email INTO lw_qn_email
                                   WITH KEY werks gw_qmel-werks .
      IF lw_qn_email-dl_name IS NOT INITIAL.

        ls_email_send-receiver lw_qn_email-dl_name.
        ls_email_send-rec_type gc_u"'U'.
        ls_email_send-express  gc_x ."'X'.
        APPEND ls_email_send TO lt_email_send.


        ls_email_data-obj_name 'MESSAGE'.

        CONCATENATE     'New F2-QN-'(018)
                        gw_qmel-qmnum
                        '-'
                        gw_qmel-matnr
                        INTO ls_email_data-obj_descr SEPARATED BY space.

* Email attributes
        ls_email_data-obj_langu  'E'.
        ls_email_data-sensitivty 'P'.
        ls_email_data-obj_prio   '1'.
        ls_email_data-no_change  'X'.
        ls_email_data-priority   '1'.

*Send the below texts while sending the mail.
        CLEAR ls_email_text.

        ls_email_text-line 'Hi QN User,'(001.

        APPEND ls_email_text TO lt_email_text.

        APPEND INITIAL LINE TO lt_email_text.

        CLEAR ls_email_text.

        CONCATENATE 'The following F2 Vendor error Quality notification -'(002)
                      gw_qmel-qmnum
                      '-'
                      'has been created.'(003)
                      INTO ls_email_text-line SEPARATED BY space.

        APPEND ls_email_text TO lt_email_text.

        CLEAR ls_email_text.

        CONCATENATE 'Please release the notification'(004)
                    'and assign tasks for completion in SAP QM.'(005)
                    INTO ls_email_text-line SEPARATED BY space.

        APPEND ls_email_text TO lt_email_text.

        APPEND INITIAL LINE TO lt_email_text.

        CLEAR ls_email_text.

        CONCATENATE 'Material:'(006)
                  gw_qmel-matnr
                  INTO ls_email_text-line SEPARATED BY space.

        APPEND ls_email_text TO lt_email_text.

        CLEAR ls_email_text.

        CONCATENATE 'Material Description:'(007)
                   gw_qmel-maktx
                INTO ls_email_text-line SEPARATED BY space.

        APPEND ls_email_text TO lt_email_text.

        CLEAR ls_email_text.

        CONCATENATE 'Supplier:'(008)
                    gw_qmel-vendor_name
                    '< Supplier ID:'(009)
                    gw_qmel-lifnum
                    '>'
                    INTO ls_email_text-line SEPARATED BY space.

        APPEND ls_email_text TO lt_email_text.

        CLEAR ls_email_text.

        CONCATENATE 'QN created by:'(010)
                  gw_qmel-fullname
                  '< SAP User ID:'(011)
                  gw_qmel-ernam
                  '>'
                  INTO ls_email_text-line SEPARATED BY space.
        APPEND ls_email_text TO lt_email_text.

        CLEAR ls_email_text.

        APPEND INITIAL LINE TO lt_email_text.

        CONCATENATE 'If you have received this e-mail in error'(012)
                    'or'(013)
                    'if you have questions on processing this F2 QN,'(014)
                    'contact your site IQA.'(015)
                    INTO ls_email_text-line SEPARATED BY space.

        APPEND ls_email_text TO lt_email_text.

*Begin of RavulS1 D47K9A0XEZ 04-Oct-2013

        CLEAR gw_add_extra_line .
        READ TABLE gt_add_extra_line INTO gw_add_extra_line
                   WITH KEY qmnum gw_qmel-qmnum .
        IF sy-subrc EQ 0.
*Sy-subrc will be zero only if adding of default task fails
          APPEND INITIAL LINE TO lt_email_text.
          CLEAR ls_email_text.

          CONCATENATE 'Auto-Tasks were not created due to data'(019'issues'(020)
                      INTO ls_email_text-line SEPARATED BY space.

        ENDIF.
*End of RavulS1 D47K9A0XEZ 04-Oct-2013
        APPEND INITIAL LINE TO lt_email_text.

        CLEAR ls_email_text.
        CONCATENATE '*****This message is triggered automatically'(016)
                    'from Inspection lot processing*****'(017)
                    INTO ls_email_text-line SEPARATED BY space.

        APPEND ls_email_text TO lt_email_text.

        APPEND INITIAL LINE TO lt_email_text.

        CLEAR ls_email_text.


*By using the below Function module send an email

        CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
          EXPORTING
            document_data              ls_email_data
            document_type              'RAW'
            put_in_outbox              gc_x "'X'
            commit_work                gc_x "'X'
          TABLES
            object_content             lt_email_text
            receivers                  lt_email_send
          EXCEPTIONS
            too_many_receivers         1
            document_not_sent          2
            document_type_not_exist    3
            operation_no_authorization 4
            parameter_error            5
            x_error                    6
            enqueue_error              7
            OTHERS                     8.

        IF sy-subrc EQ 0.

        ENDIF.

      ENDIF"if lw_qn_email-dl_name is NOT INITIAL.

      CLEAR ls_email_data,
        lt_email_text,
        ls_email_text,
        lt_email_send,
        ls_email_send.
      CLEAR gw_qmel .

    ENDLOOP.

  ENDIF."if gt_qmel2 is not INITIAL.

ENDFORM.                    " SEND_EMAIL_FOR_QN

Friday, 7 March 2014

Sample Program for Classical ALV Report with Header by Shravankumar Ravula

*&---------------------------------------------------------------------*
*& Report  YSTEST_ALV                                                  *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ystest_alv                              .

TABLESmara.

*----------------------------------------------------------------------*
*                           TYPE-POOLS
*----------------------------------------------------------------------*
TYPE-POOLSslis.
*----------------------------------------------------------------------*
*                           TYPES DECLARATION
*----------------------------------------------------------------------*


TYPES BEGIN OF ty_mara,
        matnr TYPE mara-matnr,
          ersda TYPE mara-ersda,
          ernam TYPE mara-ernam,
       END OF ty_mara .

TYPESBEGIN OF gy_final,
        matnr TYPE mara-matnr,
           ersda TYPE mara-ersda,
           ernam TYPE mara-ernam,
            laeda  TYPE mara-ernam,
            aenam  TYPE mara-ernam,
            vpsta  TYPE mara-ernam,
            pstat TYPE mara-ernam,
            lvorm  TYPE mara-ernam,
            mtart  TYPE mara-ernam,
      END OF gy_final.

DATAgt_mara  TYPE STANDARD TABLE OF ty_mara,
      gw_mara TYPE ty_mara,
      gt_final TYPE TABLE OF gy_final,
      gw_final TYPE gy_final.

*--------------------------------------------------------------------*
*                    SLIS Variables
*--------------------------------------------------------------------*

DATAgw_event           TYPE slis_alv_event,                            " ALV EVENT
      gw_layout          TYPE slis_layout_alv,
      gt_fieldcat        TYPE slis_t_fieldcat_alv,
      gt_event           TYPE slis_t_event,                              " ALV EVENT
      gt_heading         TYPE slis_t_listheader,                       " ALV HEADING
      gw_grid_settings   TYPE  lvc_s_glay,
      gw_variant         TYPE disvariant,
      gw_fieldcat        TYPE slis_fieldcat_alv.


DATA gv_date(60TYPE .

*----------------------------------------------------------------------*
*                   CONSTANTS
*----------------------------------------------------------------------*

CONSTANTS :  gc_s          TYPE c              VALUE   'S',
             gc_x          TYPE char1          VALUE   'X',
             gc_top        TYPE slis_formname  VALUE 'TOP_OF_PAGE',
             gc_a          TYPE char1          VALUE   'A'.


*----------------------------------------------------------------------*
*                    SELECT-OPTIONS
*----------------------------------------------------------------------*
SELECTION-SCREENBEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERSp_matnr TYPE mara-matnr.


SELECTION-SCREEN:  END OF BLOCK b1.

*--------------------------------------------------------------------*
*                    START-OF-SELECTION
*--------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM sub_populate_mara.
  PERFORM sub_populate_final.
*  Prepare fieldcatalog
  PERFORM sub_fieldcat.
*  Build Event
  PERFORM populate_event.
* FOR ALV HEADER
  PERFORM build_comment  USING gt_heading[].
*  output display
  PERFORM sub_output_display.
*&---------------------------------------------------------------------*
*&      Form  SUB_POPULATE_MARA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_populate_mara .

  SELECT  matnr
          ersda
          ernam
          FROM mara INTO TABLE gt_mara
          WHERE matnr EQ p_matnr.


ENDFORM.                    " SUB_POPULATE_MARA
*&---------------------------------------------------------------------*
*&      Form  SUB_POPULATE_FINAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_populate_final .

  LOOP AT gt_mara INTO gw_mara.
    gw_final-matnr  gw_mara-matnr.
    gw_final-ersda  gw_mara-ersda.
    gw_final-ernam     gw_mara-ernam.

    APPEND gw_final TO gt_final.
    CLEARgw_final.
  ENDLOOP.
ENDFORM.                    " SUB_POPULATE_FINAL
*&---------------------------------------------------------------------*
*&      Form  SUB_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_fieldcat .

  gw_fieldcat-fieldname   'MATNR'.
  gw_fieldcat-seltext_l   'Material Number'(004).
  gw_fieldcat-col_pos     0.
  APPEND gw_fieldcat TO gt_fieldcat.
  CLEAR gw_fieldcat.


  gw_fieldcat-fieldname   'ERSDA'.
  gw_fieldcat-seltext_l   'Creation Date'(005).
  gw_fieldcat-col_pos     1.
  APPEND gw_fieldcat TO gt_fieldcat.
  CLEAR gw_fieldcat.


  gw_fieldcat-fieldname   'ERNAM'.
  gw_fieldcat-seltext_l   'Created By'(005).
  gw_fieldcat-col_pos     1.
  APPEND gw_fieldcat TO gt_fieldcat.
  CLEAR gw_fieldcat.



ENDFORM.                    " SUB_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  POPULATE_EVENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM populate_event .

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type     0
    IMPORTING
      et_events       gt_event
    EXCEPTIONS
      list_type_wrong 1
      OTHERS          2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ELSE.
    SORT gt_event BY name.
    READ TABLE gt_event WITH KEY name slis_ev_top_of_page INTO gw_event
                                                               BINARY SEARCH.
    IF sy-subrc 0.
      MOVE gc_top TO gw_event-form.
      MODIFY gt_event FROM gw_event INDEX sy-tabix TRANSPORTING form.
    ENDIF.

  ENDIF.


ENDFORM.                    " POPULATE_EVENT
*&---------------------------------------------------------------------*
*&      Form  BUILD_COMMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_HEADING[]  text
*----------------------------------------------------------------------*
FORM build_comment  USING   p_heading TYPE slis_t_listheader.

  DATA:  l_hline TYPE slis_listheader,
          lv_title(50),
          lv_progname(20),
          lv_datum(11),
          lv_time(10),
          lv_username(30),
          lv_pagno(2),
          lv_pagno1(2),
          lv_client(10),
          l_f_info(132),
           lv_host(10).

  lv_title sy-title.
  lv_progname sy-cprog.
  lv_datum sy-datum.
  lv_time  sy-uzeit.
  lv_username sy-uname.
*  lv_pagno = sy-pagno.
  lv_pagno sy-pagno + 1.
  lv_pagno1 sy-pagno + 1.
  lv_client sy-mandt.
  lv_host sy-sysid.

  l_hline-typ  gc_s.
  l_hline-key  'REPORT TITLE:'.
  l_hline-info =  lv_title.
  APPEND l_hline TO p_heading.
  CLEAR l_hline.

  l_hline-typ  gc_s.
  l_hline-key  'PROGRAM NAME:'.
  l_hline-info =  lv_progname.
  APPEND l_hline TO p_heading.
  CLEAR l_hline.

  PERFORM get_gdp_date.

  CONCATENATE sy-timlo+0(2':' sy-timlo+2(2':' sy-timlo+4(2)
  INTO lv_time.

  l_hline-typ  gc_s.
  l_hline-key  'DATE:'.
  l_hline-info =  gv_date.
  APPEND l_hline TO p_heading.
  CLEAR l_hline.

  l_hline-typ  gc_s.
  l_hline-key  'TIME:'.
  l_hline-info =  lv_time.
  APPEND l_hline TO p_heading.
  CLEAR l_hline.


  CONCATENATE  lv_pagno '/' lv_pagno1 INTO l_f_info
*
                                         SEPARATED BY '   '.


  l_hline-typ  gc_s.
  l_hline-key  'PAGNO:'.
  l_hline-info =  l_f_info.
  APPEND l_hline TO p_heading.
  CLEAR l_hline.

  l_hline-typ  gc_s.
  l_hline-key  'USERID:'.
  l_hline-info =  lv_username.
  APPEND l_hline TO p_heading.
  CLEAR l_hline.


  l_hline-typ  gc_s.
  l_hline-key  'CLIENT:'.
  l_hline-info =  lv_client.
  APPEND l_hline TO p_heading.
  CLEAR l_hline.

  l_hline-typ  gc_s.
  l_hline-key  'SAP SYSTEM:'.
  l_hline-info =  lv_host.
  APPEND l_hline TO p_heading.
  CLEAR l_hline.

ENDFORM.                    " BUILD_COMMENT

***---------------------------------------------------------------------*
***       FORM TOP_OF_PAGE                                              *
**----------------------------------------------------------------------*
*Display top of page details which we defined in the report
*---------------------------------------------------------------------*
FORM top_of_page.                                           "#EC CALLED
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary gt_heading[].


ENDFORM.                    " BUILD_COMMENT

*&---------------------------------------------------------------------*
*&      Form  GET_GDP_DATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_gdp_date .
  DATA lt_month_names TYPE TABLE OF t247 ,
         ls_month_names TYPE t247 .

  gv_date sy-datlo .
  CALL FUNCTION 'MONTH_NAMES_GET'
    EXPORTING
      language    sy-langu
    TABLES
      month_names lt_month_names.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    READ TABLE lt_month_names INTO ls_month_names
                   WITH KEY mnr   sy-datlo+4(2).
    IF sy-subrc EQ .
      CLEAR gv_date.
      CONCATENATE sy-datlo+6(2ls_month_names-ktx
                  sy-datlo+0(4INTO gv_date.
    ENDIF.
  ENDIF.

ENDFORM.                    " GET_GDP_DATE
*&---------------------------------------------------------------------*
*&      Form  SUB_OUTPUT_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sub_output_display .
  gw_layout-colwidth_optimize 'X'.
  gw_grid_settings-no_colwopt 'X'.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program sy-repid
      i_grid_settings    gw_grid_settings
      is_layout          gw_layout
      it_fieldcat        gt_fieldcat[]
      i_default          gc_x
      i_save             gc_a
      is_variant         gw_variant
      it_events          gt_event[]
    TABLES
      t_outtab           gt_final[]
    EXCEPTIONS
      program_error      1
      OTHERS             2.

  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " SUB_OUTPUT_DISPLAY

Wednesday, 5 March 2014

Sample Program for Classical ALV Report with Header



REPORT  ybtest  .


TABLES SFLIGHT.
TYPE-POOLS SLIS.
**INTERNAL TABLE DECLARTION
DATA WA_SFLIGHT TYPE SFLIGHT,
       IT_SFLIGHT TYPE TABLE OF SFLIGHT.
**DATA DECLARTION
DATAFIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GD_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GD_REPID     LIKE SY-REPID,
      G_SAVE TYPE VALUE 'X',
      G_VARIANT TYPE DISVARIANT,
      GX_VARIANT TYPE DISVARIANT,
      G_EXIT TYPE C,
      ISPFLI TYPE TABLE OF SPFLI.
* To understand the importance of the following parameter,
**SELECTION SCREEN DETAILS
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-002 .
PARAMETERSVARIANT LIKE DISVARIANT-VARIANT.
SELECTION-SCREEN END OF BLOCK B1.
**GETTING DEFAULT VARIANT
INITIALIZATION.
  GX_VARIANT-REPORT SY-REPID.
  CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
    EXPORTING
      I_SAVE     G_SAVE
    CHANGING
      CS_VARIANT GX_VARIANT
    EXCEPTIONS
      NOT_FOUND  2.
  IF SY-SUBRC 0.
    VARIANT GX_VARIANT-VARIANT.
  ENDIF.
**PERFORM DECLARATIONS
START-OF-SELECTION.
  PERFORM DATA_RETRIVEL.
  PERFORM BUILD_FIELDCATALOG.
  PERFORM DISPLAY_ALV_REPORT.
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCATALOG .
  FIELDCATALOG-FIELDNAME   'CARRID'.
  FIELDCATALOG-SELTEXT_M   'Airline Code'.
  FIELDCATALOG-COL_POS     0.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'CONNID'.
  FIELDCATALOG-SELTEXT_M   'Flight Connection Number'.
  FIELDCATALOG-COL_POS     1.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'FLDATE'.
  FIELDCATALOG-SELTEXT_M   'Flight date'.
  FIELDCATALOG-COL_POS     2.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.
  FIELDCATALOG-FIELDNAME   'PRICE'.
  FIELDCATALOG-SELTEXT_M   'Airfare'.
  FIELDCATALOG-COL_POS     3.
  FIELDCATALOG-OUTPUTLEN   20.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.
ENDFORM.                    " BUILD_FIELDCATALOG


*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_REPORT .
  GD_REPID SY-REPID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      GD_REPID
      I_CALLBACK_TOP_OF_PAGE  'TOP-OF-PAGE'  "see FORM
      I_CALLBACK_USER_COMMAND 'USER_COMMAND'
      IT_FIELDCAT             FIELDCATALOG[]
      I_SAVE                  'X'
      IS_VARIANT              G_VARIANT
    TABLES
      T_OUTTAB                IT_SFLIGHT
    EXCEPTIONS
      PROGRAM_ERROR           1
      OTHERS                  2.
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    "DISPLAY_ALV_REPORT
" DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIVEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DATA_RETRIVEL .
  SELECT FROM SFLIGHT INTO TABLE IT_SFLIGHT.
ENDFORM.                    " DATA_RETRIVEL
*-------------------------------------------------------------------*
* Form  TOP-OF-PAGE                                                 *
*-------------------------------------------------------------------*
* ALV Report Header                                                 *
*-------------------------------------------------------------------*
FORM TOP-OF-PAGE.
*ALV Header declarations
  DATAT_HEADER TYPE SLIS_T_LISTHEADER,
        WA_HEADER TYPE SLIS_LISTHEADER,
        T_LINE LIKE WA_HEADER-INFO,
        LD_LINES TYPE I,
        LD_LINESC(10TYPE C.



* Title
 WA_HEADER-TYP  'H'.
  WA_HEADER-INFO 'SFLIGHT Table Report'.
  APPEND WA_HEADER TO T_HEADER.
  CLEAR WA_HEADER.
* Date
  WA_HEADER-TYP  'S'.
  WA_HEADER-KEY 'Date: '.
  CONCATENATE  SY-DATUM+6(2'.'
               SY-DATUM+4(2'.'
               SY-DATUM(4INTO WA_HEADER-INFO.   "todays date
  APPEND WA_HEADER TO T_HEADER.

  CONSTANTS :  gc_s          TYPE c              VALUE   'S' .
   DATA:  l_hline TYPE slis_listheader,
          lv_title(50),
          lv_progname(20),
          lv_datum(11),
          lv_time(10),
          lv_username(30),
          lv_pagno(2),
          lv_pagno1(2),
          lv_client(10),
          l_f_info(132),
           lv_host(10,
           gv_date(60TYPE c.

  lv_title sy-title.
  lv_progname sy-cprog.
  lv_datum sy-datum.
  lv_time  sy-uzeit.
  lv_username sy-uname.
*  lv_pagno = sy-pagno.
  lv_pagno sy-pagno + 1.
  lv_pagno1 sy-pagno + 1.
  lv_client sy-mandt.
  lv_host sy-sysid.

  l_hline-typ  gc_s.
  l_hline-key  'REPORT TITLE:'.
  l_hline-info =  lv_title.
  APPEND l_hline TO T_HEADER.
  CLEAR l_hline.

  l_hline-typ  gc_s.
  l_hline-key  'PROGRAM NAME:'.
  l_hline-info =  lv_progname.
  APPEND l_hline TO T_HEADER.
  CLEAR l_hline.



  CONCATENATE sy-timlo+0(2':' sy-timlo+2(2':' sy-timlo+4(2)
  INTO lv_time.

  l_hline-typ  gc_s.
  l_hline-key  'DATE:'.
  l_hline-info =  gv_date.
  APPEND l_hline TO T_HEADER.
  CLEAR l_hline.

  l_hline-typ  gc_s.
  l_hline-key  'TIME:'.
  l_hline-info =  lv_time.
  APPEND l_hline TO T_HEADER.
  CLEAR l_hline.


  CONCATENATE  lv_pagno '/' lv_pagno1 INTO l_f_info
*
                                         SEPARATED BY '   '.


  l_hline-typ  gc_s.
  l_hline-key  'PAGNO:'.
  l_hline-info =  l_f_info.
  APPEND l_hline TO T_HEADER.
  CLEAR l_hline.

  l_hline-typ  gc_s.
  l_hline-key  'USERID:'.
  l_hline-info =  lv_username.
  APPEND l_hline TO T_HEADER.
  CLEAR l_hline.


  l_hline-typ  gc_s.
  l_hline-key  'CLIENT:'.
  l_hline-info =  lv_client.
  APPEND l_hline TO T_HEADER.
  CLEAR l_hline.

  l_hline-typ  gc_s.
  l_hline-key  'SAP SYSTEM:'.
  l_hline-info =  lv_host.
  APPEND l_hline TO T_HEADER.
  CLEAR l_hline.




  CLEARWA_HEADER.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY T_HEADER.
ENDFORM.                    "top-of-page


Output sample : 

Tuesday, 4 March 2014

Enhancements in SAP ABAP


Difference Between Enhancement-Point And Enhancement-Section

The difference are :

Enhancement-point --  You can only add additional codes, you cannot change the existing code.

Enhancment-secton --  You can change or replace the existing SAP code.



There are 2 types of enhancements with the enhancement framework:


1. Explicit enhancement points: These are basically hooks already coded into the program by SAP at various points of the code. See program RIAUFMVK for examples of these! These are very easy to implement simply go into enhancement mode of SE80 and right click on the enhancement point where you want to add your code and choose u2018Enhancement Implementation->Createu2019 Give it a name, description and assign it to a change request (should not be a Z package) and then simply add the code as normal.



2. Implicit enhancement points: These are basically points within ABAP code where an enhancement point is implied, and in which case can be created. Examples of implicit enhancement points are at the beginning and end of FORMu2019s, at the end of a program, include or function module etc.

Please go through this link for an example:

Implicit Example : 




Just check this example also related to frame work:


Explicit Example :

http://wiki.scn.sap.com/wiki/pages/viewpage.action?pageId=77988719


Thursday, 26 December 2013

Sample code for double click on output list using REUSE_ALV_GRID_DISPLAY , SAP or Interactive ALV

Do this:

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_top_of_page  = 'TOP-OF-PAGE'
      i_grid_title            = 'Title goes here'
      i_callback_program      = program
      i_grid_settings         = grid_setting
      i_callback_user_command = 'DOUBLE_CLICK_ON_ALV'
      is_layout               = alv_layout
      it_fieldcat             = i_fieldcat_alv
    TABLES
      t_outtab                = itab.



FORM double_click_on_ALV USING r_ucomm LIKE sy-ucomm
                                  rs_selfield TYPE slis_selfield.

  READ TABLE itab INDEX rs_selfield-tabindex.

  " now you can do what ever you like
  " with the above read statement you have the exact line
  " that the user selected. 
  " from here you can call FB03 or perform any other funciton

ENDFORM.         

Thursday, 21 November 2013

Authenticating User Login Details in SAP or Verifing Username and Password in SAP


SUSR_CHECK_LOGON_DATA  is the function module used to verify authentication 

Or 

 SUSR_LOGIN_CHECK_RFC , we can verify authentication.