Tuesday, March 6, 2012

AET and EEWB


AET
creating new fields/tables
can be used in crm web ui
integrated in crm web ui config tool
easy to use for buseinss users without tech knowledge
almost all applications r supported
use custom fields as search criteria
can create dropdown list boxes
easy translation


EEWB
creating new fields/tables
PCUI and GUI based
need tech knowledge
not integrated to config tool
few applications r supported
can create only existing search help./check table
manual translation

CRM MVC Architecture


MVC isolates data model,presentation logic and control processing
Model -manages-read/write application data
View takes care of display by buttons,input fields and other user interface controls
Controller-keyboard and mouse inputs from user are taken passed on to the model which are sent as a request to to the controller.
the view queries the model to display the data
The controller changes the internal status of the model and then informs the view.
Controller uses the DO_HANDLE_DATA method to fill up the data entered in the view and fills the model as name value pairs.
View is created and owned by the controller.
Thru data binding the view's page attributes are bound to the model.
The model for a controller is present in the M_MODELS table which has all the models related to a controller.The model table has the model id and model instance.
The model is represented by context nodes and controller has a URL pointing to it.
Using the SET methods the values entered by the user in the view are set to the model.
Using the GETTER methods the values are fetched from the model by the view and sent to the user as a response.

Friday, January 8, 2010

Update program to update infostrcuture S910 when sales order is changed or created

REPORT  zsdis_sorder_rc_update.


TABLES:s910,cdhdr.


TYPE-POOLS:slis.


*Types Decalration
TYPES:BEGIN OF ty_doc,
      item TYPE posnr,            "item no
      no   TYPE vbeln,            "document no
      END OF ty_doc,


*Document type structure
      BEGIN OF ty_doc_auart,
      vbeln TYPE vbeln,
      auart TYPE vbak-auart,
      erdat TYPE vbak-erdat,
      audat TYPE vbak-audat,
      vkorg TYPE vbak-vkorg,
      vtweg TYPE vbak-vtweg,
      END OF ty_doc_auart,


*Item category structure
      BEGIN OF ty_doc_pstyv,
       vbeln     TYPE vbeln,
       posnr     TYPE posnr,
       pstyv     TYPE vbap-pstyv,
       abgru     TYPE vbap-abgru,
       zzreason2 TYPE vbap-zzreason2,
       vrkme     TYPE vbap-vrkme,
       waerk     TYPE vbap-waerk,
       gewei     TYPE vbap-gewei,
       kpein     TYPE vbap-kpein,
       netwr     TYPE vbap-netwr,
       ntgew     TYPE vbap-ntgew,
       zerrorqty TYPE vbap-kpein,
       zerrorval TYPE vbap-netpr,
       zerrorwt  TYPE vbap-ntgew,
      END OF ty_doc_pstyv,


*Chnage header
     BEGIN OF ty_cdhdr,
       objectclas TYPE cdhdr-objectclas,
       objectid   TYPE cdhdr-objectid,
       changenr   TYPE cdhdr-changenr,
       udate      TYPE cdhdr-udate,
       utime      TYPE cdhdr-utime,
     END OF ty_cdhdr,


*Change details
     BEGIN OF ty_cdpos,
       objectclas TYPE cdhdr-objectclas,
       objectid   TYPE cdhdr-objectid,
       changenr   TYPE cdhdr-changenr,
       tabname    TYPE cdpos-tabname,
       tabkey     TYPE cdpos-tabkey,
       fname      TYPE cdpos-fname,
       chngind    TYPE cdpos-chngind,
       value_new  TYPE cdpos-value_new,
       value_old  TYPE cdpos-value_old,
     END OF ty_cdpos,


*display structure
      BEGIN OF ty_data,
        vbeln     TYPE vbeln,
        posnr     TYPE posnr,
        abgru     TYPE vbap-abgru,
        zzreason2 TYPE vbap-zzreason2,
        text(30),
      END OF ty_data,


*log of last program run date and time
      BEGIN OF ty_log,
        zzdate TYPE zsd_log_time-zzdate,
        zztime TYPE zsd_log_time-zztime,
      END OF ty_log,


      BEGIN OF ty_values,
        zzprogname TYPE zsd_log_time-zzprogname,
        zzdate     TYPE zsd_log_time-zzdate,
        zztime     TYPE zsd_log_time-zztime,
      END OF ty_values,


      BEGIN OF ty_date,
        vbeln TYPE vbeln,
        date  TYPE sy-datum,
        time  TYPE sy-uzeit,
      END OF ty_date.


DATA:lw_repid TYPE sy-repid.


