Do you Know ?

ABAP Code Generator Tool. ( Part 6 ) ( Final )

Trigger Mail: This option will generate the code which can be used for sending mail. For Input details kindly refer the section ‘Sample Run’.

Download file to Local machine: This option will generate the code which can be used for downloading file into presentation server.


List box ‘File type’: Based on the file type selected the output code will be generated.


Checkbox ‘Display Column heading in file’: When this checkbox is selected the user has to click on the icon  and populate the column headings that must appear as first row in the attachment.

Download file to Application server: This option will generate the code which can be used for downloading file into application server.




List box ‘Delimiter’: Based on the Delimiter selected, output code will be generated. If the value ‘Other’ is selected then the user will have to declare ‘C_DELIMITER’ constant with appropriate separator. When Delimiter is not populated then ‘TAB’ will be chosen as default delimiter, if the
checkbox ‘Fixed Length’ is not selected.




When ‘Fixed Length’ checkbox is selected, the user has to click on the icon  and enter the Field name in the order as needed in the output file and enter its corresponding length. The user can view the column positions by clicking on the push button ‘Position’. When the push button is clicked the column ‘Position’ will get populated with the position details. Delimiter will be taken into consideration while calculating the position, if ‘Delimiter’ field contains value.

When the ‘Delimiter’ field is blank:




When the ‘Delimiter’ contains value:

Click the push button ‘Position’:



Create Outbound IDoc: This option will generate the code which can be used for creating Outbound IDoc. The User has to enter the IDoc type and its corresponding message type. The Output Code will contain subroutines- one for each of the segments under the IDoc type entered.  The code will also contain the logic to populate the control information and to create the outbound IDoc using the standard function module ‘MASTER_IDOC_DISTRIBUTE’.



Future scope of Enhancement:

The tool can be enhanced to include other options such as:
Generation of selection screen and validation of selection screen fields
Generation of BDC program based on SHDB recording
Upload file data to DB table


ABAP Code Generator Tool. ( Part 5 )

Output:

Code:
___________________________________________________

**** Type pools for alv declarations ****
TYPE-POOLS: slis.

**** Display ALV Output ****
PERFORM display_alv
        
TABLES  <Enter Block1 Final table name>
                <Enter Block2 Final 
table name>.

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV
*&---------------------------------------------------------------------*
*       Display ALV Output
*----------------------------------------------------------------------*
*      -->P_I_BLK1    Final Output Table for block1
*      -->P_I_BLK2    Final Output Table for block2
*----------------------------------------------------------------------*
FORM display_alv  TABLES   p_i_blk1 STRUCTURE <Enter correct structure name>
                           p_i_blk2 
STRUCTURE <Enter correct structure name>.

**** Data Declaration for ALV ****
  
DATA:
      i_fcat_blk1    
TYPE slis_t_fieldcat_alv,  "Field catalog for blk1
      i_fcat_blk2    
TYPE slis_t_fieldcat_alv,  "Field catalog for blk2
      i_events_blk1  
TYPE slis_t_event,         "Events
      i_events_blk2  
TYPE slis_t_event,         "Events
      i_sort_blk1    
TYPE slis_t_sortinfo_alv,  "Sort block1
      i_sort_blk2    
TYPE slis_t_sortinfo_alv,  "Sort block2
      wa_layout_blk1 
TYPE slis_layout_alv,      "Block1 Layout
      wa_layout_blk2 
TYPE slis_layout_alv.      "Block2 Layout

**** Initialize table & workarea ****
  
REFRESH: i_fcat_blk1, i_fcat_blk2, i_events_blk1, i_events_blk2.
  
REFRESH: i_sort_blk1, i_sort_blk2.
  
CLEAR  : wa_layout_blk1, wa_layout_blk2.

**** Build Layout ****
* Build block1 layout
  
PERFORM layout_alv USING '1'
                     
CHANGING wa_layout_blk1.
* Build block2 layout
  
PERFORM layout_alv USING '2'
                     
CHANGING wa_layout_blk2.

**** Set Events ****
* Set events for block1
  
