Monday, June 22, 2015

BDC sample 

*&---------------------------------------------------------------------*
*& Report  ZHCM_BDC_PA30_NEW
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZHCM_BDC_PA30_NEW.
TYPE-POOLS: TRUXS,SLIS.

TYPES TRUXS_T_TEXT_DATA(4096) TYPE C OCCURS 0.
DATA: IT_RAW TYPE TRUXS_T_TEXT_DATA.
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
DATA: L_MSTRING(480).

TYPES: BEGIN OF TY_TAB,
        PERNR(08),
        BEGDA(10),
        MASSN(02),
        MASSG(02),
        PLANS(08),
        WERKS(04),
        PERSG(01),
        PERSK(02),

        BEGDA1(10),
        ANREX(05),
        VORNA(40),
        NACHN(40),
        GESCH(01),
        GBDAT(10),
        GBORT(40),
        GBLND(03),
        SPRSL(01),
        FATXT(01),
        ANZKD(03),
        NATIO(03),
        GBDEP(04),

        BEGDA2(10),
        BTRTL(04),

       END OF TY_TAB,

*include bdcrecx1.
       BEGIN OF TY_MESSAGE,
        MESSAGE TYPE STRING,
       END OF TY_MESSAGE.


DATA : IT_TAB TYPE STANDARD TABLE OF TY_TAB ,
       IT_BDCDATA LIKE BDCDATA  OCCURS 0 WITH HEADER LINE,
       IT_MSG   TYPE STANDARD TABLE OF BDCMSGCOLL,
       WA_MSG LIKE LINE OF IT_MSG,
       S_MSG     TYPE BDCMSGCOLL ,
       WA_TAB TYPE TY_TAB.

DATA: I_FIELDCAT TYPE  SLIS_T_FIELDCAT_ALV,
      WA_FIELDCATALOG TYPE SLIS_FIELDCAT_ALV,
      GD_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GD_REPID     LIKE SY-REPID.

DATA : IT_SORTCAT   TYPE SLIS_T_SORTINFO_ALV.

DATA: LV_REC_COUNT(3) VALUE 0.

DATA : IT_MESSAGE TYPE TABLE OF TY_MESSAGE,
       WA_MESSAGE TYPE TY_MESSAGE.

*&--------------------- SELECTION SCREEN ------------------------------------&*

SELECTION-SCREEN BEGIN OF BLOCK BLK WITH FRAME TITLE TEXT-001.
PARAMETERS: FILENAM1 TYPE  RLGRAP-FILENAME OBLIGATORY,
            P_MODE    TYPE CTU_MODE DEFAULT 'A'.
SELECTION-SCREEN END  OF BLOCK BLK.

SELECTION-SCREEN BEGIN OF BLOCK B WITH FRAME .
PARAMETERS P_FRMLIN TYPE I DEFAULT 2.                 " FROM LINE NO
PARAMETERS P_TOLINE TYPE I DEFAULT 65000.             " TO LINE NO
PARAMETERS P_FRMCOL TYPE I DEFAULT 1.                 " FROM COL NO
PARAMETERS P_TOCOL TYPE I DEFAULT 57.             " TO COL NO
SELECTION-SCREEN END OF BLOCK B.

*&-------------------------------------------------------------------------&*

DATA: BEGIN OF IT_FILE_UPLOAD1 OCCURS 0.
        INCLUDE STRUCTURE ALSMEX_TABLINE.             " ROWS FOR TABLE WITH EXCEL DATA
DATA: END OF IT_FILE_UPLOAD1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILENAM1.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      FIELD_NAME = 'FILENAME'
    IMPORTING
      FILE_NAME  = FILENAM1.

*&----------------------------------------------------------------------------&*

START-OF-SELECTION.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                = FILENAM1
      I_BEGIN_COL             = P_FRMCOL
      I_BEGIN_ROW             = P_FRMLIN
      I_END_COL               = P_TOCOL
      I_END_ROW               = P_TOLINE
    TABLES
      INTERN                  = IT_FILE_UPLOAD1
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 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.

