<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Regarding SO_DOCUMENT_SEND_API1 function module in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-so-document-send-api1-function-module/m-p/3589787#M864341</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Use the following code which uses the same FM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can change the code according to your requirement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp; Report  YMSL_ORDER_ACCEPTANCE
*&amp;amp;
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;
*&amp;amp;
*&amp;amp;---------------------------------------------------------------------*

REPORT  YMSL_ORDER_ACCEPTANCE.

*********Variable Declarations *****************************
DATA: GV_FORM_NAME TYPE RS38L_FNAM, " Used to store the function module generated by Smartform
      GV_BIN_FILESIZE TYPE I, " Store the file size
      GV_POS TYPE I,
      GV_LEN TYPE I,
      GV_TAB_LINES TYPE I,
      gv_desc_lines type i.

********Constants *******************************************
DATA : GC_TEXT(11) TYPE C VALUE 'Form Output',
       GC_TST(3) TYPE C VALUE 'TST',
       GC_TESTING(20) TYPE C VALUE 'Order Acceptance'.
*********Work Area Declarations *****************************
DATA: GS_DOCDATA TYPE SODOCCHGI1, " Data of an object which can be changed
      GS_CTRLOP TYPE SSFCTRLOP, " Smart Forms: Control structure
      GS_OUTOPT TYPE SSFCOMPOP, " SAP Smart Forms: Smart Composer (transfer) options
      GS_OTFDATA TYPE SSFCRESCL, " Smart Forms: Return value at end of form printing
      GS_RECLIST TYPE SOMLRECI1, " SAPoffice: Structure of the API Recipient List
      GS_PDF_TAB TYPE TLINE, " Workarea for SAP Script Text Lines
      GS_OBJBIN TYPE SOLISTI1, " SAPoffice: Single List with Column Length 255
      GS_OBJPACK TYPE SOPCKLSTI1. " SAPoffice: Description of Imported Object Components
DATA : w_doc_chng typE sodocchgi1.
*********Internal tables Declarations *****************************
DATA : I_OBJTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.
DATA: GT_RECLIST TYPE TABLE OF SOMLRECI1, " SAPoffice: Structure of the API Recipient List
      GT_PDF_TAB TYPE TABLE OF TLINE, " SAPscript: Text Lines
      GT_OTF TYPE TABLE OF ITCOO, " OTF Structure
      GT_OBJBIN TYPE TABLE OF SOLISTI1, " SAPoffice: Single List with Column Length 255
      GT_OBJPACK TYPE TABLE OF SOPCKLSTI1. " SAPoffice: Description of Imported Object Components


******
DATA : BEGIN OF IT_ADR6 OCCURS 0,
          SMTP_ADDR TYPE ADR6-SMTP_ADDR,
        END OF IT_ADR6.
DATA : W_FILE_NAME TYPE STRING,
      W_FILE_PATH TYPE STRING,
      W_FULL_PATH TYPE STRING.



CLEAR : GV_FORM_NAME,
        GS_CTRLOP,
        GS_OUTOPT,
        GS_OTFDATA,
        GV_BIN_FILESIZE,
        GV_POS,
        GV_LEN,
        GV_TAB_LINES.

SELECTION-SCREEN:  BEGIN OF SCREEN 1001 AS WINDOW  TITLE scr_ttl .

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TXT_B1 NO INTERVALS.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(15) TX_VBELN.
PARAMETER : P_VBELN TYPE VBAK-VBELN .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B1.

*SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TXT_B2 .
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: R_OUT RADIOBUTTON GROUP R1 DEFAULT 'X' USER-COMMAND RAD11 .
SELECTION-SCREEN COMMENT 5(20) TXT_OUT.  "  roles by t-code
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETER R_PDF RADIOBUTTON GROUP R1 .
SELECTION-SCREEN COMMENT 5(20) TXT_PDF.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETER R_MAIL RADIOBUTTON GROUP R1 .
SELECTION-SCREEN COMMENT 5(15) TXT_MAIL.
*SELECTION-SCREEN END OF LINE.
*SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 20(7) TXT_MAL1.
PARAMETER : P_MAIL TYPE ADR6-SMTP_ADDR MODIF ID M1.
SELECTION-SCREEN END OF LINE.

*SELECTION-SCREEN END OF BLOCK B2.

SELECTION-SCREEN: END OF SCREEN 1001 .

CALL SELECTION-SCREEN 1001 STARTING AT 20 5 ENDING AT 105 10.

*SET PF-STATUS 'STATUS'.

INITIALIZATION.

  TX_VBELN = 'Order'.
  TXT_B1 = 'Selection Criteria '.
*  TXT_B2 = 'Output Criteria '.
  scr_ttl = 'Order Acceptance'.
  TXT_OUT = 'Print Output'.
  TXT_PDF = 'Save To PDF'.
  TXT_MAIL = 'Mail the Output'.
  TXT_MAL1 = 'E-mail'.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF R_MAIL &amp;lt;&amp;gt; 'X'.
      IF SCREEN-GROUP1 = 'M1'.
*        SCREEN-INVISIBLE =  1.
        SCREEN-INPUT = 0. " Disable for input.
        MODIFY SCREEN.
      ENDIF.
    ENDIF.
  ENDLOOP.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MAIL.
  PERFORM TABLE_HELP.

START-OF-SELECTION..

  IF P_VBELN IS NOT INITIAL.
    PERFORM GET_SF.
    IF R_PDF = 'X' .
      PERFORM CONVERT_OTF.
      PERFORM SAVE_DIALOG.
      PERFORM DOWNLOAD.
    ELSEIF R_MAIL = 'X'.
      IF P_MAIL IS NOT INITIAL.
       PERFORM CONVERT_OTF.
       PERFORM SEND_MAIL.
      ELSE.
        MESSAGE 'Please Enter Email Address' TYPE 'S'.
*         CALL TRANSACTION 'YMSL20'.
*         LEAVE LIST-PROCESSING.
      ENDIF.
    ENDIF.
  ELSE.
    MESSAGE 'Please Enter Order No' TYPE 'S'.
*      CALL TRANSACTION 'YMSL20'.
*      LEAVE LIST-PROCESSING.

ENDIF.
END-OF-SELECTION.
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  TABLE_HELP
*&amp;amp;---------------------------------------------------------------------*
FORM TABLE_HELP .
  IF R_MAIL = 'X'.
    SELECT SMTP_ADDR FROM ADR6 INTO TABLE IT_ADR6.

    SORT IT_ADR6.
    DELETE ADJACENT DUPLICATES FROM IT_ADR6 COMPARING ALL FIELDS.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
