Thursday, December 6, 2012

Abap Identify Number and Characters

The following sample shows how to identify number and characters in a string.

report z_identify.

data: test(10) type c value 'ABC123456'.
data: length type i.

length = strlen( test ).

if test(length) co '1234567890'.
  write:/ 'This is a number'.
else.
  write:/ 'This is not a number'.
endif.

Saturday, September 15, 2012

Abap send email library

The below include program is used to send email with CC and attachment functionality:

*&---------------------------------------------------------------------*
*&  Include         
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*  Purpose:
*  Provide generic subroutines for any ABAP programs with intention of
*  sending email (SAPOffice or Internet) with attachments
*&---------------------------------------------------------------------*


  DATA: objpack LIKE sopcklsti1 OCCURS  2 WITH HEADER LINE"Packing list
  DATA: objhead LIKE solisti1   OCCURS  1 WITH HEADER LINE"Object header
  DATA: objtxt  LIKE solisti1   OCCURS 10 WITH HEADER LINE"Email body message
  DATA: objbin  LIKE solisti1   OCCURS 10 WITH HEADER LINE"Binary attachments (PDF)
  DATA: objhex  LIKE solix      OCCURS 10 WITH HEADER LINE"Hex attachments (XLS)
  DATA: reclist LIKE somlreci1  OCCURS  5 WITH HEADER LINE"Recipient list
  DATA: doc_chng LIKE sodocchgi1. "Email information

  DATA: tab_lines LIKE sy-tabix. "Number of records of the content table being filled

  DATA: pk_lines LIKE sy-tabix. "Number of lines of the attachment packing list


*&---------------------------------------------------------------------*
*&      Form  initialize_email
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  FORM initialize_email.
    REFRESH: objpack,
             objhead,
             objtxt,
             objbin,
             objhex,
             reclist.
    CLEAR:   doc_chng, pk_lines.
  ENDFORM.                    "initialize_email

*&---------------------------------------------------------------------*
*&      Form  build_email_body
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->L_SUBJ     text
*----------------------------------------------------------------------*
  FORM build_email_body TABLES it_body STRUCTURE solisti1
                        USING l_subj.

* Setup the email body message
    IF NOT it_body[] IS INITIAL.
      REFRESH objtxt.
      objtxt[] = it_body[].
    ELSE.
      objtxt = l_subj.
      APPEND objtxt.
    ENDIF.

* Subject of email
    MOVE l_subj TO doc_chng-obj_descr.

    DESCRIBE TABLE objtxt LINES tab_lines.
    READ TABLE objtxt INDEX tab_lines.

    doc_chng-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objtxt ).

* Prepare the packing list for email body
*    DESCRIBE TABLE objpack LINES pk_lines.
    CLEAR objpack-transf_bin.
    objpack-head_start = 1.
    objpack-head_num   = 0.
    objpack-body_start = 1.
    objpack-body_num   = tab_lines.
    objpack-doc_type   = 'RAW'.
    APPEND objpack.
  ENDFORM.                    "build_email_body

*&---------------------------------------------------------------------*
*&      Form  build_hex_attachment
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  FORM build_hex_attachment TABLES it_hex
                            USING l_filename LIKE sopcklsti1-obj_descr
                                  l_filetype LIKE sopcklsti1-doc_type.

    DATA: it_objhex LIKE solix OCCURS 0 WITH HEADER LINE.

    IF NOT it_hex[] IS INITIAL.
      CALL FUNCTION 'SCMS_TEXT_TO_BINARY'
*       EXPORTING
*         FIRST_LINE            = 0
*         LAST_LINE             = 0
*         APPEND_TO_TABLE       = ' '
*         MIMETYPE              = ' '
*         ENCODING              =
*       IMPORTING
*         OUTPUT_LENGTH         =
        TABLES
          text_tab              = it_hex
          binary_tab            = it_objhex
        EXCEPTIONS
          failed                = 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.
        APPEND LINES OF it_objhex TO objhex.

* IT_OBJHEX is used as OBJHEX can contain multiple attachments

        DESCRIBE TABLE it_objhex LINES tab_lines.

        objpack-transf_bin = 'X'.
        objpack-head_start = 1.
        objpack-head_num   = 0.
        objpack-body_start = pk_lines + 1.
        objpack-body_num   = tab_lines.
        objpack-doc_type   = l_filetype.
*        objpack-obj_name   = 'ATTACHMENT'.
        objpack-obj_descr = l_filename.
        objpack-doc_size   = tab_lines * 255.
        APPEND objpack.

        pk_lines = objpack-body_start + objpack-body_num - 1.
      ENDIF.

    ENDIF.
  ENDFORM.                    "build_hex_attachment