PERFORM set_events USING '1'
                     
CHANGING i_events_blk1.
* Set events for block2
  
PERFORM set_events USING '2'
                     
CHANGING i_events_blk2.

**** Build the field catalog ****
* Build Fcat for block1 using reference structure
  
PERFORM build_field_catalog_fm USING i_fcat_blk1
                                       
'P_I_BLK1'
                                       
'<Enter the Structure name>'.
* Build Fcat for block2
  
PERFORM build_field_catalog TABLES i_fcat_blk2 USING:
     
'P_I_BLK2' '<Enter Field1>' '<Enter Col1 description>' '<Enter 'X' if Total/Subtot reqd else ' '>' ,
     
'P_I_BLK2' '<Enter Field2>' '<Enter Col2 description>' '<Enter 'X' if Total/Subtot reqd else ' '>' .

**** Build sort table ****
  
PERFORM sort_table TABLES i_sort_blk1
                     
USING'<Enter Field Names in order of sorting>'
                            
' '"<Enter 'X' if subtotal should be calculated based on this field>
  
PERFORM sort_table TABLES i_sort_blk2
                     
USING'<Enter Field Names in order of sorting>'
                            
' '"<Enter 'X' if subtotal should be calculated based on this field>

**** Initialize Block List Output ****
  
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
    
EXPORTING
      i_callback_program             = sy-repid
      i_callback_pf_status_set       = 
'PF_STATUS_SET'
*   I_CALLBACK_USER_COMMAND            = ' '
*       IT_EXCLUDING                   =
               .

**** Append Simple List in Block Mode ****
* Append block1
  
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
    
EXPORTING
      is_layout                        =  wa_layout_blk1
      it_fieldcat                      =  i_fcat_blk1
      i_tabname                        =  
'P_I_BLK1'
      it_events                        =  i_events_blk1
    it_sort                          = i_sort_blk1
*   I_TEXT                           = ' '
    
TABLES
       t_outtab                         = p_i_blk1
    
EXCEPTIONS
       program_error                    = 
1
       maximum_of_appends_reached       = 
2
       
OTHERS                           = 3.
  
IF sy-subrc <> 0.
    
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  
ENDIF.

* Append block1
  
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
    
EXPORTING
      is_layout                        =  wa_layout_blk2
      it_fieldcat                      =  i_fcat_blk2
      i_tabname                        =  
'P_I_BLK2'
      it_events                        =  i_events_blk2
    it_sort                          = i_sort_blk2
*   I_TEXT                           = ' '
    
TABLES
       t_outtab                         = p_i_blk2
    
EXCEPTIONS
       program_error                    = 
1
       maximum_of_appends_reached       = 
2
       
OTHERS                           = 3.
  
IF sy-subrc <> 0.
    
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  
ENDIF.

**** Display block list ****
  
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
* EXPORTING
*   I_INTERFACE_CHECK             = ' '
*   IS_PRINT                      =
*   I_SCREEN_START_COLUMN         = 0
*   I_SCREEN_START_LINE           = 0
*   I_SCREEN_END_COLUMN           = 0
*   I_SCREEN_END_LINE             = 0
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER       =
*   ES_EXIT_CAUSED_BY_USER        =
   
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
*&---------------------------------------------------------------------*
*&      Form  LAYOUT_ALV
*&---------------------------------------------------------------------*
*       Set the layout
*----------------------------------------------------------------------*
*      -->P_BLOCK      block
*      -->P_WA_LAYOUT  layout
*----------------------------------------------------------------------*
FORM layout_alv  USING    p_block     TYPE i
                 
CHANGING p_wa_layout TYPE slis_layout_alv.

    p_wa_layout-zebra             = 
'X'.
    p_wa_layout-colwidth_optimize = 
'X'.
    p_wa_layout-totals_text       = 
'Total'.
    p_wa_layout-subtotals_text    = 
'Sub Total'
  
IF p_block = '1'.
* Set Layout for block1
  
ELSEIF p_block = '2'.
* Set Layout for block2
  