*     DDIC_STRUCTURE         = ' '
        RETFIELD               = 'IT_ADR6-SMTP_ADDR'
*     PVALKEY                = ' '
       DYNPPROG               = SY-REPID
       DYNPNR                 = SY-DYNNR
       DYNPROFIELD            = 'EMAIL'
*     STEPL                  = 0
       WINDOW_TITLE           = 'SELECT MAIL ADDRESS'
*     VALUE                  = ' '
       VALUE_ORG              = 'S'
*     MULTIPLE_CHOICE        = ' '
*     DISPLAY                = ' '
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM          = ' '
*     MARK_TAB               =
*   IMPORTING
*     USER_RESET             =
      TABLES
        VALUE_TAB              = IT_ADR6
*     FIELD_TAB              =
*     RETURN_TAB             =
*     DYNPFLD_MAPPING        =
*   EXCEPTIONS
*     PARAMETER_ERROR        = 1
*     NO_VALUES_FOUND        = 2
*     OTHERS                 = 3
              .
    IF SY-SUBRC &amp;lt;&amp;gt; 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

  ENDIF.
ENDFORM.                    " TABLE_HELP
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  GET_SF
*&amp;amp;---------------------------------------------------------------------*
FORM GET_SF .
*&amp;#149; Generate Function Module name
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = 'YMSL_ORD_ACCEPT'
    IMPORTING
      FM_NAME            = GV_FORM_NAME
    EXCEPTIONS
      NO_FORM            = 1
      NO_FUNCTION_MODULE = 2
      OTHERS             = 3.
  IF SY-SUBRC  &amp;lt;&amp;gt; 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*&amp;#149; Assigning values to Form Control Structure and Form Composer
  IF R_OUT &amp;lt;&amp;gt; 'X'.
    GS_CTRLOP-GETOTF = 'X'.
    GS_CTRLOP-NO_DIALOG = 'X'.
    GS_OUTOPT-TDNOPREV = 'X'.
  ENDIF.

  CALL FUNCTION GV_FORM_NAME
    EXPORTING
*   ARCHIVE_INDEX              =
*   ARCHIVE_INDEX_TAB          =
*   ARCHIVE_PARAMETERS         =
      CONTROL_PARAMETERS         = GS_CTRLOP
*   MAIL_APPL_OBJ              =
*   MAIL_RECIPIENT             =
*   MAIL_SENDER                =
      OUTPUT_OPTIONS             = GS_OUTOPT
      USER_SETTINGS              = 'X'
      TEMP_VBELN                 =  P_VBELN
   IMPORTING
*   DOCUMENT_OUTPUT_INFO       =
      JOB_OUTPUT_INFO            = GS_OTFDATA
*   JOB_OUTPUT_OPTIONS         =
   EXCEPTIONS
     FORMATTING_ERROR           = 1
     INTERNAL_ERROR             = 2
     SEND_ERROR                 = 3
     USER_CANCELED              = 4
     OTHERS                     = 5
            .
  IF SY-SUBRC &amp;lt;&amp;gt; 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " GET_SF
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  CONVERT_OTF
*&amp;amp;---------------------------------------------------------------------*
FORM CONVERT_OTF .
*&amp;#149; Assigning the OTFDATA to OTF Structure table
  CLEAR GT_OTF.
  GT_OTF[] = GS_OTFDATA-OTFDATA[].
*&amp;#149; Convert the OTF DATA to SAP Script Text lines
  CLEAR GT_PDF_TAB.

  CALL FUNCTION 'CONVERT_OTF'
   EXPORTING
     FORMAT                      = 'PDF'
     MAX_LINEWIDTH               = 132
*   ARCHIVE_INDEX               = ' '
*   COPYNUMBER                  = 0
*   ASCII_BIDI_VIS2LOG          = ' '
*   PDF_DELETE_OTFTAB           = ' '
   IMPORTING
     BIN_FILESIZE                = GV_BIN_FILESIZE
*   BIN_FILE                    =
    TABLES
      OTF                         = GT_OTF
      LINES                       = GT_PDF_TAB
   EXCEPTIONS
     ERR_MAX_LINEWIDTH           = 1
     ERR_FORMAT                  = 2
     ERR_CONV_NOT_POSSIBLE       = 3
     ERR_BAD_OTF                 = 4
     OTHERS                      = 5
            .
  IF SY-SUBRC &amp;lt;&amp;gt; 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*
*t_otf[] = t_otf_from_fm-otfdata[].
*
** Function Module CONVERT_OTF is used to convert the OTF format to PDF
*
*CALL FUNCTION 'CONVERT_OTF'
*EXPORTING
*FORMAT = 'PDF'
*MAX_LINEWIDTH = 132
** ARCHIVE_INDEX = ' '
** COPYNUMBER = 0
** ASCII_BIDI_VIS2LOG = ' '
** PDF_DELETE_OTFTAB = ' '
*IMPORTING
*BIN_FILESIZE = W_bin_filesize
** BIN_FILE =
*TABLES
*otf = T_OTF
*lines = T_pdf_tab
*EXCEPTIONS
*ERR_MAX_LINEWIDTH = 1
*ERR_FORMAT = 2
*ERR_CONV_NOT_POSSIBLE = 3
*ERR_BAD_OTF = 4
*OTHERS = 5
*.
*IF sy-subrc &amp;lt;&amp;gt; 0.
*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*ENDIF.


ENDFORM.                    " CONVERT_OTF
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  SAVE_DIALOG
*&amp;amp;---------------------------------------------------------------------*
FORM SAVE_DIALOG .
* To display File SAVE dialog window
  CALL METHOD CL_GUI_FRONTEND_SERVICES=&amp;gt;FILE_SAVE_DIALOG
   EXPORTING
   WINDOW_TITLE = 'Download to PDF '
* DEFAULT_EXTENSION = '(*.PDF)'
   DEFAULT_FILE_NAME = 'file.pdf'
   FILE_FILTER = 'PDF Format(*.PDF)'
   INITIAL_DIRECTORY = 'C:Documents and SettingsAdministratorDesktop'
* WITH_ENCODING =
   PROMPT_ON_OVERWRITE = 'X'
  CHANGING
  FILENAME = W_FILE_NAME
  PATH = W_FILE_PATH
  FULLPATH = W_FULL_PATH