DATA:slis_ev_top_of_page   TYPE slis_formname VALUE 'TOP_OF_PAGE'.


CONSTANTS:c_formname_top_of_page TYPE slis_formname
                                 VALUE 'TOP_OF_PAGE'.


DATA:t_cdhdr           TYPE STANDARD TABLE OF ty_cdhdr,
     t_cdpos           TYPE STANDARD TABLE OF ty_cdpos,
     t_date            TYPE STANDARD TABLE OF ty_date,
     t_doc_auart       TYPE STANDARD TABLE OF ty_doc_auart,
     t_doc_pstyv       TYPE STANDARD TABLE OF ty_doc_pstyv,
     t_log             TYPE STANDARD TABLE OF ty_log,
     t_data            TYPE STANDARD TABLE OF ty_data,
     wa_date           TYPE ty_date,
     wa_log            TYPE ty_log,
     wa_s910           TYPE s910,
     wa_cdhdr          TYPE ty_cdhdr,
     wa_cdpos          TYPE ty_cdpos,
     wa_doc_auart      TYPE ty_doc_auart,
     wa_doc_pstyv      TYPE ty_doc_pstyv,
     t_zbc_const       TYPE STANDARD TABLE OF zbc_const,
     t_doc             TYPE STANDARD TABLE OF ty_doc,
     wa_doc            TYPE ty_doc,
     wa_values         TYPE ty_values,
     wa_data           TYPE ty_data,
     wa_zbc_const      TYPE zbc_const.


DATA:wa_fldcat TYPE slis_fieldcat_alv,
     wa_layout  TYPE slis_layout_alv.


DATA:t_events TYPE slis_t_event,      " ALV events
     t_fcat TYPE  slis_t_fieldcat_alv.


RANGES:r_auart    FOR vbak-auart,
       r_date     FOR sy-datum,
       r_time     FOR sy-uzeit,
       r_category FOR vbap-pstyv.


DATA:w_date  TYPE sy-datum,
     w_tabix TYPE sy-tabix,
     w_time  TYPE sy-uzeit.


DATA:w_new(3) TYPE c,
     w_old(3) TYPE c.




SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
*Initial run radiobutton
PARAMETERS:p_inlrun RADIOBUTTON GROUP g1 DEFAULT 'X',
*Latest Updates radiobutton
           p_update RADIOBUTTON GROUP g1.
SELECTION-SCREEN: END OF BLOCK b1.


SELECTION-SCREEN: BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02.
SELECT-OPTIONS:s_date FOR cdhdr-udate DEFAULT sy-datum,  "date
               s_time FOR cdhdr-utime.                   "time
SELECTION-SCREEN: END OF BLOCK b2.