*&----------------------------------------------------------------------------&*

  SORT IT_FILE_UPLOAD1 BY ROW COL.

  LOOP AT IT_FILE_UPLOAD1.

    CASE IT_FILE_UPLOAD1-COL.

      WHEN 1.
        WA_TAB-PERNR = IT_FILE_UPLOAD1-VALUE.
      WHEN 2.
        WA_TAB-BEGDA = IT_FILE_UPLOAD1-VALUE .
      WHEN 3.
        WA_TAB-MASSN = IT_FILE_UPLOAD1-VALUE.
      WHEN 4.
        WA_TAB-MASSG = IT_FILE_UPLOAD1-VALUE.
      WHEN 5.
        WA_TAB-PLANS = IT_FILE_UPLOAD1-VALUE.
      WHEN 6.
        WA_TAB-WERKS = IT_FILE_UPLOAD1-VALUE.
      WHEN 7.
        WA_TAB-PERSG = IT_FILE_UPLOAD1-VALUE.
      WHEN 8.
        WA_TAB-PERSK = IT_FILE_UPLOAD1-VALUE.
      WHEN 9.
        WA_TAB-BEGDA1 = IT_FILE_UPLOAD1-VALUE.
      WHEN 10.
        WA_TAB-ANREX = IT_FILE_UPLOAD1-VALUE.
      WHEN 11.
        WA_TAB-VORNA = IT_FILE_UPLOAD1-VALUE.
      WHEN 12.
        WA_TAB-NACHN = IT_FILE_UPLOAD1-VALUE .
      WHEN 13.
        WA_TAB-GESCH = IT_FILE_UPLOAD1-VALUE.
      WHEN 14.
        WA_TAB-GBDAT = IT_FILE_UPLOAD1-VALUE.
      WHEN 15.
        WA_TAB-GBORT = IT_FILE_UPLOAD1-VALUE.
      WHEN 16.
        WA_TAB-GBLND = IT_FILE_UPLOAD1-VALUE.
      WHEN 17.
        WA_TAB-SPRSL = IT_FILE_UPLOAD1-VALUE.
      WHEN 18.
        WA_TAB-FATXT = IT_FILE_UPLOAD1-VALUE.
      WHEN 19.
        WA_TAB-ANZKD = IT_FILE_UPLOAD1-VALUE.
      WHEN 20.
        WA_TAB-NATIO = IT_FILE_UPLOAD1-VALUE.
      WHEN 21.
        WA_TAB-GBDEP = IT_FILE_UPLOAD1-VALUE.
      WHEN 22.
        WA_TAB-BEGDA2 = IT_FILE_UPLOAD1-VALUE.
      WHEN 23.
        WA_TAB-BTRTL = IT_FILE_UPLOAD1-VALUE.


    ENDCASE.

    AT END OF ROW.
      APPEND WA_TAB TO IT_TAB.
      CLEAR: WA_TAB.
    ENDAT.
  ENDLOOP.

*  perform open_group.
  LOOP AT IT_TAB INTO WA_TAB..
    REFRESH: IT_BDCDATA.


    perform bdc_dynpro      using 'SAPMP50A' '1000'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'RP50G-PERNR'
                              WA_TAB-PERNR."'1'.
perform bdc_field       using 'BDC_CURSOR'
                              'T582S-ITEXT(01)'.
perform bdc_field       using 'RP50G-SELEC(01)'
                              'X'.
perform bdc_field       using 'RP50G-TIMR6'
                              'X'.
perform bdc_dynpro      using 'SAPMP50A' '1000'.
perform bdc_field       using 'BDC_OKCODE'
                              '=INS'.
perform bdc_field       using 'RP50G-PERNR'
                              WA_TAB-PERNR."'1'.
perform bdc_field       using 'BDC_CURSOR'
                              'T582S-ITEXT(01)'.
perform bdc_field       using 'RP50G-TIMR6'
                              'X'.
perform bdc_field       using 'RP50G-CHOIC'
                              'Actions'.
