2013년 12월 9일 월요일

스마트폼의 pdf를 이메일 첨부 발송

[출처:http://www.e-abap.net/]

DATA :  OUTPUT_OPTIONS       TYPE SSFCOMPOP,
           CONTROL_PARAMETERS   TYPE SSFCTRLOP.

  CLEAR: CONTROL_PARAMETERS, OUTPUT_OPTIONS, TSP03.

  CONTROL_PARAMETERS-NO_DIALOG = 'X'.
  " "otf 전환***
  CONTROL_PARAMETERS-GETOTF    = 'X'.   
  CONTROL_PARAMETERS-LANGU     = SY-LANGU.
  CONTROL_PARAMETERS-DEVICE    = 'PRINTER'.


  OUTPUT_OPTIONS-TDSENDDATE   = SY-DATLO.      
  OUTPUT_OPTIONS-TDSENDTIME   = SY-TIMLO.       
  OUTPUT_OPTIONS-TDDEST       = 'LP01'.         
  OUTPUT_OPTIONS-TDNEWID      = 'X'.            

   CALL FUNCTION P_FUNC_MOD_NAME
     EXPORTING
       CONTROL_PARAMETERS = CONTROL_PARAMETERS
       OUTPUT_OPTIONS     = OUTPUT_OPTIONS
       G_ITAB02_T         = G_ITAB02_T
     IMPORTING
       JOB_OUTPUT_INFO    = G_JOB_OUTPUT_INFO
       JOB_OUTPUT_OPTIONS = G_JOB_OUTPUT_OPTIONS
     TABLES
       G_ITAB03_T         = G_ITAB03_T
       G_ITAB08_T         = G_ITAB08_T
     EXCEPTIONS
       FORMATTING_ERROR   = 1
       INTERNAL_ERROR     = 2
       SEND_ERROR         = 3
       USER_CANCELED      = 4
       OTHERS             = 5.
   IF SY-SUBRC <> 0.
     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
     LEAVE PROGRAM.
   ENDIF.

*&
   DATA : OTF_TAB TYPE TSFOTF.

   OTF_TAB[] = G_JOB_OUTPUT_INFO-OTFDATA[].

*&
  DATA: GS_HEAD     LIKE SODOCCHGI1,
        GT_OBJPACK  LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE,
        GT_OBJHEAD  LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE,
        GT_OBJBIN   LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE,
        GT_OBJCON   LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE,
        GT_RECEIVER LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,
        GV_LINES LIKE SY-TABIX,
        GV_DOC_SIZE LIKE SY-TABIX.

*&
  DATA: LT_PDF            TYPE STANDARD TABLE OF TLINE WITH HEADER LINE,
        L_SIZE           TYPE I,
        L_REG_VALUE(128) TYPE C.
  data: L_FILE       TYPE  XSTRING.


*& OTF 파일을 PDF 파일로 CONVERT.
  CALL FUNCTION 'CONVERT_OTF'
     EXPORTING
       FORMAT                = 'PDF'
    TABLES
      OTF                   = P_OTF[]
      LINES                 = LT_PDF
    EXCEPTIONS
      ERR_MAX_LINEWIDTH     = 1
      ERR_FORMAT            = 2
      ERR_CONV_NOT_POSSIBLE = 3
      OTHERS                = 4.

  DATA: I TYPE I,N TYPE I.
  DATA: L_TXT(1000).

* Convert pdf(134) to binary(255) file.
  LOOP AT LT_PDF.
    L_TXT+I = LT_PDF.
    ADD 134 TO I.
    IF I >= 255.
      GT_OBJBIN = L_TXT.
      APPEND GT_OBJBIN.
      SUBTRACT 255 FROM I.
      L_TXT = L_TXT+255.
    ENDIF.
  ENDLOOP.
  IF I <> 0.
    GT_OBJBIN = L_TXT.
    APPEND GT_OBJBIN.
  ENDIF.


*& 메일 수신자 관련
  GT_RECEIVER-RECEIVER   =  'mychoi@lgcns.com'.
  "수신메일주소
  GT_RECEIVER-REC_TYPE   =  'U'.
  GT_RECEIVER-EXPRESS    =  'X'.
  APPEND GT_RECEIVER. CLEAR GT_RECEIVER.

*& 메일 내용
  GT_OBJCON-LINE = 'Smartforms Mail 확인바랍니다.'.
  APPEND GT_OBJCON. CLEAR GT_OBJCON.
*&
  GT_OBJCON-LINE = '감사합니다'.
  APPEND GT_OBJCON. CLEAR GT_OBJCON.

*&
*& 메일 내용 관련된 사항을 PACKING_LIST에 APPEND
  DESCRIBE TABLE GT_OBJCON LINES GV_LINES.

*& 메일 HEADER
  GS_HEAD-OBJ_NAME     =  'MESSAGE'.
  GS_HEAD-OBJ_DESCR    =  '>>SMART PDF MAIL 확인바랍니다.'.   "메일 제목
  GS_HEAD-OBJ_LANGU    =  'E'.
  GS_HEAD-SENSITIVTY   =  'O'.      "'O' : Standard 'P': Confidential
  GS_HEAD-OBJ_PRIO     =  '1'.
  GS_HEAD-NO_CHANGE    =  'X'.
  GS_HEAD-PRIORITY     =  '1'.
*  gs_head-doc_size = gv_lines * 255.

  GT_OBJPACK-HEAD_START = 1.
  GT_OBJPACK-HEAD_NUM = 0.
  GT_OBJPACK-BODY_START = 1.
  GT_OBJPACK-BODY_NUM = GV_LINES.
  GT_OBJPACK-DOC_TYPE = 'RAW'.

  APPEND GT_OBJPACK. CLEAR GT_OBJPACK.

*& 메일 첨부파일에 관련된 사항을 PACKING LIST에 저장
  DESCRIBE TABLE GT_OBJBIN LINES GV_LINES.
  GT_OBJPACK-TRANSF_BIN = 'X'.
  GT_OBJPACK-HEAD_START = 1.
  GT_OBJPACK-HEAD_NUM = 1.
  GT_OBJPACK-BODY_START = 1.
  GT_OBJPACK-BODY_NUM = GV_LINES.
  GT_OBJPACK-DOC_TYPE = 'PDF'.
* GT_OBJPACK-FILE_EXT = 'PDF'.
  GT_OBJPACK-OBJ_NAME = 'Attachment'.
  GT_OBJPACK-OBJ_DESCR = 'ATT_SMART'.

  READ TABLE GT_OBJBIN INDEX GV_LINES.

  GV_DOC_SIZE = GV_LINES * 255.

* GV_DOC_SIZE = ( GV_LINES - 1 ) * 255 + STRLEN( GT_OBJBIN ).
  GT_OBJPACK-DOC_SIZE = GV_DOC_SIZE.

  APPEND GT_OBJPACK. CLEAR GT_OBJPACK.

*& 메일을 전송하는 Function.....
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      DOCUMENT_DATA              = GS_HEAD      "메일TITLE
      PUT_IN_OUTBOX              = 'X'
      COMMIT_WORK                = 'X'
    TABLES
      PACKING_LIST               = GT_OBJPACK
      CONTENTS_BIN               = GT_OBJBIN     "첨부파일
      CONTENTS_TXT               = GT_OBJCON     "메일내용
      RECEIVERS                  = GT_RECEIVER   "수신정보
    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.
    MESSAGE S002 WITH '메일이 전송 되었습니다.'.
  ENDIF.

댓글 없음:

댓글 쓰기