START-OF-SELECTION.


  SELECT zzdate zztime
    FROM zsd_log_time
    INTO TABLE t_log
    WHERE zzprogname = sy-repid.


  SORT t_log[] BY zzdate DESCENDING
                  zztime DESCENDING.


  READ TABLE t_log INTO wa_log INDEX 1.


  r_date-sign = 'I'.
  r_date-option = 'BT'.
  r_date-low  = wa_log-zzdate.
  r_date-high = sy-datum.
  APPEND r_date.


  r_time-sign = 'I'.
  r_time-option = 'BT'.
  r_time-low  = wa_log-zztime.
  r_time-high = sy-uzeit.
  APPEND r_date.




  IF p_inlrun = 'X'.
    SELECT objectclas objectid changenr
           udate      utime
      FROM cdhdr
      INTO TABLE t_cdhdr
      WHERE objectclas = 'VERKBELEG'
      AND udate IN s_date
      AND utime IN s_time
      AND change_ind = 'U'.
  ELSE.
    SELECT objectclas objectid changenr
           udate      utime
     FROM cdhdr
     INTO TABLE t_cdhdr
     WHERE objectclas = 'VERKBELEG'
     AND udate IN r_date
     AND utime IN r_time
     AND change_ind = 'U'.
  ENDIF.


  SORT t_cdhdr[] BY objectid changenr.
  IF t_cdhdr[] IS NOT INITIAL.
    SELECT objectclas
           objectid
           changenr
           tabname
           tabkey
           fname
           chngind
           value_new
           value_old
         FROM cdpos
      INTO TABLE t_cdpos
      FOR ALL ENTRIES IN t_cdhdr
      WHERE   objectid   = t_cdhdr-objectid
      AND     changenr   = t_cdhdr-changenr
      AND     objectclas = 'VERKBELEG'
      AND     tabname    = 'VBAP'
      AND     fname      IN ('ABGRU','ZZREASON2')
      AND     chngind    = 'U'.
  ENDIF.


  LOOP AT t_cdpos INTO wa_cdpos.


    IF wa_cdpos-value_new = '0' OR wa_cdpos-value_new = '00'.
      CLEAR wa_cdpos-value_new.
    ENDIF.


    IF wa_cdpos-value_old = '0' OR wa_cdpos-value_old = '00'.
      CLEAR wa_cdpos-value_old.
    ENDIF.


    IF wa_cdpos-value_new = wa_cdpos-value_old.
      DELETE t_cdpos INDEX sy-tabix.
    ENDIF.
    wa_doc-no   = wa_cdpos-tabkey+3(10).
    wa_doc-item = wa_cdpos-tabkey+13(6).
    APPEND wa_doc TO t_doc.
    READ TABLE t_cdhdr INTO wa_cdhdr
                       WITH KEY objectid = wa_cdpos-objectid
                                changenr = wa_cdpos-changenr
                                BINARY SEARCH.
    IF sy-subrc = 0.
      wa_date-vbeln = wa_doc-no.
      wa_date-date  = wa_cdhdr-udate.
      wa_date-time  = wa_cdhdr-utime.
      APPEND wa_date TO t_date.
    ENDIF.
    CLEAR:wa_cdpos,wa_cdhdr.
  ENDLOOP.


  SELECT * FROM zbc_const
  INTO TABLE t_zbc_const
  WHERE progname = 'ZSDIS_SORDER_RC_UPDATE'.


  LOOP AT t_zbc_const INTO wa_zbc_const.
    IF wa_zbc_const-fieldname = 'R_AUART'.
      r_auart-sign   = wa_zbc_const-sign.
      r_auart-option = wa_zbc_const-opti.
      r_auart-low    = wa_zbc_const-low.
      r_auart-high   = wa_zbc_const-high.
      APPEND r_auart.
    ENDIF.
    IF wa_zbc_const-fieldname = 'R_CATEGORY'.
      r_category-sign   = wa_zbc_const-sign.
      r_category-option = wa_zbc_const-opti.
      r_category-low    = wa_zbc_const-low.
      r_category-high   = wa_zbc_const-high.
      APPEND r_category.
    ENDIF.
    CLEAR wa_zbc_const.
  ENDLOOP.




  SORT t_doc[] BY no item.


  DELETE ADJACENT DUPLICATES FROM t_doc
                  COMPARING ALL FIELDS.
  IF t_doc[] IS NOT INITIAL.
    SELECT vbeln
           auart
           erdat
           audat
           vkorg
           vtweg
      FROM vbak
      INTO TABLE t_doc_auart
      FOR ALL ENTRIES IN t_doc
      WHERE vbeln = t_doc-no.


    SELECT vbeln posnr pstyv
           abgru zzreason2
           vrkme waerk gewei
           kpein netwr ntgew
      FROM vbap
      INTO TABLE t_doc_pstyv
      FOR ALL ENTRIES IN t_doc
      WHERE   vbeln = t_doc-no
      AND     posnr = t_doc-item.
  ENDIF.


  LOOP AT t_doc_auart INTO wa_doc_auart.
    IF wa_doc_auart-auart IN r_auart.
      CONTINUE.
    ELSE.
      w_tabix = sy-tabix.
      READ TABLE t_doc INTO wa_doc WITH
                KEY no = wa_doc_auart-vbeln
                             BINARY SEARCH.
      IF sy-subrc = 0.
        DELETE t_doc       INDEX sy-tabix.
        DELETE t_doc_auart INDEX w_tabix.
      ENDIF.
    ENDIF.
    CLEAR wa_doc_auart.
  ENDLOOP.


  LOOP AT t_doc_pstyv INTO wa_doc_pstyv.
    IF wa_doc_pstyv-pstyv IN r_category.
      CONTINUE.
    ELSE.
      w_tabix = sy-tabix.
      READ TABLE t_doc INTO wa_doc WITH
                KEY no   = wa_doc_pstyv-vbeln
                    item = wa_doc_pstyv-posnr
                            BINARY SEARCH.
      IF sy-subrc = 0.
        DELETE t_doc       INDEX sy-tabix.
        DELETE t_doc_pstyv INDEX w_tabix.
      ENDIF.
    ENDIF.
    CLEAR wa_doc_pstyv.
  ENDLOOP.


  SORT t_date BY vbeln.
  LOOP AT t_doc INTO wa_doc.
    READ TABLE t_doc_pstyv INTO wa_doc_pstyv
                    WITH KEY vbeln = wa_doc-no
                             posnr = wa_doc-item
                             BINARY SEARCH.
    IF sy-subrc = 0.
      READ TABLE t_doc_auart INTO wa_doc_auart
                       WITH KEY vbeln = wa_doc-no
                            BINARY SEARCH.
      IF sy-subrc = 0.
        READ TABLE t_date INTO wa_date
                            WITH KEY vbeln = wa_doc-no
                            BINARY SEARCH.
        IF sy-subrc = 0.
          UPDATE s910 SET zzreason1       = wa_doc_pstyv-abgru
                          zzreason2       = wa_doc_pstyv-zzreason2
                          aedat           = wa_date-date
                          erzet           = wa_date-time
                          WHERE vbeln     = wa_doc_pstyv-vbeln
                          AND   posnr     = wa_doc_pstyv-posnr
                          AND   vrsio     = '000'
                          AND   sptag     = wa_doc_auart-erdat
                          AND   auart     = wa_doc_auart-auart
                          AND   erdat     = wa_doc_auart-erdat
                          AND   vkorg     = wa_doc_auart-vkorg
                          AND   vtweg     = wa_doc_auart-vtweg
                          AND   ssour     = ''.
          IF sy-subrc = 0.
            MOVE-CORRESPONDING wa_doc_pstyv TO wa_data.
            wa_data-text  = 'Updation'.
            APPEND wa_data TO t_data.
          ELSE.
            wa_s910-ssour     = ''.
            wa_s910-vrsio     = '000'.
            wa_s910-sptag     = wa_doc_auart-erdat.
            wa_s910-vbeln     = wa_doc_pstyv-vbeln.
            wa_s910-posnr     = wa_doc_pstyv-posnr.
            wa_s910-auart     = wa_doc_auart-auart.
            wa_s910-erdat     = wa_doc_auart-audat.
            wa_s910-vkorg     = wa_doc_auart-vkorg.
            wa_s910-vtweg     = wa_doc_auart-vtweg.
            wa_s910-zzreason1 = wa_doc_pstyv-abgru.
            wa_s910-zzreason2 = wa_doc_pstyv-zzreason2.
            wa_s910-vrkme     = wa_doc_pstyv-vrkme.
            wa_s910-waerk     = wa_doc_pstyv-waerk.
            wa_s910-gewei     = wa_doc_pstyv-gewei.
            wa_s910-zerrorqty = wa_doc_pstyv-kpein.
            wa_s910-zerrorval = wa_doc_pstyv-netwr.
            wa_s910-zerrorwt  = wa_doc_pstyv-ntgew.
            wa_s910-aedat     = sy-datum.
            wa_s910-erzet     = sy-uzeit.
            INSERT s910 FROM wa_s910.
            IF sy-subrc = 0.
              MOVE-CORRESPONDING wa_s910 TO wa_data.
              wa_data-abgru = wa_s910-zzreason1.
              wa_data-text = 'Insertion'.
              APPEND wa_data TO t_data.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.
    CLEAR:wa_data,wa_s910,wa_doc_pstyv,wa_doc_auart.
  ENDLOOP.