perform bdc_dynpro      using 'MP000000' '2000'.
perform bdc_field       using 'BDC_CURSOR'
                              'P0000-BEGDA'.
perform bdc_field       using 'BDC_OKCODE'
                              '=UPD'.
perform bdc_field       using 'P0000-BEGDA'
                              WA_TAB-BEGDA."'28.10.2013'.
perform bdc_field       using 'P0000-MASSN'
                              WA_TAB-BEGDA."'ZA'.
perform bdc_field       using 'P0000-MASSG'
                              WA_TAB-MASSG."'02'.
perform bdc_field       using 'PSPAR-PLANS'
                               WA_TAB-PLANS."'99999999'.
perform bdc_field       using 'PSPAR-WERKS'
                              WA_TAB-WERKS."'A001'.
perform bdc_field       using 'PSPAR-PERSG'
                              WA_TAB-PERSG."'A'.
perform bdc_field       using 'PSPAR-PERSK'
                              WA_TAB-PERSK."'E1'.
perform bdc_dynpro      using 'MP000100' '2000'.
perform bdc_field       using 'BDC_CURSOR'
                              'P0001-BTRTL'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'P0001-BEGDA'
                              WA_TAB-BEGDA2."'28.10.2013'.
perform bdc_field       using 'P0001-ENDDA'
                              '31.12.9999'.
perform bdc_field       using 'P0001-BTRTL'
                              WA_TAB-BTRTL."'CX02'.
***perform bdc_field       using 'P0001-ABKRS'
***                              'P1'.
***perform bdc_field       using 'PPRHPR-PROZT'
***                              '100,00'.
***perform bdc_field       using 'P0001-PLANS'
***                              '99999999'.
***perform bdc_field       using 'P0001-VDSK1'
***                              'A001'.
***perform bdc_dynpro      using 'MP000100' '2000'.
***perform bdc_field       using 'BDC_CURSOR'
***                              'P0001-BEGDA'.
***perform bdc_field       using 'BDC_OKCODE'
***                              '=UPD'.
***perform bdc_field       using 'P0001-BEGDA'
***                              '28.10.2013'.
***perform bdc_field       using 'P0001-ENDDA'
***                              '31.12.9999'.
***perform bdc_field       using 'P0001-BTRTL'
***                              'CX02'.
***perform bdc_field       using 'P0001-ABKRS'
***                              'P1'.
***perform bdc_field       using 'PPRHPR-PROZT'
***                              '100,00'.
***perform bdc_field       using 'P0001-PLANS'
***                              '99999999'.
***perform bdc_field       using 'P0001-VDSK1'
***                              'A001'.
perform bdc_dynpro      using 'MP000200' '2040'.
perform bdc_field       using 'BDC_CURSOR'
                              'P0002-GBORT'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'P0002-BEGDA'
                               WA_TAB-BEGDA1."'01.01.1979'.
perform bdc_field       using 'P0002-ENDDA'
                              '31.12.9999'.
perform bdc_field       using 'Q0002-ANREX'
                              WA_TAB-ANREX."'Mr.'.
perform bdc_field       using 'P0002-NACHN'
                              WA_TAB-NACHN."'FilLING'.
perform bdc_field       using 'P0002-VORNA'
                              WA_TAB-VORNA."'Manager'.
*perform bdc_field       using 'P0002-INITS'
*                              'a'.
perform bdc_field       using 'P0002-GESCH'
                              WA_TAB-GESCH."'1'.
perform bdc_field       using 'P0002-SPRSL'
                              WA_TAB-SPRSL."'EN'.
perform bdc_field       using 'P0002-GBDAT'
                              WA_TAB-GBDAT."'01.01.1970'.
perform bdc_field       using 'Q0002-FATXT'
                              WA_TAB-FATXT."'Single'.
perform bdc_field       using 'P0002-GBORT'
                               WA_TAB-GBORT."'DEHRADUN'.
perform bdc_field       using 'P0002-GBLND'
                              WA_TAB-GBLND."'IN'.