* USER_ACTION =
* FILE_ENCODING =
  EXCEPTIONS
  CNTL_ERROR = 1
  ERROR_NO_GUI = 2
  NOT_SUPPORTED_BY_GUI = 3
  OTHERS = 4
  .
  IF SY-SUBRC &amp;lt;&amp;gt; 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " SAVE_DIALOG
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  DOWNLOAD
*&amp;amp;---------------------------------------------------------------------*
FORM DOWNLOAD .
* Use the FM GUI_DOWNLOAD to download the generated PDF file onto the
* presentation server

  CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
  BIN_FILESIZE = GV_BIN_FILESIZE
  FILENAME = W_FULL_PATH
  FILETYPE = 'BIN'
* APPEND = ' '
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* TRUNC_TRAILING_BLANKS_EOL = 'X'
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* IMPORTING
* FILELENGTH =
  TABLES
  DATA_TAB = GT_PDF_TAB
* FIELDNAMES =
* EXCEPTIONS
* FILE_WRITE_ERROR = 1
* NO_BATCH = 2
* GUI_REFUSE_FILETRANSFER = 3
* INVALID_TYPE = 4
* NO_AUTHORITY = 5
* UNKNOWN_ERROR = 6
* HEADER_NOT_ALLOWED = 7
* SEPARATOR_NOT_ALLOWED = 8
* FILESIZE_NOT_ALLOWED = 9
* HEADER_TOO_LONG = 10
* DP_ERROR_CREATE = 11
* DP_ERROR_SEND = 12
* DP_ERROR_WRITE = 13
* UNKNOWN_DP_ERROR = 14
* ACCESS_DENIED = 15
* DP_OUT_OF_MEMORY = 16
* DISK_FULL = 17
* DP_TIMEOUT = 18
* FILE_NOT_FOUND = 19
* DATAPROVIDER_EXCEPTION = 20
* CONTROL_FLUSH_ERROR = 21
* OTHERS = 22
  .
  IF SY-SUBRC &amp;lt;&amp;gt; 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " DOWNLOAD
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  SEND_MAIL
*&amp;amp;---------------------------------------------------------------------*

FORM SEND_MAIL .
***changes by rajan
*DATA : v_first TYPE USER_ADDR-NAME_FIRST,
*      V_LAST   TYPE USER_ADDR-NAME_LAST.
DATA : detail TYPE STRING.
*
*SELECT SINGLE NAME_FIRST NAME_LAST FROM
*  USER_ADDR INTO (V_FIRST,V_LAST)
*  WHERE BNAME = syst-UNAME.

*  CONCATENATE v_first V_LAST INTO detail SEPARATED BY space.
data : v_po_no TYPE vbkd-bstkd,
      v_po_date TYPE vbkd-bstdk.

data : day TYPE STRING,
       month type STRING,
       year  TYPE STRING.

data : date TYPE STRING.


SELECT SINGLE BSTKD BSTDK
  FROM VBKD
  INTO (v_po_no,v_po_date)
  WHERE VBELN = P_VBELN.

day = v_po_date+6(2).
month = v_po_date+4(2).
year = v_po_date+0(4).

CONCATENATE day '/' month '/' year INTO date.

  CONCATENATE 'Please Find attached Order Acceptance against your P.O.No.' v_po_no 'dated' date  '.' INTO detail SEPARATED BY space.
**&amp;#149; Assigning the Description of the object sent in the mail
*  CLEAR GS_DOCDATA.
*  GS_DOCDATA-OBJ_NAME = GC_TST.
*  GS_DOCDATA-OBJ_DESCR = GC_TESTING.

*&amp;#149; Assigning the email id to Structure of the API Recipient List table
  CLEAR : GT_RECLIST, GS_RECLIST.
  GS_RECLIST-RECEIVER =  P_MAIL.       " 
  GS_RECLIST-REC_TYPE = 'U'.
  APPEND GS_RECLIST TO GT_RECLIST.

  I_OBJTXT = 'Dear Sir/Madam.'.
  APPEND I_OBJTXT.
  I_OBJTXT = detail.
  APPEND I_OBJTXT.
  I_OBJTXT = ''.
  APPEND I_OBJTXT.
  I_OBJTXT = 'Thanks.'.
  APPEND I_OBJTXT.
  I_OBJTXT = 'Best Regards,'.
  APPEND I_OBJTXT.
  I_OBJTXT = 'For Bilcare Ltd.'.
  APPEND I_OBJTXT.

  DESCRIBE TABLE i_objtxt LINES gv_desc_lines.
*DESCRIBE TABLE i_objtxt LINES v_lines_txt.
  CLEAR I_OBJTXT.
  READ TABLE I_OBJTXT INDEX gv_desc_lines.
  if sy-subrc = 0.
* Document information.

GS_DOCDATA-obj_name = 'ord_accept'.
GS_DOCDATA-expiry_dat = sy-datum + 10.
GS_DOCDATA-obj_descr = 'Order Acceptance'.
GS_DOCDATA-sensitivty = 'F'. "Functional object
GS_DOCDATA-doc_size = gv_desc_lines * 255.
CLEAR Gs_OBJPACK-transf_bin.
* Start line of object header in transport packet

*    GS_OBJPACK-TRANSF_BIN = 'X'.
    GS_OBJPACK-doc_size = gv_desc_lines * 255.
    GS_OBJPACK-HEAD_START = 1.
    GS_OBJPACK-HEAD_NUM = 0.
    GS_OBJPACK-BODY_START = 1.
    GS_OBJPACK-BODY_NUM = gv_desc_lines.
    GS_OBJPACK-DOC_TYPE = 'RAW'.
*    GS_OBJPACK-OBJ_NAME = 'ORDER_ACCEPTANCE'.
*    GS_OBJPACK-OBJ_DESCR = 'ORDER_ACCEPTANCE.PDF'.
    APPEND GS_OBJPACK TO GT_OBJPACK.

*  GS_OBJPACK-HEAD_START = 1.
*    GS_OBJPACK-HEAD_NUM = 0.
*    GS_OBJPACK-BODY_START = 1.
*  GS_OBJPACK-doc_type = 'RAW'.
*APPEND GS_OBJPACK TO GT_OBJPACK.

  ENDIF.
*&amp;#149; Passing the SAP Script text lines to SAPoffice: Single List with Column Length 255 table
  CLEAR : GS_OBJBIN, GS_PDF_TAB.

  LOOP AT GT_PDF_TAB INTO GS_PDF_TAB.
    GV_POS = 255 - GV_LEN.
    IF GV_POS &amp;gt; 134. "length of pdf_table
      GV_POS = 134.
    ENDIF.
    GS_OBJBIN+GV_LEN = GS_PDF_TAB(GV_POS).
    GV_LEN = GV_LEN + GV_POS.
    IF GV_LEN = 255. "length of out (contents_bin)
      APPEND GS_OBJBIN TO GT_OBJBIN.
      CLEAR: GS_OBJBIN, GV_LEN.
      IF GV_POS &amp;lt; 134.
        GS_OBJBIN = GS_PDF_TAB+GV_POS.
        GV_LEN = 134 - GV_POS.
      ENDIF.
    ENDIF.
  ENDLOOP.
  IF GV_LEN &amp;gt; 0.
    APPEND GS_OBJBIN TO GT_OBJBIN.
  ENDIF.