END-OF-SELECTION.


  DELETE FROM zsd_log_time
   WHERE zzprogname = sy-repid.


  wa_values-zzprogname = sy-repid.
  wa_values-zzdate     = sy-datum.
  wa_values-zztime     = sy-uzeit.


  INSERT zsd_log_time FROM wa_values.


*assigning the program name
  lw_repid = sy-repid.
  PERFORM fill_field_catalog.


  PERFORM eventtab_build
         USING t_events[].


*optimizing the column width
  wa_layout-colwidth_optimize = 'X'.         "'X'.


  DELETE ADJACENT DUPLICATES FROM t_data
           COMPARING ALL FIELDS.
*dispalying the ALV in output as list
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
      i_callback_program = lw_repid
      is_layout          = wa_layout
      it_fieldcat        = t_fcat
      it_events          = t_events
    TABLES
      t_outtab           = t_data
    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.
*&---------------------------------------------------------------------*
*&      Form  FILL_FIELD_CATALOG
*&---------------------------------------------------------------------*
FORM fill_field_catalog .
  CLEAR wa_fldcat .
*Sales Order no.
  CLEAR wa_fldcat .
  wa_fldcat-col_pos = 2.
  wa_fldcat-tabname = 'T_DATA'.
  wa_fldcat-fieldname = 'VBELN'.
  wa_fldcat-seltext_m = 'Sales Order no.'(005)  .
  wa_fldcat-outputlen = '40'.
  APPEND wa_fldcat TO t_fcat .