ENDIF.

ENDFORM.                    " LAYOUT_ALV
*&---------------------------------------------------------------------*
*&      Form  SET_EVENTS
*&---------------------------------------------------------------------*
*       Get the Events
*----------------------------------------------------------------------*
*      -->P_BLOCK      block
*      -->P_I_EVENTS  Events
*----------------------------------------------------------------------*
FORM set_events USING      p_block    TYPE i
                
CHANGING   p_i_events TYPE slis_t_event.

**** Data Declaration ****
  
DATA : wa_events  TYPE slis_alv_event.
  
CLEAR: wa_events.

**** Set Events ****
  
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    
IMPORTING
      et_events       = p_i_events
    
EXCEPTIONS
      list_type_wrong = 
1
      
OTHERS          = 2.
  
IF sy-subrc EQ 0.
    
READ TABLE p_i_events INTO wa_events WITH KEY name = 'TOP_OF_LIST'.
    
IF sy-subrc = 0"Set top-of-page Event
      
IF p_block = '1'.
        wa_events-
form = 'TOP_OF_LIST_BLK1'.
      
ELSEIF p_block = '2'.
        wa_events-
form = 'TOP_OF_LIST_BLK2'.
      
ENDIF.
      
MODIFY p_i_events FROM wa_events INDEX sy-tabix.
    
ENDIF.
    
READ TABLE p_i_events INTO wa_events WITH KEY name = 'USER_COMMAND'.
    
IF sy-subrc = 0"Set user_command Event
      
IF p_block = '1'.
        wa_events-
form = 'USER_COMMAND_BLK1'.
      
ELSEIF p_block = '2'.
        wa_events-
form = 'USER_COMMAND_BLK2'.
      
ENDIF.
      
MODIFY p_i_events FROM wa_events INDEX sy-tabix.
    
ENDIF.
  
ENDIF.

ENDFORM.                    " SET_EVENTS
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELD_CATALOG_FM
*&---------------------------------------------------------------------*
*       Build the field catalog
*----------------------------------------------------------------------*
*      -->p_i_fcat        Field Catalog
*      -->p_tabname       Final table name
*      -->p_struct        Reference Structure name
*----------------------------------------------------------------------*
FORM build_field_catalog_fm  USING   p_i_fcat      TYPE slis_t_fieldcat_alv
                                     p_tabname     
TYPE slis_tabname
                                     p_struct      
TYPE dd02l-tabname.

**** Data Declaration ****
  
DATA : wa_fcat  TYPE slis_fieldcat_alv.

  
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    
EXPORTING
      i_program_name               = sy-repid
      i_internal_tabname           = p_tabname
      i_structure_name             = p_struct
*    I_CLIENT_NEVER_DISPLAY       = 'x'
*    I_INCLNAME                   =
*    I_BYPASSING_BUFFER           =
*    I_BUFFER_ACTIVE              =
    
CHANGING
      ct_fieldcat                  = p_i_fcat
    
EXCEPTIONS
      inconsistent_interface       = 
1
      program_error                = 
2
      
OTHERS                       = 3.
  
IF sy-subrc <> 0.
    
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  
ENDIF.


  
LOOP AT p_i_fcat INTO wa_fcat.
    
CASE wa_fcat-fieldname.
      
WHEN '<enter the field name for which total/subtotal is required>'.
        wa_fcat-do_sum    = 
'X'.
      
WHEN '<enter the field name for which total/subtotal is required>'.
        wa_fcat-do_sum    = 
'X'.
     
WHEN OTHERS.
    
ENDCASE.
    
MODIFY p_i_fcat FROM wa_fcat INDEX sy-tabix.
    
CLEAR wa_fcat.
  
ENDLOOP.

ENDFORM.                     " BUILD_FIELD_CATALOG_FM
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELD_CATALOG
*&---------------------------------------------------------------------*
*       Build the field catalog
*----------------------------------------------------------------------*
*      -->p_tabname       Final table name
*      -->p_fieldname     Field name
*      -->p_seltext_l     Description
*      -->p_i_fcat        Field Catalog
*      -->p_do_sum        Sum up the field values
*----------------------------------------------------------------------*
FORM build_field_catalog  TABLES   p_i_fcat      TYPE slis_t_fieldcat_alv
                          
