Thursday, 13 March 2014

Sample Program to send email using function 'SO_NEW_DOCUMENT_SEND_API1


REPORT  zrqm_quality_notification   .

TABLESqmel.

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

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

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

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

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

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

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

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

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

  IF sy-subrc EQ 0.

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

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

      IF gv_tabix EQ .
        gv_counter2 gv_counter1 .
      ENDIF.

      IF gv_counter1 NE gv_counter2 .

        APPEND gw_add_task TO gt_add_task.
        CLEAR gw_add_task.

        gv_counter2 gv_counter1 .

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


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


    ENDLOOP.
  ENDIF" IF sy-subrc eq 0.


  IF gt_add_task IS NOT INITIAL.

    IF gt_qmel1 IS NOT INITIAL.

      CLEAR gt_qn_email.

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

    ENDIF"if gt_qmel1 is not INITIAL.




    CLEAR gw_qmel.
    LOOP AT gt_qmel1 INTO gw_qmel.

      CLEAR gt_add_task1,
              gw_add_task.

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

        CLEAR gw_qn_email.

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

          gw_add_task-parnr gw_qn_email-parnr .

        ENDIF.
        APPEND gw_add_task TO gt_add_task1 .
        CLEAR gw_add_task .

      ENDLOOP.


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

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

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

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

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

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

CLEAR gw_add_task,
        gw_qmel,
        gw_global_prms.

REFRESH gt_add_task,
          gt_return,
          gt_qmel1,
          gt_global_prms.

PERFORM send_email_for_qn .

DELETE zqm_qmel FROM TABLE gt_qmel2 .
REFRESH gt_qmel2.

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

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

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

  CLEAR lt_qn_email,
          lw_qn_email.
  IF gt_qmel2 IS NOT INITIAL.

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

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


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

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


        ls_email_data-obj_name 'MESSAGE'.

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

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

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

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

        APPEND ls_email_text TO lt_email_text.

        APPEND INITIAL LINE TO lt_email_text.

        CLEAR ls_email_text.

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

        APPEND ls_email_text TO lt_email_text.

        CLEAR ls_email_text.

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

        APPEND ls_email_text TO lt_email_text.

        APPEND INITIAL LINE TO lt_email_text.

        CLEAR ls_email_text.

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

        APPEND ls_email_text TO lt_email_text.

        CLEAR ls_email_text.

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

        APPEND ls_email_text TO lt_email_text.

        CLEAR ls_email_text.

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

        APPEND ls_email_text TO lt_email_text.

        CLEAR ls_email_text.

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

        CLEAR ls_email_text.

        APPEND INITIAL LINE TO lt_email_text.

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

        APPEND ls_email_text TO lt_email_text.

*Begin of RavulS1 D47K9A0XEZ 04-Oct-2013

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

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

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

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

        APPEND ls_email_text TO lt_email_text.

        APPEND INITIAL LINE TO lt_email_text.

        CLEAR ls_email_text.


*By using the below Function module send an email

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

        IF sy-subrc EQ 0.

        ENDIF.

      ENDIF"if lw_qn_email-dl_name is NOT INITIAL.

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

    ENDLOOP.

  ENDIF."if gt_qmel2 is not INITIAL.

ENDFORM.                    " SEND_EMAIL_FOR_QN

No comments:

Post a Comment