*Sales item no
  CLEAR wa_fldcat .
  wa_fldcat-col_pos = 3.
  wa_fldcat-tabname = 'T_DATA'.
  wa_fldcat-fieldname = 'POSNR'.
  wa_fldcat-seltext_m = 'Sales Item no.'(006)  .
  wa_fldcat-outputlen = '45'.
  APPEND wa_fldcat TO t_fcat .


*Reason code 1
  CLEAR wa_fldcat .
  wa_fldcat-col_pos = 3.
  wa_fldcat-tabname = 'T_DATA'.
  wa_fldcat-fieldname = 'ABGRU'.
  wa_fldcat-seltext_m = 'Reason code 1'(007).
  wa_fldcat-outputlen = '12'.
  APPEND wa_fldcat TO t_fcat .


*Reason code 2
  CLEAR wa_fldcat .
  wa_fldcat-col_pos = 4.
  wa_fldcat-tabname = 'T_DATA'.
  wa_fldcat-fieldname = 'ZZREASON2'.
  wa_fldcat-seltext_m = 'Reason code 2'(008).
  wa_fldcat-outputlen = '45'.
  APPEND wa_fldcat TO t_fcat .


*description of message
  CLEAR wa_fldcat .
  wa_fldcat-col_pos = 4.
  wa_fldcat-tabname = 'T_DATA'.
  wa_fldcat-fieldname = 'TEXT'.
  wa_fldcat-seltext_m = 'Update/Insert'(009).
  wa_fldcat-outputlen = '80'.
  APPEND wa_fldcat TO t_fcat .


ENDFORM.                    " FILL_FIELD_CATALOG
*&---------------------------------------------------------------------*
*&      Form  EVENTTAB_BUILD
*&---------------------------------------------------------------------*


FORM eventtab_build  USING  lt_events TYPE slis_t_event.


* Temporary event work area
  DATA: l_event TYPE slis_alv_event.


* Get events
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = lt_events.


* Read through event table for TOP_OF_PAGE
  READ TABLE lt_events
       WITH KEY name = slis_ev_top_of_page
       INTO l_event.


* If event was found, set form name TOP_OF_PAGE
  IF sy-subrc EQ 0.


    l_event-form = c_formname_top_of_page.  " TOP_OF_PAGE
    APPEND l_event TO lt_events.


  ENDIF.


ENDFORM.                    " EVENTTAB_BUILD


*&------------------------------------------------------------------*
*&      Form TOP OF PAGE
*&------------------------------------------------------------------*
FORM top_of_page .                                          "#EC CALLED


  DATA : lt_list_header TYPE slis_t_listheader,
         lwa_list_header TYPE slis_listheader,
         lw_auart(20) TYPE c,
         lw_success(60) TYPE c.


*dipslaying the total no of records
  lwa_list_header-typ  = 'S'.
  lwa_list_header-key = 'Username'(013).
  lwa_list_header-info = sy-uname.
  APPEND lwa_list_header TO lt_list_header.
  CLEAR lwa_list_header .


*displaying the date
  lwa_list_header-typ  = 'S'.
  lwa_list_header-key = 'Date'(010).
  WRITE sy-datum TO lwa_list_header-info.
  APPEND lwa_list_header TO lt_list_header.
  CLEAR lwa_list_header .


*displaying the time
  lwa_list_header-typ  = 'S'.
  lwa_list_header-key = 'Time'(011).
  WRITE sy-uzeit TO lwa_list_header-info.
  APPEND lwa_list_header TO lt_list_header.
  CLEAR lwa_list_header .


* Calling FM to display the data in the top of page
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = lt_list_header.


  FREE : lt_list_header.


ENDFORM.                    "top_of_page

Wednesday, January 6, 2010

Latin square generation program to understand dynamic ALV

************************************************************************
* Program name      : ZLATIN_SQUARE_GENERATION                         *
* Author            : Subhashini Kolluri                               *
* Date              : 10-28-2009                                       *
*----------------------------------------------------------------------*
* Description       : This program generates 1 Latin Square            *
* for any given input from 2 to 9                                      *
************************************************************************

REPORT  zlatin_square_generation.

*Declaration of global variables required for ALV and logic
INCLUDE zlatin_square_declaration.


*Enter the matrix Size
PARAMETERS:p_n TYPE i OBLIGATORY.

START-OF-SELECTION.
*Based on user input define table structure
PERFORM set_structure_of_table.

*Get contents of data into field symbols during runtime
PERFORM assign_field_symbols.