*&amp;#149; Filling the details in SAPoffice: Description of Imported Object Components table
  DESCRIBE TABLE GT_OBJBIN LINES GV_TAB_LINES.

  CLEAR GS_OBJBIN.
  READ TABLE GT_OBJBIN INTO GS_OBJBIN INDEX GV_TAB_LINES.
    IF SY-SUBRC = 0.
    GS_OBJPACK-DOC_SIZE = ( GV_TAB_LINES - 1 ) * 255 + STRLEN( GS_OBJBIN ).
    GS_OBJPACK-TRANSF_BIN = 'X'.
    GS_OBJPACK-HEAD_START = 1.
    GS_OBJPACK-HEAD_NUM = 0.
    GS_OBJPACK-BODY_START = 1.
    GS_OBJPACK-BODY_NUM = GV_TAB_LINES.
    GS_OBJPACK-DOC_TYPE = 'PDF'.
    GS_OBJPACK-OBJ_NAME = 'ORDER_ACCEPTANCE'.
    GS_OBJPACK-OBJ_DESCR = 'Order Acceptance'.
    APPEND GS_OBJPACK TO GT_OBJPACK.
  ENDIF.
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      DOCUMENT_DATA                    = GS_DOCDATA
     PUT_IN_OUTBOX                    = 'X'
     COMMIT_WORK                      = 'X'
* IMPORTING
*   SENT_TO_ALL                      =
*   NEW_OBJECT_ID                    =
    TABLES
      PACKING_LIST                     = GT_OBJPACK
*   OBJECT_HEADER                    =  I_OBJTXT
     CONTENTS_BIN                     = GT_OBJBIN
     CONTENTS_TXT                     = I_OBJTXT
*   CONTENTS_HEX                     =
*   OBJECT_PARA                      =
*   OBJECT_PARB                      =
      RECEIVERS                        = GT_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 &amp;lt;&amp;gt; 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
*    WRITE 'Sent Successfully'.
    MESSAGE 'Sent Successfully' TYPE 'I'.
*      CALL TRANSACTION 'YMSL20'.
*      LEAVE LIST-PROCESSING.

  ENDIF.

  SUBMIT RSCONN01
  WITH MODE EQ 'INT'
  AND RETURN.
ENDFORM.                    " SEND_MAIL


&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;HTH&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Dhruv Shah&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 26 Mar 2008 09:57:40 GMT</pubDate>
    <dc:creator>dhruv_shah3</dc:creator>
    <dc:date>2008-03-26T09:57:40Z</dc:date>
    <item>
      <title>Regarding SO_DOCUMENT_SEND_API1 function module</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-so-document-send-api1-function-module/m-p/3589785#M864339</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Can anyone explain me the purpose of this function module and what are parameters to be passed to this function module?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Mar 2008 09:51:33 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-so-document-send-api1-function-module/m-p/3589785#M864339</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-03-26T09:51:33Z</dc:date>
    </item>
    <item>
      <title>Re: Regarding SO_DOCUMENT_SEND_API1 function module</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-so-document-send-api1-function-module/m-p/3589786#M864340</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please find the sample code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;report zsha_mail.&lt;/P&gt;&lt;P&gt;data: itcpo like itcpo,&lt;/P&gt;&lt;P&gt;      tab_lines like sy-tabix.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Variables for EMAIL functionality&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;data: maildata   like sodocchgi1.&lt;/P&gt;&lt;P&gt;data: mailpack   like sopcklsti1 occurs 2 with header line.&lt;/P&gt;&lt;P&gt;data: mailhead   like solisti1 occurs 1 with header line.&lt;/P&gt;&lt;P&gt;data: mailbin    like solisti1 occurs 10 with header line.&lt;/P&gt;&lt;P&gt;data: mailtxt    like solisti1 occurs 10 with header line.&lt;/P&gt;&lt;P&gt;data: mailrec    like somlrec90 occurs 0  with header line.&lt;/P&gt;&lt;P&gt;data: solisti1   like solisti1 occurs 0 with header line.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;perform send_form_via_email.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      FORM  SEND_FORM_VIA_EMAIL                                      *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;P&gt;form  send_form_via_email.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  clear:    maildata, mailtxt, mailbin, mailpack, mailhead, mailrec.&lt;/P&gt;&lt;P&gt;  refresh:  mailtxt, mailbin, mailpack, mailhead, mailrec.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Creation of the document to be sent File Name&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  maildata-obj_name = 'TEST'.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Mail Subject&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  maildata-obj_descr = 'Subject'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Mail Contents&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  mailtxt-line = 'Here is your file'.&lt;/P&gt;&lt;P&gt;  append mailtxt.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Prepare Packing List&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  perform prepare_packing_list.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Set recipient - email address here!!!&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  mailrec-receiver = 'you@yourcompany.com'.&lt;/P&gt;&lt;P&gt;  mailrec-rec_type  = 'U'.&lt;/P&gt;&lt;P&gt;  append mailrec.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Sending the document&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'&lt;/P&gt;&lt;P&gt;       exporting&lt;/P&gt;&lt;P&gt;            document_data              = maildata&lt;/P&gt;&lt;P&gt;            put_in_outbox              = ' '&lt;/P&gt;&lt;P&gt;       tables&lt;/P&gt;&lt;P&gt;            packing_list               = mailpack&lt;/P&gt;&lt;P&gt;            object_header              = mailhead&lt;/P&gt;&lt;P&gt;            contents_bin               = mailbin&lt;/P&gt;&lt;P&gt;            contents_txt               = mailtxt&lt;/P&gt;&lt;P&gt;            receivers                  = mailrec&lt;/P&gt;&lt;P&gt;       exceptions&lt;/P&gt;&lt;P&gt;            too_many_receivers         = 1&lt;/P&gt;&lt;P&gt;            document_not_sent          = 2&lt;/P&gt;&lt;P&gt;            operation_no_authorization = 4&lt;/P&gt;&lt;P&gt;            others                     = 99.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     Form  PREPARE_PACKING_LIST&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;P&gt;form prepare_packing_list.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  clear:    mailpack, mailbin, mailhead.&lt;/P&gt;&lt;P&gt;  refresh:  mailpack, mailbin, mailhead.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  describe table mailtxt lines tab_lines.&lt;/P&gt;&lt;P&gt;  read table mailtxt index tab_lines.&lt;/P&gt;&lt;P&gt;  maildata-doc_size = ( tab_lines - 1 ) * 255 + strlen( mailtxt ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Creation of the entry for the compressed document&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  clear mailpack-transf_bin.&lt;/P&gt;&lt;P&gt;  mailpack-head_start = 1.&lt;/P&gt;&lt;P&gt;  mailpack-head_num = 0.&lt;/P&gt;&lt;P&gt;  mailpack-body_start = 1.&lt;/P&gt;&lt;P&gt;  mailpack-body_num = tab_lines.&lt;/P&gt;&lt;P&gt;  mailpack-doc_type = 'RAW'.&lt;/P&gt;&lt;P&gt;  append mailpack.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  mailhead = 'TEST.TXT'.&lt;/P&gt;&lt;P&gt;  append mailhead.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;File 1&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  mailbin = 'This is file 1'.&lt;/P&gt;&lt;P&gt;  append mailbin.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  describe table mailbin lines tab_lines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  mailpack-transf_bin = 'X'.&lt;/P&gt;&lt;P&gt;  mailpack-head_start = 1.&lt;/P&gt;&lt;P&gt;  mailpack-head_num = 1.&lt;/P&gt;&lt;P&gt;  mailpack-body_start = 1.&lt;/P&gt;&lt;P&gt;  mailpack-body_num = tab_lines.&lt;/P&gt;&lt;P&gt;  mailpack-doc_type = 'TXT'.&lt;/P&gt;&lt;P&gt;  mailpack-obj_name = 'TEST1'.&lt;/P&gt;&lt;P&gt;  mailpack-obj_descr = 'Subject'.&lt;/P&gt;&lt;P&gt;  mailpack-doc_size = tab_lines * 255.&lt;/P&gt;&lt;P&gt;  append mailpack.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*File 2&lt;/P&gt;&lt;P&gt;  mailbin = 'This is file 2'.&lt;/P&gt;&lt;P&gt;  append mailbin.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  data: start type i.&lt;/P&gt;&lt;P&gt;  data: end type i.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  start = tab_lines + 1.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  describe table mailbin lines end.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  mailpack-transf_bin = 'X'.&lt;/P&gt;&lt;P&gt;  mailpack-head_start = 1.&lt;/P&gt;&lt;P&gt;  mailpack-head_num = 1.&lt;/P&gt;&lt;P&gt;  mailpack-body_start = start.&lt;/P&gt;&lt;P&gt;  mailpack-body_num = end.&lt;/P&gt;&lt;P&gt;  mailpack-doc_type = 'TXT'.&lt;/P&gt;&lt;P&gt;  mailpack-obj_name = 'TEST2'.&lt;/P&gt;&lt;P&gt;  mailpack-obj_descr = 'Subject'.&lt;/P&gt;&lt;P&gt;  mailpack-doc_size = tab_lines * 255.&lt;/P&gt;&lt;P&gt;  append mailpack.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Anversha&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Mar 2008 09:55:37 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-so-document-send-api1-function-module/m-p/3589786#M864340</guid>
      <dc:creator>anversha_s</dc:creator>
      <dc:date>2008-03-26T09:55:37Z</dc:date>
    </item>
    <item>
      <title>Re: Regarding SO_DOCUMENT_SEND_API1 function module</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-so-document-send-api1-function-module/m-p/3589787#M864341</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Use the following code which uses the same FM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can change the code according to your requirement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;