perform bdc_field       using 'P0002-ANZKD'
                               WA_TAB-ANZKD."'40'.
perform bdc_field       using 'P0002-GBDEP'
                               WA_TAB-GBDEP."'24'.
*perform bdc_field       using 'Q0002-KITXT'
*                              'HND'.
perform bdc_field       using 'P0002-NATIO'
                              WA_TAB-NATIO."'IN'.
***perform bdc_dynpro      using 'MP000200' '2040'.
***perform bdc_field       using 'BDC_CURSOR'
***                              'P0002-BEGDA'.
***perform bdc_field       using 'BDC_OKCODE'
***                              '=UPD'.
***perform bdc_field       using 'P0002-BEGDA'
***                              '01.01.1979'.
***perform bdc_field       using 'P0002-ENDDA'
***                              '31.12.9999'.
***perform bdc_field       using 'Q0002-ANREX'
***                              'Mr.'.
***perform bdc_field       using 'P0002-NACHN'
***                              'FilLING'.
***perform bdc_field       using 'P0002-VORNA'
***                              'Manager'.
***perform bdc_field       using 'P0002-INITS'
***                              'a'.
***perform bdc_field       using 'P0002-GESCH'
***                              '1'.
***perform bdc_field       using 'P0002-SPRSL'
***                              'EN'.
***perform bdc_field       using 'P0002-GBDAT'
***                              '01.01.1970'.
***perform bdc_field       using 'Q0002-FATXT'
***                              'Single'.
***perform bdc_field       using 'P0002-GBORT'
***                              'DEHRADUN'.
***perform bdc_field       using 'P0002-GBLND'
***                              'IN'.
***perform bdc_field       using 'P0002-ANZKD'
***                              '40'.
***perform bdc_field       using 'P0002-GBDEP'
***                              '24'.
***perform bdc_field       using 'Q0002-KITXT'
***                              'HND'.
***perform bdc_field       using 'P0002-NATIO'
***                              'IN'.
perform bdc_dynpro      using 'SAPMSSY0' '0120'.
perform bdc_field       using 'BDC_CURSOR'
                              '04/03'.
perform bdc_field       using 'BDC_OKCODE'
                              '=CANC'.
perform bdc_dynpro      using 'MP000700' '2000'.
perform bdc_field       using 'BDC_OKCODE'
                              '/EBCK'.
perform bdc_field       using 'BDC_CURSOR'
                              'P0007-BEGDA'.
perform bdc_dynpro      using 'SAPMP50A' '1100'.
perform bdc_field       using 'BDC_OKCODE'
                              '/EBCK'.
perform bdc_field       using 'BDC_CURSOR'
                              'RP50G-PERNR'.

    CALL TRANSACTION 'PA30' USING IT_BDCDATA
                                    MODE P_MODE
                                    UPDATE 'S'
                                    MESSAGES INTO IT_MSG.

    REFRESH: IT_BDCDATA.
  ENDLOOP.

  DATA: V_MSG(255).

  LOOP AT IT_MSG INTO S_MSG.

    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        ID        = S_MSG-MSGID
        LANG      = S_MSG-MSGSPRA
        NO        = S_MSG-MSGNR
        V1        = S_MSG-MSGV1
        V2        = S_MSG-MSGV2
        V3        = S_MSG-MSGV3
        V4        = S_MSG-MSGV4
      IMPORTING
        MSG       = WA_MESSAGE-MESSAGE
      EXCEPTIONS
        NOT_FOUND = 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.
    APPEND WA_MESSAGE TO IT_MESSAGE.
    CLEAR : WA_MESSAGE.

  ENDLOOP.

  IF NOT IT_MESSAGE IS INITIAL.

    PERFORM BUILD_CATALOG.
    PERFORM ALV_DISPLAY.
    PERFORM LAYOUT.

  ENDIF.