END-OF-SELECTION.
*Fill data into the N*N Matrix
PERFORM fill_data_in_square.

*Call the screen for Display
CALL SCREEN 9000.

*&---------------------------------------------------------------------*
*&      Form  SET_STRUCTURE_OF_TABLE
*&---------------------------------------------------------------------*
FORM set_structure_of_table .

*Loop through user given size
*and assign field names and number of fields based on
*user given input size
  WHILE v_i LE p_n.
*convert the number to a character
    v_c = v_i.
    CONCATENATE 'COL' v_c INTO wa_fc-fieldname.
    wa_fc-col_pos = v_i.
*assign fieldnames
    wa_fc-coltext = wa_fc-fieldname.
*build fieldcatalog
    APPEND wa_fc TO t_fc.
    v_i = v_i + 1.
    CLEAR:wa_fc,v_c.
  ENDWHILE.

  CLEAR:v_i,v_c.

*Based on the structure created at runtime create a
*dynamic internal table which is a pointer to the runtime table
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = t_fc
    IMPORTING
      ep_table        = t_table.

ENDFORM.                    " SET_STRUCTURE_OF_TABLE
*&---------------------------------------------------------------------*
*&      Form  ASSIGN_FIELD_SYMBOLS
*&---------------------------------------------------------------------*
FORM assign_field_symbols .

*assign the contents of runtime table to fieldsymbol table
  ASSIGN t_table->* TO .
*for that runtime internal table create a runtime workarea reference
  CREATE DATA wa_workarea LIKE LINE OF .
*assign contents of workarea to field symbol
  ASSIGN wa_workarea->* TO .

ENDFORM.                    " ASSIGN_FIELD_SYMBOLS
*&---------------------------------------------------------------------*
*&      Form  FILL_DATA_IN_SQUARE
*&---------------------------------------------------------------------*
FORM fill_data_in_square .

*Assign each value to get a unique no to get the Latin Square row wise
  WHILE v_col LE p_n AND v_row LE p_n.
*for each row assign value for every column
    ASSIGN COMPONENT v_col
            OF STRUCTURE  TO .
*Initialize first row and column with natural sequence
    IF v_row = 1.
      v_value = v_col.
    ELSEIF v_col = 1.
      v_value = v_row.
      v_count = v_row.
    ELSE.
*for other rows and columns cyclically generate numbers and if
*number is greater than input initialize it back to 1 and start
      v_count = v_count + 1.
      IF v_count LE p_n.
        v_value = v_count.
      ELSE.
        v_count = 1.
        v_value = v_count.
      ENDIF.
    ENDIF.
    v_col = v_col + 1.
     = v_value.
    CLEAR:v_value.

*At end of each row add the line to internal table
    IF v_col GT p_n AND v_row LE p_n.
      APPEND  TO .
      v_col = 1.
      v_row = v_row + 1.
      CLEAR:,.
      CLEAR v_count.
    ENDIF.
  ENDWHILE.

ENDFORM.                    " FILL_DATA_IN_SQUARE
*&---------------------------------------------------------------------*
*&      Module  STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
  SET PF-STATUS 'MAIN100'.

*Set the layout before display

  wa_layout-cwidth_opt = 'X'.
  wa_layout-no_toolbar = 'X'.     "no toolbar
  wa_layout-no_hgridln = 'X'.     "no horizontal grid lines
  wa_layout-no_vgridln = 'X'.     "no vertical grid lines

  IF g_custom_container IS INITIAL.
*create a custom control in screen painter
    CREATE OBJECT g_custom_container
      EXPORTING
        container_name = g_container.

*for that custom control screen area create and object
*of ALV GRID
    CREATE OBJECT oref
      EXPORTING
        i_parent = g_custom_container.


*Call the display method for displaying ALV Data
    CALL METHOD oref->set_table_for_first_display
      EXPORTING
        is_layout       = wa_layout    "Layout
      CHANGING
        it_fieldcatalog = t_fc         "Field Catalog
        it_outtab       = .  "Final Table

    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDIF.
ENDMODULE.                 " STATUS_9000  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
*leave screen after user checks output
  CASE ok_code.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      LEAVE TO SCREEN 0.
  ENDCASE.
  CLEAR ok_code.
ENDMODULE.                 " USER_COMMAND_9000  INPUT



************************************************************************
* Program name      : ZLATIN_SQUARE_GENERATION                         *
* Author            : Subhashini Kolluri                               *
* Date              : 10-28-2009                                       *
*----------------------------------------------------------------------*
* Description       : This program generates 1 Latin Square            *
* for any given input from 2 to 9.This include is for varaibles used in*
* the program                                                          *
************************************************************************