*&amp;amp;---------------------------------------------------------------------*
*&amp;amp; Report  YMSL_ORDER_ACCEPTANCE
*&amp;amp;
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;
*&amp;amp;
*&amp;amp;---------------------------------------------------------------------*

REPORT  YMSL_ORDER_ACCEPTANCE.

*********Variable Declarations *****************************
DATA: GV_FORM_NAME TYPE RS38L_FNAM, " Used to store the function module generated by Smartform
      GV_BIN_FILESIZE TYPE I, " Store the file size
      GV_POS TYPE I,
      GV_LEN TYPE I,
      GV_TAB_LINES TYPE I,
      gv_desc_lines type i.

********Constants *******************************************
DATA : GC_TEXT(11) TYPE C VALUE 'Form Output',
       GC_TST(3) TYPE C VALUE 'TST',
       GC_TESTING(20) TYPE C VALUE 'Order Acceptance'.
*********Work Area Declarations *****************************
DATA: GS_DOCDATA TYPE SODOCCHGI1, " Data of an object which can be changed
      GS_CTRLOP TYPE SSFCTRLOP, " Smart Forms: Control structure
      GS_OUTOPT TYPE SSFCOMPOP, " SAP Smart Forms: Smart Composer (transfer) options
      GS_OTFDATA TYPE SSFCRESCL, " Smart Forms: Return value at end of form printing
      GS_RECLIST TYPE SOMLRECI1, " SAPoffice: Structure of the API Recipient List
      GS_PDF_TAB TYPE TLINE, " Workarea for SAP Script Text Lines
      GS_OBJBIN TYPE SOLISTI1, " SAPoffice: Single List with Column Length 255
      GS_OBJPACK TYPE SOPCKLSTI1. " SAPoffice: Description of Imported Object Components
DATA : w_doc_chng typE sodocchgi1.
*********Internal tables Declarations *****************************
DATA : I_OBJTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.
DATA: GT_RECLIST TYPE TABLE OF SOMLRECI1, " SAPoffice: Structure of the API Recipient List
      GT_PDF_TAB TYPE TABLE OF TLINE, " SAPscript: Text Lines
      GT_OTF TYPE TABLE OF ITCOO, " OTF Structure
      GT_OBJBIN TYPE TABLE OF SOLISTI1, " SAPoffice: Single List with Column Length 255
      GT_OBJPACK TYPE TABLE OF SOPCKLSTI1. " SAPoffice: Description of Imported Object Components


******
DATA : BEGIN OF IT_ADR6 OCCURS 0,
          SMTP_ADDR TYPE ADR6-SMTP_ADDR,
        END OF IT_ADR6.
DATA : W_FILE_NAME TYPE STRING,
      W_FILE_PATH TYPE STRING,
      W_FULL_PATH TYPE STRING.



CLEAR : GV_FORM_NAME,
        GS_CTRLOP,
        GS_OUTOPT,
        GS_OTFDATA,
        GV_BIN_FILESIZE,
        GV_POS,
        GV_LEN,
        GV_TAB_LINES.