***&---------------------------------------------------------------------*
*&      FORM  BDC_DYNPRO
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->PROGRAM    TEXT
*      -->DYNPRO     TEXT
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.

  CLEAR IT_BDCDATA.
  IT_BDCDATA-PROGRAM  = PROGRAM.
  IT_BDCDATA-DYNPRO   = DYNPRO.
  IT_BDCDATA-DYNBEGIN = 'X'.
  APPEND IT_BDCDATA.

ENDFORM.                    "BDC_DYNPRO


*----------------------------------------------------------------------*
*        INSERT FIELD                                                  *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
  CLEAR IT_BDCDATA.
  IT_BDCDATA-FNAM = FNAM.
  IT_BDCDATA-FVAL = FVAL.
  APPEND IT_BDCDATA.
ENDFORM.                    "BDC_FIELD
*&---------------------------------------------------------------------*
*&      FORM  BUILD_CATALOG
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM BUILD_CATALOG .
  WA_FIELDCATALOG-FIELDNAME   = 'MESSAGE'.
  WA_FIELDCATALOG-SELTEXT_M   = 'MESSAGE.'.
  APPEND WA_FIELDCATALOG TO I_FIELDCAT.
  CLEAR  WA_FIELDCATALOG.
ENDFORM.                    " BUILD_CATALOG
*&---------------------------------------------------------------------*
*&      FORM  ALV_DISPLAY
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM ALV_DISPLAY .

  GD_REPID = SY-REPID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM = GD_REPID
      IS_LAYOUT          = GD_LAYOUT
      IT_FIELDCAT        = I_FIELDCAT[]
    TABLES
      T_OUTTAB           = IT_MESSAGE
    EXCEPTIONS
      PROGRAM_ERROR      = 1
      OTHERS             = 2.
  IF SY-SUBRC <> 0.
* IMPLEMENT SUITABLE ERROR HANDLING HERE
  ENDIF.


ENDFORM.                    " ALV_DISPLAY
*&---------------------------------------------------------------------*
*&      FORM  LAYOUT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM LAYOUT .
  CLEAR GD_LAYOUT.
  GD_LAYOUT-COLWIDTH_OPTIMIZE = 'X'." OPTIMIZATION OF COL WIDTH
ENDFORM.                    " LAYOUT

Friday, June 19, 2015

Simple BDC with error log


*&---------------------------------------------------------------------*
*& Report  ZHCM_BDC_IT1000_PP02_O
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zhcm_bdc_it1000_pp02_o

       NO STANDARD PAGE HEADING LINE-SIZE 255.


TYPE-POOLS: truxs,slis.

TYPES truxs_t_text_data(4096) TYPE c OCCURS 0.
DATA: it_raw TYPE truxs_t_text_data.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
DATA: l_mstring(480).

TYPES: BEGIN OF ty_tab,

  plvar(02),
  otype(02),
  seark(12),
  infty(04),
  istat(01),
  begda(10),
  endda(10),
  rsign(01),
  relat(03),
  sclas(02),
  sobid(45),

       END OF ty_tab,

*include bdcrecx1.
       BEGIN OF ty_message,
        message TYPE string,
       END OF ty_message.


DATA : it_tab TYPE STANDARD TABLE OF ty_tab ,
       it_bdcdata LIKE bdcdata  OCCURS 0 WITH HEADER LINE,
       it_msg   TYPE STANDARD TABLE OF bdcmsgcoll,
       wa_msg LIKE LINE OF it_msg,
       s_msg     TYPE bdcmsgcoll ,
       wa_tab TYPE ty_tab.

DATA: i_fieldcat TYPE  slis_t_fieldcat_alv,
      wa_fieldcatalog TYPE slis_fieldcat_alv,
      gd_layout    TYPE slis_layout_alv,
      gd_repid     LIKE sy-repid.

DATA : it_sortcat   TYPE slis_t_sortinfo_alv.

DATA: lv_rec_count(3) VALUE 0.

DATA : it_message TYPE TABLE OF ty_message,
       wa_message TYPE ty_message.

*&--------------------- SELECTION SCREEN ------------------------------------&*

SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE text-001.
PARAMETERS: filenam1 TYPE  rlgrap-filename OBLIGATORY,
            p_mode    TYPE ctu_mode DEFAULT 'A'.
SELECTION-SCREEN END  OF BLOCK blk.

SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME .
PARAMETERS p_frmlin TYPE i DEFAULT 2.                 " FROM LINE NO
PARAMETERS p_toline TYPE i DEFAULT 65000.             " TO LINE NO
PARAMETERS p_frmcol TYPE i DEFAULT 1.                 " FROM COL NO
PARAMETERS p_tocol TYPE i DEFAULT 57.             " TO COL NO
SELECTION-SCREEN END OF BLOCK b.

*&-------------------------------------------------------------------------&*

DATA: BEGIN OF it_file_upload1 OCCURS 0.
        INCLUDE STRUCTURE alsmex_tabline.             " ROWS FOR TABLE WITH EXCEL DATA
DATA: END OF it_file_upload1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR filenam1.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      field_name = 'FILENAME'
    IMPORTING
      file_name  = filenam1.

*&----------------------------------------------------------------------------&*

START-OF-SELECTION.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = filenam1
      i_begin_col             = p_frmcol
      i_begin_row             = p_frmlin
      i_end_col               = p_tocol
      i_end_row               = p_toline
    TABLES
      intern                  = it_file_upload1
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 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.

*&----------------------------------------------------------------------------&*

  SORT it_file_upload1 BY row col.

  LOOP AT it_file_upload1.

    CASE it_file_upload1-col.

      WHEN 1.
        wa_tab-plvar = it_file_upload1-value.
      WHEN 2.
        wa_tab-otype = it_file_upload1-value .
      WHEN 3.
        wa_tab-seark = it_file_upload1-value.
      WHEN 4.
        wa_tab-infty = it_file_upload1-value.
      WHEN 5.
        wa_tab-istat = it_file_upload1-value.
      WHEN 6.
        wa_tab-begda = it_file_upload1-value.
      WHEN 7.
        wa_tab-endda = it_file_upload1-value.
      WHEN 8.
        wa_tab-rsign = it_file_upload1-value.
      WHEN 9.
        wa_tab-relat = it_file_upload1-value.
      WHEN 10.
        wa_tab-sclas = it_file_upload1-value.
      WHEN 11.
        wa_tab-sobid = it_file_upload1-value.

    ENDCASE.

    AT END OF row.
      APPEND wa_tab TO it_tab.
      CLEAR: wa_tab.
    ENDAT.
  ENDLOOP.

  LOOP AT it_tab INTO wa_tab..
    REFRESH: it_bdcdata.
    PERFORM bdc_dynpro      USING 'SAPMH5A0' '1000'.
    PERFORM bdc_field       USING 'BDC_CURSOR'
                                  'PPHDR-ENDDA'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=INSE'.
    PERFORM bdc_field       USING 'PPHDR-PLVAR'
                                  wa_tab-plvar."'01'.
    PERFORM bdc_field       USING 'PPHDR-OTYPE'
                                  wa_tab-otype."'O'.
    PERFORM bdc_field       USING 'PM0D1-SEARK'
                                  wa_tab-seark."'10000002'.
    PERFORM bdc_field       USING 'PPHDR-INFTY'
                                  wa_tab-infty."'1001'.
    PERFORM bdc_field       USING 'PPHDR-ISTAT'
                                  wa_tab-istat."'1'.
    PERFORM bdc_field       USING 'PPHDR-BEGDA'
                                  wa_tab-begda."'01.01.1900'.
    PERFORM bdc_field       USING 'PPHDR-ENDDA'
                                  wa_tab-endda."'31.12.9999'.
    PERFORM bdc_dynpro      USING 'MP100100' '2000'.
    PERFORM bdc_field       USING 'BDC_CURSOR'
                                  'P1001-SOBID'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=UPD'.
    PERFORM bdc_field       USING 'P1001-BEGDA'
                                  wa_tab-begda."'01.01.1900'.
    PERFORM bdc_field       USING 'P1001-ENDDA'
                                  wa_tab-endda."'31.12.9999'.
    PERFORM bdc_field       USING 'P1001-RSIGN'
                                  wa_tab-rsign."'b'.
    PERFORM bdc_field       USING 'P1001-RELAT'
                                  wa_tab-relat."'002'.
    PERFORM bdc_field       USING 'P1001-SCLAS'
                                  wa_tab-sclas."'O'.
    PERFORM bdc_field       USING 'P1001-SOBID'
                                  wa_tab-sobid."'10000003'.