*Data varaibles used in program for processing
    DATA:v_i     TYPE i VALUE '1',
         v_value TYPE i,
         v_c     TYPE c.

*Varibales for filling in data
    DATA:v_col   TYPE i VALUE '1',    "Row value = 1
         v_row   TYPE i VALUE '1',    "Column value = 1
         v_count TYPE i.              "Count Variable

*Data reference objects
    DATA:t_table     TYPE REF TO data,
         wa_workarea TYPE REF TO data.

*Field symbols for holding the data
    FIELD-SYMBOLS:    TYPE STANDARD TABLE,
                  ,
                      TYPE c.


*ALV Data for Display
    TYPE-POOLS:slis.

*reference varaible for object for ALV GRID
    DATA:oref               TYPE REF TO cl_gui_alv_grid,
*Custom Control container Class reference
         g_custom_container TYPE REF TO cl_gui_custom_container,
*Custom Control in screen painter
         g_container TYPE scrfname VALUE 'LATIN_SQUARE1',
         ok_code TYPE sy-ucomm.

*Field catalog structure
    DATA:wa_fc TYPE lvc_s_fcat,
         t_fc  TYPE lvc_t_fcat.

*Layout of ALV Grid
    DATA: wa_layout TYPE lvc_s_layo.

Program to understand Interface concept in abap oops