*&---------------------------------------------------------------------*
*&      Form  build_recip_list
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  FORM build_recip_list USING l_recipient
                              l_reciptype LIKE somlreci1-rec_type.
    MOVE l_recipient TO reclist-receiver.

    reclist-rec_type = l_reciptype.
    reclist-copy = ''.

    APPEND reclist.
  ENDFORM.                    "build_recip_list


*&---------------------------------------------------------------------*
*&      Form  build_recip_cc_list
*&---------------------------------------------------------------------*

  FORM build_recip_cc_list USING l_recipient
                              l_reciptype LIKE somlreci1-rec_type.
    MOVE l_recipient TO reclist-receiver.

    reclist-rec_type = l_reciptype.
    reclist-copy = 'X'.

    APPEND reclist.
  ENDFORM.                    "build_recip_cc_list


*&---------------------------------------------------------------------*
*&      Form  send_email
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  FORM send_email.

    IF reclist[] IS INITIAL.
      PERFORM build_recip_list USING sy-uname
                                     'B'.
    ENDIF.

    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
      EXPORTING
        document_data                    = doc_chng
*     PUT_IN_OUTBOX                    = ' '
       commit_work                      = 'X'
*   IMPORTING
*     SENT_TO_ALL                      =
*     NEW_OBJECT_ID                    =
      TABLES
        packing_list                     = objpack
       object_header                    = objhead
*{   REPLACE        DEVK935771                                        2
*\*     CONTENTS_BIN                     =
      CONTENTS_BIN                     = objbin
*}   REPLACE
       contents_txt                     = objtxt
       contents_hex                     = objhex
*     OBJECT_PARA                      =
*     OBJECT_PARB                      =
        receivers                        = reclist
     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 <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*{   DELETE         DEVK935721                                        1
*\    ELSE.
*\      SUBMIT rsconn01 AND RETURN.
*}   DELETE
    ENDIF.


  ENDFORM.                    "send_email



*&---------------------------------------------------------------------*
*&      Form  send_email_w_from_addr
*&---------------------------------------------------------------------*
*       T01K918835
*----------------------------------------------------------------------*
  FORM send_email_w_from_addr USING l_from.

    TYPES:
      BEGIN OF ty_s_imp00,
        imp01 TYPE c,                    "Sent To All
        imp02 TYPE sofolenti1-object_id, "New Object ID
        imp03 TYPE soudk,                "Sender ID
      END OF ty_s_imp00.

    DATA:
      lw_imp00     TYPE ty_s_imp00,
      lt_sosct     TYPE sosctab,
      lt_obcat     TYPE TABLE OF sxobjcat.

    IF reclist[] IS INITIAL.
      PERFORM build_recip_list USING sy-uname
                                     'B'.
    ENDIF.


    CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
      EXPORTING
        document_data              = doc_chng
        put_in_outbox              = 'X'
        sender_address             = l_from
        sender_address_type        = 'SMTP'
        commit_work                = 'X'
      IMPORTING
        sent_to_all                = lw_imp00-imp01
        new_object_id              = lw_imp00-imp02
        sender_id                  = lw_imp00-imp03
      TABLES
        packing_list               = objpack
*       contents_bin               =
        contents_hex               = objhex
        contents_txt               = objtxt
        receivers                  = reclist
      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 <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ELSE.