**perform bdc_dynpro      using 'SAPLSPO1' '0500'.
**perform bdc_field       using 'BDC_OKCODE'
**                              '=OPT1'.
    PERFORM bdc_dynpro      USING 'SAPMH5A0' '1000'.
    PERFORM bdc_field       USING 'BDC_CURSOR'
                                  'PPHDR-PLVAR'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=BACK'.
**perform bdc_field       using 'PPHDR-PLVAR'
**                              '01'.
**perform bdc_field       using 'PPHDR-OTYPE'
**                              'O'.
**perform bdc_field       using 'PM0D1-SEARK'
**                              '10000002'.
**perform bdc_field       using 'PPHDR-INFTY'
**                              '1001'.
**perform bdc_field       using 'PPHDR-ISTAT'
**                              '1'.
**perform bdc_field       using 'PPHDR-BEGDA'
**                              '01.01.1900'.
**perform bdc_field       using 'PPHDR-ENDDA'
**                              '31.12.9999'.

    CALL TRANSACTION 'PP02' USING it_bdcdata
                                    MODE p_mode
                                    UPDATE 'S'
                                    MESSAGES INTO it_msg.
    REFRESH: it_bdcdata.
  ENDLOOP.

  DATA: v_msg(255).

  LOOP AT it_msg INTO s_msg.

    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        id        = s_msg-msgid
        lang      = s_msg-msgspra
        no        = s_msg-msgnr
        v1        = s_msg-msgv1
        v2        = s_msg-msgv2
        v3        = s_msg-msgv3
        v4        = s_msg-msgv4
      IMPORTING
        msg       = wa_message-message
      EXCEPTIONS
        not_found = 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.
    APPEND wa_message TO it_message.
    CLEAR : wa_message.

  ENDLOOP.

  IF NOT it_message IS INITIAL.

    PERFORM build_catalog.
    PERFORM alv_display.
    PERFORM layout.

  ENDIF.

***&---------------------------------------------------------------------*
*&      FORM  BDC_DYNPRO
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->PROGRAM    TEXT
*      -->DYNPRO     TEXT
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.

  CLEAR it_bdcdata.
  it_bdcdata-program  = program.
  it_bdcdata-dynpro   = dynpro.
  it_bdcdata-dynbegin = 'X'.
  APPEND it_bdcdata.

ENDFORM.                    "BDC_DYNPRO


*----------------------------------------------------------------------*
*        INSERT FIELD                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  CLEAR it_bdcdata.
  it_bdcdata-fnam = fnam.
  it_bdcdata-fval = fval.
  APPEND it_bdcdata.
ENDFORM.                    "BDC_FIELD

*&---------------------------------------------------------------------*
*&      Form  BUILD_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM build_catalog .
  wa_fieldcatalog-fieldname   = 'MESSAGE'.
  wa_fieldcatalog-seltext_m   = 'MESSAGE.'.
  APPEND wa_fieldcatalog TO i_fieldcat.
  CLEAR  wa_fieldcatalog.
ENDFORM.                    " BUILD_CATALOG

*&---------------------------------------------------------------------*
*&      Form  ALV_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alv_display .

  gd_repid = sy-repid.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = gd_repid
      is_layout          = gd_layout
      it_fieldcat        = i_fieldcat[]
    TABLES
      t_outtab           = it_message
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
* IMPLEMENT SUITABLE ERROR HANDLING HERE
  ENDIF.
ENDFORM.                    "ALV_DISPLAY