PARAMETERS:p_pass(25TYPE c,
           p_ptyp     TYPE saplane-planetype.

PARAMETERS:p_cargo(25TYPE c,
           p_ctyp      TYPE saplane-planetype.

*----------------------------------------------------------------------*
*       CLASS lcl_airplane DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_airplane DEFINITION.
  PUBLIC SECTION.
    METHODS:constructor IMPORTING im_name TYPE c
                                  im_planetyp TYPE saplane-planetype,
            display_attributes.
  PROTECTED SECTION.
    DATA:name(25TYPE c,
         planetyp TYPE saplane-planetype.
    CLASS-DATA:n_o_airplanes TYPE i.
ENDCLASS.                    "lcl_airplane DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_airplane IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_airplane IMPLEMENTATION.
  METHOD constructor.
    name     = im_name.
    planetyp = im_planetyp.
    n_o_airplanes = n_o_airplanes + 1.
  ENDMETHOD.                    "constructor
  METHOD display_attributes.
    WRITE:/'Name of plane',name,
          /'Plane type',planetyp.
  ENDMETHOD.                    "display_attributes
ENDCLASS.                    "lcl_airplane IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS lcl_passenger_airplane DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_passenger_airplane DEFINITION INHERITING FROM lcl_airplane.
  PUBLIC SECTION.
    METHODS:constructor IMPORTING im_name TYPE c
                                  im_planetyp TYPE saplane-planetype,
            display_attributes REDEFINITION.
  PRIVATE SECTION.
    DATA:n_o_seats TYPE sflight-seatsmax.
ENDCLASS.                    "lcl_passenger_airplane DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_passenger_airplane IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_passenger_airplane IMPLEMENTATION.
  METHOD constructor.
    CALL METHOD super->constructor
      EXPORTING
        im_name     = im_name
        im_planetyp = im_planetyp.
    n_o_seats = '20'.
  ENDMETHOD.                    "constructor
  METHOD display_attributes.
    CALL METHOD super->display_attributes.
    WRITE:/'Number of passenger plane seats',n_o_seats.
  ENDMETHOD.                    "display_attributes
ENDCLASS.                    "lcl_passenger_airplane IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS lcl_cargo_airplane DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_cargo_airplane DEFINITION INHERITING FROM lcl_airplane.
  PUBLIC SECTION.
    METHODS:constructor IMPORTING im_name TYPE c
                                  im_planetyp TYPE saplane-planetype,
            display_attributes REDEFINITION.
  PRIVATE SECTION.
    DATA:cargo_max TYPE scplane-cargomax.
ENDCLASS.                    "lcl_cargo_airplane DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_cargo_airplane IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_cargo_airplane IMPLEMENTATION.
  METHOD constructor.
    CALL METHOD super->constructor
      EXPORTING
        im_name     = im_name
        im_planetyp = im_planetyp.
    cargo_max = '30'.
  ENDMETHOD.                    "constructor
  METHOD display_attributes.
    CALL METHOD super->display_attributes.
    WRITE:/'Number of maximum cargo seats',cargo_max.
  ENDMETHOD.                    "display_attributes
ENDCLASS.

*----------------------------------------------------------------------*
*       INTERFACE lif_business_partners IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
INTERFACE lif_business_partners.
  METHODS:display_company_data.
ENDINTERFACE.                    "lif_business_partners

*----------------------------------------------------------------------*
*       CLASS lcl_carrier DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_carrier DEFINITION.
  PUBLIC SECTION.
    INTERFACES lif_business_partners.
    METHODS:add_a_new_airplane IMPORTING airplane_ref TYPE REF TO lcl_airplane.
    DATA:no_of_planes TYPE i.
     DATA:list_of_airplanes TYPE TABLE OF REF TO lcl_airplane,
          wa_airplanes      TYPE REF TO lcl_airplane.
ENDCLASS.                    "lcl_carrier DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_carrier IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_carrier IMPLEMENTATION.
  METHOD lif_business_partners~display_company_data.
    DESCRIBE TABLE list_of_airplanes LINES no_of_planes.
    WRITE:'Name of airplane','TEST PLANE',
          /'No of planes available',no_of_planes.
  ENDMETHOD.                    "lif_business_partners~display_company_data
  METHOD add_a_new_airplane.
    wa_airplanes = airplane_ref.
    APPEND wa_airplanes TO list_of_airplanes.
  ENDMETHOD.                    "add_a_new_airplane
ENDCLASS.                    "lcl_carrier IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS lcl_hotel DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_hotel DEFINITION.
  PUBLIC SECTION.
    INTERFACES lif_business_partners.
ENDCLASS.                    "lcl_hotel DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_hotel IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_hotel IMPLEMENTATION.
  METHOD lif_business_partners~display_company_data.
    WRITE:'Name of hotel''HOTEL',
          /'town','HYD',
          /'no of rooms'5.
  ENDMETHOD.                    "lif_business_partners~display_company_data
ENDCLASS.                    "lcl_hotel IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS lcl_travel_agency DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_travel_agency DEFINITION.
  PUBLIC SECTION.
    METHODS:add_business_partner IMPORTING business_partners_ref
                TYPE REF TO lif_business_partners,
            display_business_partners.
  PRIVATE SECTION.
    DATA:list_of_business_partners TYPE TABLE OF REF TO lif_business_partners,
         wa_business_partners      TYPE REF TO lif_business_partners.
ENDCLASS.                    "lcl_travel_agency DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_travel_agency IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_travel_agency IMPLEMENTATION.
  METHOD add_business_partner.
    wa_business_partners  = business_partners_ref .
    APPEND wa_business_partners TO list_of_business_partners.
  ENDMETHOD.                    "add_business_partner
  METHOD display_business_partners.
    LOOP AT list_of_business_partners INTO wa_business_partners.
      CALL METHOD wa_business_partners->display_company_data.
    ENDLOOP.
  ENDMETHOD.                    "display_business_partners
ENDCLASS.                    "lcl_travel_agency IMPLEMENTATION

START-OF-SELECTION.
DATA:lcl_travel_agency_ref TYPE REF TO lcl_travel_agency,
     lcl_hotel_ref         TYPE REF TO lcl_hotel,
     lcl_carrier_ref       TYPE REF TO lcl_carrier.

DATA:lcl_passenger_airplane_ref TYPE REF TO lcl_passenger_airplane,
     lcl_cargo_airplane_ref  TYPE REF TO lcl_cargo_airplane.


CREATE OBJECT lcl_passenger_airplane_ref         EXPORTING
                                                 im_name = p_pass
                                                 im_planetyp = p_ptyp.

CREATE OBJECT lcl_carrier_ref.

CALL METHOD lcl_carrier_ref->add_a_new_airplane
 EXPORTING
   airplane_ref = lcl_passenger_airplane_ref.

CREATE OBJECT lcl_cargo_airplane_ref             EXPORTING
                                                 im_name = p_cargo
                                                 im_planetyp = p_ctyp.

CALL METHOD lcl_carrier_ref->add_a_new_airplane
  EXPORTING
   airplane_ref = lcl_cargo_airplane_ref.

CREATE OBJECT lcl_travel_agency_ref.

CREATE OBJECT lcl_hotel_ref.
CALL METHOD lcl_travel_agency_ref->add_business_partner
 EXPORTING business_partners_ref = lcl_hotel_ref.

CALL METHOD lcl_travel_agency_ref->add_business_partner
 EXPORTING business_partners_ref = lcl_carrier_ref.

CALL METHOD lcl_travel_agency_ref->display_business_partners.

About Me

I have 5+ years experience in SAP ABAP and ABAP CRM.I am working with SAP LABS now.

Search This Blog