USING    p_tabname     TYPE slis_fieldcat_alv-tabname
                                   p_fieldname   
TYPE slis_fieldcat_alv-fieldname
                                   p_seltext_l   
TYPE slis_fieldcat_alv-seltext_l
                                   p_do_sum      
TYPE c.

**** Data Declaration ****
  
DATA : wa_fcat  TYPE slis_fieldcat_alv.
  
CLEAR: wa_fcat.

  wa_fcat-tabname   = p_tabname.
  wa_fcat-fieldname = p_fieldname.
  wa_fcat-seltext_l = p_seltext_l.
  wa_fcat-do_sum    = p_do_sum.
  
APPEND wa_fcat TO p_i_fcat.
  
CLEAR wa_fcat.

ENDFORM.                     " BUILD_FIELD_CATALOG
*&---------------------------------------------------------------------*
*&      Form  SORT_TABLE
*&---------------------------------------------------------------------*
*       Populate sort table
*----------------------------------------------------------------------*
*      -->P_I_SORT  sort table
*      -->P_FIELD   Field name; based on which the table is to be sorted
*      -->P_SUBTOT  If 'X', calculate subtotal based on P_FIELD
*----------------------------------------------------------------------*
FORM sort_table  TABLES   p_i_sort TYPE slis_t_sortinfo_alv
                 
USING    p_field  TYPE slis_fieldname
                          p_subtot 
TYPE char1.

**** Data Declaration ****
  
DATA   : wa_sort TYPE slis_sortinfo_alv.
  
STATICS: v_spos TYPE i.
  
CLEAR  : wa_sort.

  v_spos = v_spos + 
1.            "increment sort sequence
  wa_sort-fieldname = p_field.
  wa_sort-
up        = 'X'.        "Sort in ascending order
  wa_sort-spos      = v_spos.     
"Sort Sequence
  wa_sort-subtot    = p_subtot.   
"Consider for subtotal
  
APPEND wa_sort TO p_i_sort.

ENDFORM.                    " SORT_TABLE
*&---------------------------------------------------------------------*
*&      Form  TOP_OF_LIST_BLK1
*&---------------------------------------------------------------------*
*       populate the header
*----------------------------------------------------------------------*
FORM top_of_list_blk1 .

**** Data Declaration ****
  
DATA:
       i_header      
TYPE slis_t_listheader, "Header
       wa_header     
TYPE slis_listheader.

**** Initialize table & workarea ****
  
REFRESH: i_header.
  
CLEAR  : wa_header.

* Populate Title
  wa_header-typ  = 
'H'.
  wa_header-info = sy-
title"Program Title.
  
APPEND wa_header TO i_header.
  
CLEAR wa_header.

* Populate Current date
  wa_header-typ  = 
'S'.
  wa_header-
key  = 'Date :'.
  