*&---------------------------------------------------------------------*
*&      FORM  LAYOUT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM layout .
  CLEAR gd_layout.
  gd_layout-colwidth_optimize = 'X'." OPTIMIZATION OF COL WIDTH
  gd_layout-zebra =  'X'.
ENDFORM.                    " LAYOUT

Wednesday, June 17, 2015

Skip to end of metadata
Go to start of metadata
Number of ways to display the messages.
1). MESSAGE 'abs' type 'I'.
2). MESSAGE I002 (<Message Class>)
            In the message class we have to write the corresponding message for 002.
3). REPORT <Program Name> MESSAGE-ID <Message Class>.
        MESSAGE I002.
            In the message class we have to write the corresponding message for 002.
4). MESSAGE i006 WITH text-003.
                    In the text symbols 003 we have to write the corresponding message.
5). MESSAGE text-001 type 'I'.
                        In the text symbols 001 we have to write the corresponding message.
6). MESSAGE i006 WITH 'Invalid purchase order Number'(003).
       006 message description is sending at runtime, in the message class we mention & & & & for the corresponding 006 number. In the text symbols 003 we are writing the description, it    just for our display purpose.
7). MESSAGE ID '<Message Class>' type 'I' NUMBER 002.
8). MESSAGE i003 (<Message Class>) WITH '<Some text message> '.
9). MESSAGE i003 (<Message Class>) WITH text-003.
                        In the text symbols 003 we have to write the corresponding message.
10). MESSAGE i003 (<Message Class>) with p_user.
                        Only for that particular user can get the message.

Tuesday, June 16, 2015

Date Validation using dyn_val_read Function module





METHOD if_ex_ftr_tr_time~get_time.
  break abap07.

  DATA :
  t_dynfields TYPE STANDARD TABLE OF dynpread,
  s_dynfields TYPE dynpread,
  lv_diff     type i,
  lv_date     type string,
  lv_start    type sy-datum,
  lv_end      type sy-datum.
*
  data:
    lv_dynname type D020S-PROG.
    lv_dynname = 'SAPLTM00'.

  s_dynfields-fieldname = 'VTMFHAZU-XBLFZ'.
  APPEND s_dynfields TO t_dynfields.

  s_dynfields-fieldname = 'VTMFHAZU-XELFZ'.
  APPEND s_dynfields TO t_dynfields.

  IF sy-dynnr EQ '0011'.
**
    CALL FUNCTION 'DYNP_VALUES_READ'
      EXPORTING
        dyname               = lv_dynname
        dynumb               = sy-dynnr
      TABLES
        dynpfields           = t_dynfields
      EXCEPTIONS
        invalid_abapworkarea = 1
        invalid_dynprofield  = 2
        invalid_dynproname   = 3
        invalid_dynpronummer = 4
        invalid_request      = 5
        no_fielddescription  = 6
        invalid_parameter    = 7
        undefind_error       = 8
        double_conversion    = 9
        stepl_not_found      = 10
        OTHERS               = 11.
    IF sy-subrc eq 0.
* Implement suitable error handling here
      read table t_dynfields into s_dynfields index 2.
        if sy-subrc eq 0.
        CONCATENATE s_dynfields-fieldvalue+6(4) s_dynfields-fieldvalue+3(2) s_dynfields-fieldvalue+0(2)
                    into lv_date.
        CONDENSE lv_date.
        lv_end = lv_date.
        endif.
      read table t_dynfields into s_dynfields index 1.
        if sy-subrc eq 0.
        clear lv_date.
        CONCATENATE s_dynfields-fieldvalue+6(4) s_dynfields-fieldvalue+3(2) s_dynfields-fieldvalue+0(2)
                    into lv_date.
        CONDENSE lv_date.
        lv_start = lv_date.
        endif.
        if lv_end is not initial and lv_start is not INITIAL.
        lv_diff = lv_end - lv_start.
        endif.

        if lv_diff GT 29.
        MESSAGE E057(ZFI).
        ENDIF.
    ENDIF.

  ENDIF.


ENDMETHOD.