SELECTION-SCREEN:  BEGIN OF SCREEN 1001 AS WINDOW  TITLE scr_ttl .

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TXT_B1 NO INTERVALS.
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(15) TX_VBELN.
PARAMETER : P_VBELN TYPE VBAK-VBELN .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B1.

*SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TXT_B2 .
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: R_OUT RADIOBUTTON GROUP R1 DEFAULT 'X' USER-COMMAND RAD11 .
SELECTION-SCREEN COMMENT 5(20) TXT_OUT.  "  roles by t-code
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETER R_PDF RADIOBUTTON GROUP R1 .
SELECTION-SCREEN COMMENT 5(20) TXT_PDF.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETER R_MAIL RADIOBUTTON GROUP R1 .
SELECTION-SCREEN COMMENT 5(15) TXT_MAIL.
*SELECTION-SCREEN END OF LINE.
*SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 20(7) TXT_MAL1.
PARAMETER : P_MAIL TYPE ADR6-SMTP_ADDR MODIF ID M1.
SELECTION-SCREEN END OF LINE.

*SELECTION-SCREEN END OF BLOCK B2.

SELECTION-SCREEN: END OF SCREEN 1001 .

CALL SELECTION-SCREEN 1001 STARTING AT 20 5 ENDING AT 105 10.

*SET PF-STATUS 'STATUS'.

INITIALIZATION.

  TX_VBELN = 'Order'.
  TXT_B1 = 'Selection Criteria '.
*  TXT_B2 = 'Output Criteria '.
  scr_ttl = 'Order Acceptance'.
  TXT_OUT = 'Print Output'.
  TXT_PDF = 'Save To PDF'.
  TXT_MAIL = 'Mail the Output'.
  TXT_MAL1 = 'E-mail'.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF R_MAIL &amp;lt;&amp;gt; 'X'.
      IF SCREEN-GROUP1 = 'M1'.
*        SCREEN-INVISIBLE =  1.
        SCREEN-INPUT = 0. " Disable for input.
        MODIFY SCREEN.
      ENDIF.
    ENDIF.
  ENDLOOP.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MAIL.
  PERFORM TABLE_HELP.

START-OF-SELECTION..

  IF P_VBELN IS NOT INITIAL.
    PERFORM GET_SF.
    IF R_PDF = 'X' .
      PERFORM CONVERT_OTF.
      PERFORM SAVE_DIALOG.
      PERFORM DOWNLOAD.
    ELSEIF R_MAIL = 'X'.
      IF P_MAIL IS NOT INITIAL.
       PERFORM CONVERT_OTF.
       PERFORM SEND_MAIL.
      ELSE.
        MESSAGE 'Please Enter Email Address' TYPE 'S'.
*         CALL TRANSACTION 'YMSL20'.
*         LEAVE LIST-PROCESSING.
      ENDIF.
    ENDIF.
  ELSE.
    MESSAGE 'Please Enter Order No' TYPE 'S'.
*      CALL TRANSACTION 'YMSL20'.
*      LEAVE LIST-PROCESSING.

ENDIF.
END-OF-SELECTION.
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  TABLE_HELP
*&amp;amp;---------------------------------------------------------------------*
FORM TABLE_HELP .
  IF R_MAIL = 'X'.
    SELECT SMTP_ADDR FROM ADR6 INTO TABLE IT_ADR6.

    SORT IT_ADR6.
    DELETE ADJACENT DUPLICATES FROM IT_ADR6 COMPARING ALL FIELDS.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
*     DDIC_STRUCTURE         = ' '
        RETFIELD               = 'IT_ADR6-SMTP_ADDR'
*     PVALKEY                = ' '
       DYNPPROG               = SY-REPID
       DYNPNR                 = SY-DYNNR
       DYNPROFIELD            = 'EMAIL'
*     STEPL                  = 0
       WINDOW_TITLE           = 'SELECT MAIL ADDRESS'
*     VALUE                  = ' '
       VALUE_ORG              = 'S'
*     MULTIPLE_CHOICE        = ' '
*     DISPLAY                = ' '
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM          = ' '
*     MARK_TAB               =
*   IMPORTING
*     USER_RESET             =
      TABLES
        VALUE_TAB              = IT_ADR6
*     FIELD_TAB              =
*     RETURN_TAB             =
*     DYNPFLD_MAPPING        =
*   EXCEPTIONS
*     PARAMETER_ERROR        = 1
*     NO_VALUES_FOUND        = 2
*     OTHERS                 = 3
              .
    IF SY-SUBRC &amp;lt;&amp;gt; 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

  ENDIF.
ENDFORM.                    " TABLE_HELP
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  GET_SF
*&amp;amp;---------------------------------------------------------------------*
FORM GET_SF .
*&amp;#149; Generate Function Module name
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = 'YMSL_ORD_ACCEPT'
    IMPORTING
      FM_NAME            = GV_FORM_NAME
    EXCEPTIONS
      NO_FORM            = 1
      NO_FUNCTION_MODULE = 2
      OTHERS             = 3.
  IF SY-SUBRC  &amp;lt;&amp;gt; 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*&amp;#149; Assigning values to Form Control Structure and Form Composer
  IF R_OUT &amp;lt;&amp;gt; 'X'.
    GS_CTRLOP-GETOTF = 'X'.
    GS_CTRLOP-NO_DIALOG = 'X'.
    GS_OUTOPT-TDNOPREV = 'X'.
  ENDIF.

  CALL FUNCTION GV_FORM_NAME
    EXPORTING
*   ARCHIVE_INDEX              =
*   ARCHIVE_INDEX_TAB          =
*   ARCHIVE_PARAMETERS         =
      CONTROL_PARAMETERS         = GS_CTRLOP
*   MAIL_APPL_OBJ              =
*   MAIL_RECIPIENT             =
*   MAIL_SENDER                =
      OUTPUT_OPTIONS             = GS_OUTOPT
      USER_SETTINGS              = 'X'
      TEMP_VBELN                 =  P_VBELN
   IMPORTING
*   DOCUMENT_OUTPUT_INFO       =
      JOB_OUTPUT_INFO            = GS_OTFDATA
*   JOB_OUTPUT_OPTIONS         =
   EXCEPTIONS
     FORMATTING_ERROR           = 1
     INTERNAL_ERROR             = 2
     SEND_ERROR                 = 3
     USER_CANCELED              = 4
     OTHERS                     = 5
            .
  IF SY-SUBRC &amp;lt;&amp;gt; 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " GET_SF
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  CONVERT_OTF
*&amp;amp;---------------------------------------------------------------------*
FORM CONVERT_OTF .
*&amp;#149; Assigning the OTFDATA to OTF Structure table
  CLEAR GT_OTF.
  GT_OTF[] = GS_OTFDATA-OTFDATA[].