CONCATENATE  sy-datum+6(2'.' sy-datum+4(2'.'
               sy-datum(
4INTO wa_header-info.
  
APPEND wa_header TO i_header.
  
CLEAR: wa_header.

* Populate Program name
  wa_header-typ  = 
'S'.
  wa_header-
key  = 'Program Name:'.
  wa_header-info = sy-repid.
  
APPEND wa_header TO i_header.
  
CLEAR: wa_header.

* Populate User name
  wa_header-typ  = 
'S'.
  wa_header-
key  = 'User Name:'.
  wa_header-info = sy-uname.
  
APPEND wa_header TO i_header.
  
CLEAR: wa_header.

* Display the header
  
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    
EXPORTING
      it_list_commentary = i_header.

  
REFRESH: i_header.
* Blank Line
  wa_header-typ  = 
'H'.
  wa_header-info = 
' '.
  
APPEND wa_header TO i_header.
  
CLEAR wa_header.

* Populate Block1 Description
  wa_header-typ  = 
'H'.
  wa_header-info = 
'<Enter Block1 Description>'.
  
APPEND wa_header TO i_header.
  
CLEAR wa_header.

* Display the header
  
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    
EXPORTING
      it_list_commentary = i_header.

**** Free table memory ****
  
REFRESH: i_header.

ENDFORM.                    " TOP_OF_LIST_BLK1
*&---------------------------------------------------------------------*
*&      Form  TOP_OF_LIST_BLK2
*&---------------------------------------------------------------------*
*       populate the header
*----------------------------------------------------------------------*
FORM top_of_list_blk2 .

**** Data Declaration ****
  
DATA:
       i_header      
TYPE slis_t_listheader, "Header
       wa_header     
TYPE slis_listheader.

**** Initialize table & workarea ****
  
REFRESH: i_header.
  
CLEAR  : wa_header.

* Populate Block2 Description
  wa_header-typ  = 
'H'.
  wa_header-info = 
'<Enter Block2 Description>'.
  
APPEND wa_header TO i_header.
  
CLEAR wa_header.

* Display the header
  
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    
EXPORTING
      it_list_commentary = i_header.

**** Free table memory ****
  
REFRESH: i_header.

ENDFORM.                    " TOP_OF_LIST_BLK2
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND_BLK1
*&---------------------------------------------------------------------*
*       Perform User Command
*----------------------------------------------------------------------*
*      -->P_V_UCOMM  user command
*      -->P_V_FIELD  field name
*----------------------------------------------------------------------*
FORM user_command_blk1  USING    p_v_ucomm TYPE sy-ucomm
                                 p_v_field 
TYPE slis_selfield.

  
CASE p_v_ucomm.
    
WHEN '&IC1'.  "User Command for Double Click
      
CASE p_v_field-fieldname. "check which ALV field was selected
        
WHEN '<Enter Field1 Name>'.
          
"<Enter/Write the logic to be performed when <Field1> is double clicked>
        
WHEN '<Enter Field2 Name>'.
          
"<Enter/Write the logic to be performed when <Field2> is double clicked>
        
WHEN OTHERS.
      
ENDCASE.
    
WHEN '<Enter User Command>'.
      
"<Enter/Write the logic to be performed at user command <User Command>>
    
WHEN OTHERS.
  
ENDCASE.

ENDFORM.                    " USER_COMMAND_BLK1
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND_BLK2
*&---------------------------------------------------------------------*
*       Perform User Command
*----------------------------------------------------------------------*
*      -->P_V_UCOMM  user command
*      -->P_V_FIELD  field name
*----------------------------------------------------------------------*
FORM user_command_blk2  USING    p_v_ucomm TYPE sy-ucomm
                                 p_v_field 
TYPE slis_selfield.

  
CASE p_v_ucomm.
    
WHEN '&IC1'.  "User Command for Double Click
      
CASE p_v_field-fieldname. "check which ALV field was selected
        
WHEN '<Enter Field1 Name>'.
          
"<Enter/Write the logic to be performed when <Field1> is double clicked>
        
WHEN '<Enter Field2 Name>'.
          
"<Enter/Write the logic to be performed when <Field2> is double clicked>
        
WHEN OTHERS.
      
ENDCASE.
    
WHEN '<Enter User Command>'.
      
"<Enter/Write the logic to be performed at user command <User Command>>
    
WHEN OTHERS.
  
ENDCASE.

ENDFORM.                    " USER_COMMAND_BLK2
*&---------------------------------------------------------------------*
*&      Form  PF_STATUS_SET
*&---------------------------------------------------------------------*
*       Set PF Status
*----------------------------------------------------------------------*
*      -->P_I_EXTAB  exculding table (Function Codes)
*----------------------------------------------------------------------*
FORM pf_status_set USING    p_i_extab TYPE slis_t_extab.

  
SET PF-STATUS '<Enter the status name>'
      
EXCLUDING p_i_extab.

ENDFORM.                    " PF_
________________________________________________________________________________
Click here to Continue.