* Force the email sending immediately.

      CLEAR: lt_sosct, lt_obcat.
      COMMIT WORK AND WAIT.

      SELECT  * FROM sosc
        INTO TABLE lt_sosct
        WHERE objtp = lw_imp00-imp02+0(3AND
              objyr = lw_imp00-imp02+3(2AND
              objno = lw_imp00-imp02+5.

      IF sy-subrc = 0.

        CALL FUNCTION 'SX_SEND_DISPATCHER'
          EXPORTING
            sosc_tab          = lt_sosct
          TABLES
            obj_cat           = lt_obcat
          EXCEPTIONS
            internal_error    = 1
            directsend_failed = 2
            OTHERS            = 3.

        IF sy-subrc <> 0.
          MESSAGE s005(z1) WITH space 'Email' 'Sent'.
        ELSE.
          MESSAGE s004(z1) WITH space 'Email' 'Sent'.
        ENDIF.

      ELSE.
        MESSAGE s005(z1) WITH space 'Email' 'Sent'.
      ENDIF.


    ENDIF.



  ENDFORM.                    "send_email
*{   INSERT         DEVK935771                                        1
FORM build_pdf_attachment TABLES it_pdf
                            USING l_filename LIKE sopcklsti1-obj_descr
                                  l_filetype LIKE sopcklsti1-doc_type.

  DATA: it_objbin  LIKE solisti1 OCCURS 0 WITH HEADER LINE.

  if it_pdf[] is not initial.
    CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
*     EXPORTING
*       LINE_WIDTH_SRC                    =
*       LINE_WIDTH_DST                    =
*       TRANSFER_BIN                      = ' '
      TABLES
        content_in                        = it_pdf
        content_out                       = it_objbin
     EXCEPTIONS
       ERR_LINE_WIDTH_SRC_TOO_LONG       = 1
       ERR_LINE_WIDTH_DST_TOO_LONG       = 2
       ERR_CONV_FAILED                   = 3
       OTHERS                            = 4
              .
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    else.
        APPEND LINES OF it_objbin TO objbin.
* IT_OBJBIN is used as OBJBIN can contain multiple attachments

        DESCRIBE TABLE it_objbin LINES tab_lines.

        objpack-transf_bin = 'X'.
        objpack-head_start = 1.
        objpack-head_num   = 0.
        objpack-body_start = pk_lines + 1.
        objpack-body_num   = tab_lines.
        objpack-doc_type   = l_filetype.
*        objpack-obj_name   = 'ATTACHMENT'.
        objpack-obj_descr = l_filename.
        objpack-doc_size   = tab_lines * 255.
        APPEND objpack.

        pk_lines = objpack-body_start + objpack-body_num - 1.
    ENDIF.

  ENDIF.
ENDFORM.
*}   INSERT

ABAP Folder Selection input box

The below program will create a input selection that will pop up the folder selection box.




REPORT  z_select_folder.

CONSTANTS: c_default_folder TYPE rlgrap-filename VALUE 'C:\'.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002.
PARAMETERS :  p_folder LIKE rlgrap-filename OBLIGATORY DEFAULT c_default_folder.
SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_folder.
  PERFORM select_folder CHANGING p_folder.


FORM select_folder  CHANGING p_p_folder.
  DATA: l_path TYPE string.

  CALL METHOD cl_gui_frontend_services=>directory_browse
    EXPORTING
      window_title         = 'Select Folder'
      initial_folder       = 'C:\'
    CHANGING
      selected_folder      = l_path
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  MOVE l_path TO p_p_folder.
ENDFORM.                    " SELECT_FOLDER

Sunday, February 12, 2012

SAP Execute MIRO using BAPI_INCOMINGINVOICE_CREATE

This is the sample program to create incoming vendor invoice (MIRO) using BAPI_INCOMINGINVOICE_CREATE



REPORT  zt_bapimiro.

DATA: wa_header LIKE bapi_incinv_create_header.

DATA: it_item TYPE STANDARD TABLE OF bapi_incinv_create_item,
      wa_item TYPE bapi_incinv_create_item.

DATA: it_ret LIKE bapiret2 OCCURS 0 WITH HEADER LINE.

DATA: g_invno LIKE bapi_incinv_fld-inv_doc_no,
      g_fyear LIKE bapi_incinv_fld-fisc_year.

wa_header-invoice_ind = 'X'.
wa_header-doc_date = '20120131'.   "Enter the document date
wa_header-pstng_date = '20120208'"Enter the posting date
wa_header-ref_doc_no = 'Test'.
wa_header-comp_code = '3100'.
wa_header-gross_amount = '5908.11'.  "Enter the gross amount(aft. tax) for the invoice
wa_header-calc_tax_ind = 'X'.
wa_header-currency = 'USD'.

wa_item-invoice_doc_item = '000001'.
wa_item-po_number = '4590038150'.    "Enter the PO number
wa_item-po_item = '00120'.           "Enter the PO item number
wa_item-ref_doc = '5007548571'.      "Enter the GR number
wa_item-ref_doc_year = '2012'.       "Enter the GR fiscal year
wa_item-ref_doc_it = '0001'.         "Enter the GR item number
wa_item-tax_code = 'V7'.             "Enter the tax code applicable
wa_item-item_amount = '5521.60'.     "Enter the item amount
wa_item-quantity = '2380'.           "Enter the invoice quantity
wa_item-po_unit = 'EA'.              "Enter the UoM
APPEND wa_item TO it_item.

CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE'
  EXPORTING
    headerdata                = wa_header
*   ADDRESSDATA               =
 IMPORTING
   invoicedocnumber          = g_invno
   fiscalyear                = g_fyear
  TABLES
    itemdata                  = it_item
*   ACCOUNTINGDATA            =
*   GLACCOUNTDATA             =
*   MATERIALDATA              =
*   TAXDATA                   =
*   WITHTAXDATA               =
*   VENDORITEMSPLITDATA       =
    return                    = it_ret
*   EXTENSIONIN               =
          .

IF g_invno IS NOT INITIAL.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*   EXPORTING
*     WAIT          =
*   IMPORTING
*     RETURN        =
            .
ENDIF.
WRITE:/1 g_invno, g_fyear.

LOOP AT it_ret.
  WRITE:/1 it_ret-message.
ENDLOOP.