*&amp;#149; Convert the OTF DATA to SAP Script Text lines
  CLEAR GT_PDF_TAB.

  CALL FUNCTION 'CONVERT_OTF'
   EXPORTING
     FORMAT                      = 'PDF'
     MAX_LINEWIDTH               = 132
*   ARCHIVE_INDEX               = ' '
*   COPYNUMBER                  = 0
*   ASCII_BIDI_VIS2LOG          = ' '
*   PDF_DELETE_OTFTAB           = ' '
   IMPORTING
     BIN_FILESIZE                = GV_BIN_FILESIZE
*   BIN_FILE                    =
    TABLES
      OTF                         = GT_OTF
      LINES                       = GT_PDF_TAB
   EXCEPTIONS
     ERR_MAX_LINEWIDTH           = 1
     ERR_FORMAT                  = 2
     ERR_CONV_NOT_POSSIBLE       = 3
     ERR_BAD_OTF                 = 4
     OTHERS                      = 5
            .
  IF SY-SUBRC &amp;lt;&amp;gt; 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
*
*t_otf[] = t_otf_from_fm-otfdata[].
*
** Function Module CONVERT_OTF is used to convert the OTF format to PDF
*
*CALL FUNCTION 'CONVERT_OTF'
*EXPORTING
*FORMAT = 'PDF'
*MAX_LINEWIDTH = 132
** ARCHIVE_INDEX = ' '
** COPYNUMBER = 0
** ASCII_BIDI_VIS2LOG = ' '
** PDF_DELETE_OTFTAB = ' '
*IMPORTING
*BIN_FILESIZE = W_bin_filesize
** BIN_FILE =
*TABLES
*otf = T_OTF
*lines = T_pdf_tab
*EXCEPTIONS
*ERR_MAX_LINEWIDTH = 1
*ERR_FORMAT = 2
*ERR_CONV_NOT_POSSIBLE = 3
*ERR_BAD_OTF = 4
*OTHERS = 5
*.
*IF sy-subrc &amp;lt;&amp;gt; 0.
*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*ENDIF.


ENDFORM.                    " CONVERT_OTF
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  SAVE_DIALOG
*&amp;amp;---------------------------------------------------------------------*
FORM SAVE_DIALOG .
* To display File SAVE dialog window
  CALL METHOD CL_GUI_FRONTEND_SERVICES=&amp;gt;FILE_SAVE_DIALOG
   EXPORTING
   WINDOW_TITLE = 'Download to PDF '
* DEFAULT_EXTENSION = '(*.PDF)'
   DEFAULT_FILE_NAME = 'file.pdf'
   FILE_FILTER = 'PDF Format(*.PDF)'
   INITIAL_DIRECTORY = 'C:Documents and SettingsAdministratorDesktop'
* WITH_ENCODING =
   PROMPT_ON_OVERWRITE = 'X'
  CHANGING
  FILENAME = W_FILE_NAME
  PATH = W_FILE_PATH
  FULLPATH = W_FULL_PATH
* USER_ACTION =
* FILE_ENCODING =
  EXCEPTIONS
  CNTL_ERROR = 1
  ERROR_NO_GUI = 2
  NOT_SUPPORTED_BY_GUI = 3
  OTHERS = 4
  .
  IF SY-SUBRC &amp;lt;&amp;gt; 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " SAVE_DIALOG
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  DOWNLOAD
*&amp;amp;---------------------------------------------------------------------*
FORM DOWNLOAD .
* Use the FM GUI_DOWNLOAD to download the generated PDF file onto the
* presentation server

  CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
  BIN_FILESIZE = GV_BIN_FILESIZE
  FILENAME = W_FULL_PATH
  FILETYPE = 'BIN'
* APPEND = ' '
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* TRUNC_TRAILING_BLANKS_EOL = 'X'
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* IMPORTING
* FILELENGTH =
  TABLES
  DATA_TAB = GT_PDF_TAB
* FIELDNAMES =
* EXCEPTIONS
* FILE_WRITE_ERROR = 1
* NO_BATCH = 2
* GUI_REFUSE_FILETRANSFER = 3
* INVALID_TYPE = 4
* NO_AUTHORITY = 5
* UNKNOWN_ERROR = 6
* HEADER_NOT_ALLOWED = 7
* SEPARATOR_NOT_ALLOWED = 8
* FILESIZE_NOT_ALLOWED = 9
* HEADER_TOO_LONG = 10
* DP_ERROR_CREATE = 11
* DP_ERROR_SEND = 12
* DP_ERROR_WRITE = 13
* UNKNOWN_DP_ERROR = 14
* ACCESS_DENIED = 15
* DP_OUT_OF_MEMORY = 16
* DISK_FULL = 17
* DP_TIMEOUT = 18
* FILE_NOT_FOUND = 19
* DATAPROVIDER_EXCEPTION = 20
* CONTROL_FLUSH_ERROR = 21
* OTHERS = 22
  .
  IF SY-SUBRC &amp;lt;&amp;gt; 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " DOWNLOAD
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  SEND_MAIL
*&amp;amp;---------------------------------------------------------------------*

FORM SEND_MAIL .
***changes by rajan
*DATA : v_first TYPE USER_ADDR-NAME_FIRST,
*      V_LAST   TYPE USER_ADDR-NAME_LAST.
DATA : detail TYPE STRING.
*
*SELECT SINGLE NAME_FIRST NAME_LAST FROM
*  USER_ADDR INTO (V_FIRST,V_LAST)
*  WHERE BNAME = syst-UNAME.

*  CONCATENATE v_first V_LAST INTO detail SEPARATED BY space.
data : v_po_no TYPE vbkd-bstkd,
      v_po_date TYPE vbkd-bstdk.

data : day TYPE STRING,
       month type STRING,
       year  TYPE STRING.

data : date TYPE STRING.


SELECT SINGLE BSTKD BSTDK
  FROM VBKD
  INTO (v_po_no,v_po_date)
  WHERE VBELN = P_VBELN.

day = v_po_date+6(2).
month = v_po_date+4(2).
year = v_po_date+0(4).

CONCATENATE day '/' month '/' year INTO date.

  CONCATENATE 'Please Find attached Order Acceptance against your P.O.No.' v_po_no 'dated' date  '.' INTO detail SEPARATED BY space.
**&amp;#149; Assigning the Description of the object sent in the mail
*  CLEAR GS_DOCDATA.
*  GS_DOCDATA-OBJ_NAME = GC_TST.
*  GS_DOCDATA-OBJ_DESCR = GC_TESTING.

*&amp;#149; Assigning the email id to Structure of the API Recipient List table
  CLEAR : GT_RECLIST, GS_RECLIST.
  GS_RECLIST-RECEIVER =  P_MAIL.       " 
  GS_RECLIST-REC_TYPE = 'U'.
  APPEND GS_RECLIST TO GT_RECLIST.

  I_OBJTXT = 'Dear Sir/Madam.'.
  APPEND I_OBJTXT.
  I_OBJTXT = detail.
  APPEND I_OBJTXT.
  I_OBJTXT = ''.
  APPEND I_OBJTXT.
  I_OBJTXT = 'Thanks.'.
  APPEND I_OBJTXT.
  I_OBJTXT = 'Best Regards,'.
  APPEND I_OBJTXT.
  I_OBJTXT = 'For Bilcare Ltd.'.
  APPEND I_OBJTXT.

  DESCRIBE TABLE i_objtxt LINES gv_desc_lines.
*DESCRIBE TABLE i_objtxt LINES v_lines_txt.
  CLEAR I_OBJTXT.
  READ TABLE I_OBJTXT INDEX gv_desc_lines.
  if sy-subrc = 0.
* Document information.

GS_DOCDATA-obj_name = 'ord_accept'.
GS_DOCDATA-expiry_dat = sy-datum + 10.
GS_DOCDATA-obj_descr = 'Order Acceptance'.
GS_DOCDATA-sensitivty = 'F'. "Functional object
GS_DOCDATA-doc_size = gv_desc_lines * 255.
CLEAR Gs_OBJPACK-transf_bin.
* Start line of object header in transport packet

*    GS_OBJPACK-TRANSF_BIN = 'X'.
    GS_OBJPACK-doc_size = gv_desc_lines * 255.
    GS_OBJPACK-HEAD_START = 1.
    GS_OBJPACK-HEAD_NUM = 0.
    GS_OBJPACK-BODY_START = 1.
    GS_OBJPACK-BODY_NUM = gv_desc_lines.
    GS_OBJPACK-DOC_TYPE = 'RAW'.
*    GS_OBJPACK-OBJ_NAME = 'ORDER_ACCEPTANCE'.
*    GS_OBJPACK-OBJ_DESCR = 'ORDER_ACCEPTANCE.PDF'.
    APPEND GS_OBJPACK TO GT_OBJPACK.

*  GS_OBJPACK-HEAD_START = 1.
*    GS_OBJPACK-HEAD_NUM = 0.
*    GS_OBJPACK-BODY_START = 1.
*  GS_OBJPACK-doc_type = 'RAW'.
*APPEND GS_OBJPACK TO GT_OBJPACK.

  ENDIF.
*&amp;#149; Passing the SAP Script text lines to SAPoffice: Single List with Column Length 255 table
  CLEAR : GS_OBJBIN, GS_PDF_TAB.

  LOOP AT GT_PDF_TAB INTO GS_PDF_TAB.
    GV_POS = 255 - GV_LEN.
    IF GV_POS &amp;gt; 134. "length of pdf_table
      GV_POS = 134.
    ENDIF.
    GS_OBJBIN+GV_LEN = GS_PDF_TAB(GV_POS).
    GV_LEN = GV_LEN + GV_POS.
    IF GV_LEN = 255. "length of out (contents_bin)
      APPEND GS_OBJBIN TO GT_OBJBIN.
      CLEAR: GS_OBJBIN, GV_LEN.
      IF GV_POS &amp;lt; 134.
        GS_OBJBIN = GS_PDF_TAB+GV_POS.
        GV_LEN = 134 - GV_POS.
      ENDIF.
    ENDIF.
  ENDLOOP.
  IF GV_LEN &amp;gt; 0.
    APPEND GS_OBJBIN TO GT_OBJBIN.
  ENDIF.
*&amp;#149; Filling the details in SAPoffice: Description of Imported Object Components table
  DESCRIBE TABLE GT_OBJBIN LINES GV_TAB_LINES.

  CLEAR GS_OBJBIN.
  READ TABLE GT_OBJBIN INTO GS_OBJBIN INDEX GV_TAB_LINES.
    IF SY-SUBRC = 0.
    GS_OBJPACK-DOC_SIZE = ( GV_TAB_LINES - 1 ) * 255 + STRLEN( GS_OBJBIN ).
    GS_OBJPACK-TRANSF_BIN = 'X'.
    GS_OBJPACK-HEAD_START = 1.
    GS_OBJPACK-HEAD_NUM = 0.
    GS_OBJPACK-BODY_START = 1.
    GS_OBJPACK-BODY_NUM = GV_TAB_LINES.
    GS_OBJPACK-DOC_TYPE = 'PDF'.
    GS_OBJPACK-OBJ_NAME = 'ORDER_ACCEPTANCE'.
    GS_OBJPACK-OBJ_DESCR = 'Order Acceptance'.
    APPEND GS_OBJPACK TO GT_OBJPACK.
  ENDIF.
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      DOCUMENT_DATA                    = GS_DOCDATA
     PUT_IN_OUTBOX                    = 'X'
     COMMIT_WORK                      = 'X'
* IMPORTING
*   SENT_TO_ALL                      =
*   NEW_OBJECT_ID                    =
    TABLES
      PACKING_LIST                     = GT_OBJPACK
*   OBJECT_HEADER                    =  I_OBJTXT
     CONTENTS_BIN                     = GT_OBJBIN
     CONTENTS_TXT                     = I_OBJTXT
*   CONTENTS_HEX                     =
*   OBJECT_PARA                      =
*   OBJECT_PARB                      =
      RECEIVERS                        = GT_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 &amp;lt;&amp;gt; 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
*    WRITE 'Sent Successfully'.
    MESSAGE 'Sent Successfully' TYPE 'I'.
*      CALL TRANSACTION 'YMSL20'.
*      LEAVE LIST-PROCESSING.

  ENDIF.

  SUBMIT RSCONN01
  WITH MODE EQ 'INT'
  AND RETURN.
ENDFORM.                    " SEND_MAIL


&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;HTH&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Dhruv Shah&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Mar 2008 09:57:40 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/regarding-so-document-send-api1-function-module/m-p/3589787#M864341</guid>
      <dc:creator>dhruv_shah3</dc:creator>
      <dc:date>2008-03-26T09:57:40Z</dc:date>
    </item>
  </channel>
</rss>

