Smartform PDF sending as email

Hi,
I had a requirement like sending smartform o/p as PDF to multiple email-id's.
I had used the FM's CONVERT_OTF and SO_NEW_DOCUMENT_ATT_SEND_API1 Function module's.
Now I am able to receive the emails but unable to open the PDF document It is saying that the PDF was not decoded properly. Kindly help me out. I had also tried it using the GUI_DOWNLOAD after the CONVERT_OTF Function module. and was able to open the PDF format.
Kindly help me out.
Thanks & Regards,
Sridhar.

Compare your part of code with the below given code.
*& Report YSSN_SIMPLE_SMARTFORM *
report zhr_bhaskar_pdf_to_email message-id zmsg.
parameters: p_vbeln type vbak-vbeln default '35'.
data: it_items type table of vbap,
v_fm_name type rs38l_fnam,
v_tot_lines type i,
v_sy_tabix type i,
output_data type ssfcrescl. " To hold Output information
constants:
c_sep type c value '-', " Value -
c_x type c value 'X', " Value X
c_space type c value ' '. " Space
*****MAIL START
include .
data: g_mail_rec_obj type swotobjid,
g_mail_sen_obj type swotobjid,
g_mail_app_obj type swotobjid,
g_cont_par type ssfctrlop,
folder type swc_object,
begin of sofmfol_key,
foldertype like sofm-foltp,
folderyear like sofm-folyr,
foldernumber like sofm-folno,
type like sofm-doctp,
year like sofm-docyr,
number like sofm-docno,
forwarder like soub-usrnam,
end of sofmfol_key,
bor_key like swotobjid-objkey,
g_mail TYPE ppfdmailad VALUE '[email protected]',
g_mail type so_name value '[email protected]',
g_mail TYPE ppfdmailad VALUE '[email protected]' ,
g_mail TYPE ppfdmailad VALUE '[email protected]' ,
g_rectype type so_escape value 'U'. " 'B'.
data: job_output_info type ssfcrescl,
hotfdata like itcoo occurs 1 with header line,
htline like tline occurs 1 with header line,
x_objcont like soli occurs 1 with header line,
ld_packing_list like soxpl occurs 1 with header line,
x_object_hd_change like sood1 occurs 1 with header line,
x_objhead like soli occurs 1 with header line,
x_receivers like soos1 occurs 1 with header line,
format_pdf(10) value 'PDF',
doc_size(12) type c,
hltlines type i,
htabix like sy-tabix,
fle1(2) type p,
fle2(2) type p,
off1 type p,
hfeld(500) type c.
tables: soud.
*****MAIL END
select *
into table it_items
from vbap
where vbeln = p_vbeln.
if it_items[] is initial.
exit.
endif.
perform call_smartform.
*& Form call_smartform
text
--> p1 text
<-- p2 text
form call_smartform .
*DATA: lx_control_parameters TYPE SSFCTRLOP,
lx_OUTPUT_OPTIONS type SSFCOMPOP.
lx_OUTPUT_OPTIONS-TDIMMED = ' '.
lx_OUTPUT_OPTIONS-TDfinal = 'X'.
lx_OUTPUT_OPTIONS-TDDELETE = 'X'.
lx_CONTROL_PARAMETERS-NO_CLOSE = 'X'.
lx_CONTROL_PARAMETERS-NO_OPEN = ' '.
data: x_ssfcompop type ssfcompop,
x_ssfctrlop like ssfctrlop,
x_ssfcrescl type ssfcrescl.
**MAIL
g_cont_par-langu = sy-langu.
g_cont_par-no_dialog = 'X'.
g_cont_par-getotf = 'X'.
g_cont_par-device = 'MAIL'.
Get BOR-Objects for Recipient, Sender und Applikation
perform mail_recipient_object changing g_mail_rec_obj.
perform mail_sender_object changing g_mail_sen_obj.
perform mail_appl_object changing g_mail_app_obj.
**MAIL
*--Internal table is having more than 1 record
if v_tot_lines gt 1.
if v_sy_tabix = 1.
*--For first record of table
x_ssfctrlop-no_open = c_space.
x_ssfctrlop-no_close = c_x.
elseif v_sy_tabix = v_tot_lines.
*--For last record of table
x_ssfctrlop-no_open = c_x.
x_ssfctrlop-no_close = c_space.
else.
x_ssfctrlop-no_open = c_x.
x_ssfctrlop-no_close = c_x.
endif.
endif.
IF r_previ = c_x.
x_ssfctrlop-preview = c_x.
x_ssfctrlop-getotf = c_x.
ENDIF.
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = 'YSSN_SMARTFORM'
VARIANT = ' '
DIRECT_CALL = ' '
importing
fm_name = v_fm_name
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3
if sy-subrc <> 0.
message i000 with 'Smart form module name failure'.
exit.
endif.
CALL FUNCTION '/1BCDWB/SF00000199'
call function v_fm_name
exporting
ARCHIVE_INDEX =
ARCHIVE_INDEX_TAB =
ARCHIVE_PARAMETERS =
control_parameters = g_cont_par
mail_appl_obj = g_mail_app_obj
mail_recipient = g_mail_rec_obj
mail_sender = g_mail_sen_obj
OUTPUT_OPTIONS = lx_OUTPUT_OPTIONS
USER_SETTINGS = 'X'
t_vbap = it_items
IMPORTING
DOCUMENT_OUTPUT_INFO =
job_output_info = job_output_info
JOB_OUTPUT_OPTIONS =
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5
perform send_pdf_mail.
endform. " call_smartform
*& Form send_pdf_mail
text
--> p1 text
<-- p2 text
form send_pdf_mail .
data ld_binfile type xstring.
pdf_table type rcl_bag_tline,
data: ld_originator like soos1-recextnam.
convert form
loop at job_output_info-otfdata into hotfdata.
append hotfdata.
endloop.
call function 'CONVERT_OTF'
exporting
format = format_pdf
max_linewidth = 132
importing
bin_filesize = doc_size
bin_file = ld_binfile
tables
otf = output_data-otfdata
lines = htline
exceptions
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
others = 4.
*-Itab 134 Zeichen nach 255 Zeichen überführen
describe table htline lines hltlines.
describe field htline length fle1 in character mode.
describe field x_objcont length fle2 in character mode.
loop at htline.
htabix = sy-tabix.
move htline to hfeld+off1.
if htabix = hltlines.
fle1 = strlen( htline ).
endif.
off1 = off1 + fle1.
if off1 ge fle2.
clear x_objcont.
x_objcont = hfeld(fle2).
append x_objcont.
shift hfeld by fle2 places.
off1 = off1 - fle2.
endif.
if htabix = hltlines.
if off1 gt 0.
clear x_objcont.
x_objcont = hfeld(off1).
append x_objcont.
endif.
endif.
endloop.
x_object_hd_change-objnam = 'EMAIL'.
x_object_hd_change-objdes = 'Smart Form'.
x_object_hd_change-objla = sy-langu.
x_object_hd_change-objsns = 'O'.
x_object_hd_change-objlen = doc_size.
x_object_hd_change-file_ext = 'TXT'.
ld_packing_list-transf_bin = 'X'.
ld_packing_list-head_start = 1.
ld_packing_list-head_num = 0.
ld_packing_list-body_start = 1.
describe table x_objcont lines ld_packing_list-body_num.
ld_packing_list-objtp = 'EXT'.
ld_packing_list-objdes = 'Smart Form'.
ld_packing_list-objla = sy-langu.
ld_packing_list-objlen = doc_size.
ld_packing_list-file_ext = 'PDF'.
append ld_packing_list.
x_receivers-recextnam = g_mail.
x_receivers-recesc = 'E'.
x_receivers-sndart = 'INT'.
append x_receivers.
ld_originator = '[email protected]'.
ld_originator = FSABE-USRNAM.
call function 'SO_OBJECT_SEND'
exporting
object_hd_change = x_object_hd_change
object_type = 'RAW'
originator_type = 'B' "Einfügen
originator = ld_originator "Einfügen
tables
objcont = ld_text
receivers = x_receivers
packing_list = ld_packing_list
att_cont = x_objcont
att_head = x_objhead
exceptions
active_user_not_exist = 1
communication_failure = 2
component_not_available = 3
folder_not_exist = 4
folder_no_authorization = 5
forwarder_not_exist = 6
note_not_exist = 7
object_not_exist = 8
object_not_sent = 9
object_no_authorization = 10
object_type_not_exist = 11
operation_no_authorization = 12
owner_not_exist = 13
parameter_error = 14
substitute_not_active = 15
substitute_not_defined = 16
system_failure = 17
too_much_receivers = 18
user_not_exist = 19
x_error = 20
others = 21.
endform. " send_pdf_mail
*& Form mail_sender_object
text
<--P_G_MAIL_SEN_OBJ text
form mail_sender_object changing p_mail_sen_obj.
call function 'CREATE_SENDER_OBJECT_PPF'
exporting
ip_sender = sy-uname
importing
ep_sender_id = p_mail_sen_obj
exceptions
invalid_sender = 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.
endform. " mail_sender_object
*& Form mail_appl_object
text
<--P_G_MAIL_APP_OBJ text
form mail_appl_object changing p_mail_app_obj.
SELECT * FROM soud WHERE sapnam LIKE sy-uname AND deleted = ' '.
ENDSELECT.
IF sy-subrc NE 0.
call function 'SO_USER_AUTOMATIC_INSERT'
exporting
sapname = sy-uname
exceptions
no_insert = 1
sap_name_exist = 2
x_error = 3
others = 4.
if sy-subrc ne 0.
clear soud.
else.
select * from soud where sapnam like sy-uname and deleted = ' '.
endselect.
endif.
ENDIF.
clear sofmfol_key.
sofmfol_key-type = 'FOL'.
sofmfol_key-year = soud-inbyr.
sofmfol_key-number = soud-inbno.
bor_key = sofmfol_key.
if not bor_key is initial.
swc_create_object folder 'SOFMFOL' bor_key.
if sy-subrc = 0.
swc_object_to_persistent folder p_mail_app_obj.
if sy-subrc ne 0.
clear p_mail_app_obj.
endif.
endif.
else.
clear p_mail_app_obj.
endif.
endform. " mail_appl_object
*& Form mail_recipient_object
text
<--P_G_MAIL_REC_OBJ text
form mail_recipient_object changing p_mail_rec_obj.
call function 'CREATE_RECIPIENT_OBJ_PPF'
exporting
IP_COUNTRY =
IP_FAXNO =
ip_mailaddr = g_mail
ip_type_id = g_rectype " 'U'
importing
ep_recipient_id = p_mail_rec_obj
EP_ADDRESS =
ET_RECIPIENT =
exceptions
invalid_recipient = 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.
endform. " mail_recipient_object

Similar Messages

  • Exporting activity data as a PDF / sending as email from within package

    Hello,
    We are currently developing an E-learning package which involves the learners building up a check list on an "ipad" as they go through the course, which we would like them to then be able to save at the end of the course so they can review it later.
    We've managed to implement a print function, however we really need them to be able to save this data in some way.  Does any one know how we could push this data back to the LMS so it can somehow be downloaded and saved (in a good, branded format) or even better how we could make it into a PDF so it can be saved from with in the SCORM package or even in some way emailed.
    Any help would be much appreciated.
    Sam

    hi
    The funnier part is that
    u can actually type in the sender's email id irrespective of the mail host used
    Like @hotmail.com,@yahoo.com etc.
    The receiver will get the mails from the email id that u wrote .
    The problem u r facing is becoz of the incorrect mail host server ip address
    Try to get in touch with the network admin for the mail server ip address
    other way is
    get the name it would be like
    smtp.domain name .
    hope that helps

  • Background Submit to Spool,  convert spool to PDF send via email

    I am calling an ABAP in the background. this abap makes use of a custom table as the main driver ie on each change of vendor within this custom table I want to create a spool and email the spool - the spool is suppossed to be created via a submit RMCB0300  with screen selection to to sap-spool and return. I then want the program to take the spool convert it to PDF and email.
    Problems I am encountering:
    1. writing to the spool via background ABAP  as follows
       submit RMCB0300 with selection-table rspar
                  to sap-spool
                  spool parameters %_print
                 archive parameters %_archive
                 without spool dynpro and return.
    Doesn't appear to be creating the spool - rspar is populated.
    2. Best way to retrieve the correct spool number.
    3. how to successfully convert PDF output after CONVERT_ABAPSPOOLJOB_2_PDF for email attachment - if this returns IT_PDF_OUTPUT.
    is this the best way to do it:
    Loop at IT_PDF_OUTPUT
          Translate IT_PDF_OUTPUT using ' ~'.
          concatenate gd_buffer it_pdf_output into gd_buffer
        endloop.
       translate gd_buffer using '~ '
    Do it_mess_att = gd_buffer.
         append it_mess_att.
         shift gd_buffer left by 255 places
         if gd_buffer is initial
           exit.
         endif.
    enddo.
    Thanks
    Mark
    Edited by: Matt on Apr 2, 2009 11:03 AM - amended title with formatting problems.

    Please find the code for converting SPool to pdf and sending mail
    CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
         EXPORTING
           SRC_SPOOLID              = LV_MI_RQIDENT
           NO_DIALOG                = 'X'
           DST_DEVICE               = LV_PRINT_PARMS-PDEST
         IMPORTING
           PDF_BYTECOUNT            = LV_BYTECOUNT
           PDF_SPOOLID              = LV_RQIDENT
         TABLES
           PDF                      = LT_MTAB_PDF
         EXCEPTIONS
           ERR_NO_ABAP_SPOOLJOB     = 1
           ERR_NO_SPOOLJOB          = 2
           ERR_NO_PERMISSION        = 3
           ERR_CONV_NOT_POSSIBLE    = 4
           ERR_BAD_DESTDEVICE       = 5
           USER_CANCELLED           = 6
           ERR_SPOOLERROR           = 7
           ERR_TEMSEERROR           = 8
           ERR_BTCJOB_OPEN_FAILED   = 9
           ERR_BTCJOB_SUBMIT_FAILED = 10
           ERR_BTCJOB_CLOSE_FAILED  = 11
           OTHERS                   = 12.
       IF SY-SUBRC <> 0.
         MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
       ENDIF.
       LOOP AT LT_MTAB_PDF INTO LWA_MTAB_PDF.
         TRANSLATE LWA_MTAB_PDF USING ' ~'.
         CONCATENATE LV_GD_BUFFER LWA_MTAB_PDF INTO LV_GD_BUFFER.
         CLEAR LWA_MTAB_PDF.
       ENDLOOP.
       TRANSLATE LV_GD_BUFFER USING '~ '.
       DO.
         LWA_MESS_ATT = LV_GD_BUFFER.
         APPEND LWA_MESS_ATT TO LT_MESS_ATT.
         CLEAR LWA_MESS_ATT.
         SHIFT LV_GD_BUFFER LEFT BY 255 PLACES.
         IF LV_GD_BUFFER IS INITIAL.
           EXIT.
         ENDIF.
       ENDDO.
       CLEAR:  LWA_RECLIST, LT_RECLIST[],
               LT_OBJHEAD, LT_OBJHEAD[],
               LWA_OBJTXT,  LT_OBJTXT[],
               LWA_OBJBIN,  LT_OBJBIN[],
               LWA_OBJPACK, LT_OBJPACK[].
       "   CLEAR LT_OBJBIN.
       REFRESH LT_OBJBIN.
       LT_OBJBIN[] = LT_MESS_ATT[].
       DESCRIBE TABLE  LT_OBJBIN LINES LV_L_ATTACHMENT.
       LWA_OBJTXT = ''.
       APPEND LWA_OBJTXT TO LT_OBJTXT.
       CLEAR LWA_OBJTXT.
       DESCRIBE TABLE LT_OBJTXT LINES LV_L_TESTO.
       LT_DOC_CHNG-OBJ_NAME   = 'STATUS_REPORT'.
       LT_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.
       LT_DOC_CHNG-OBJ_DESCR  = 'Generated File'.               "#EC NOTEXT
       LT_DOC_CHNG-SENSITIVTY = 'F'.
       LT_DOC_CHNG-SENSITIVTY = 'O'.
       LT_DOC_CHNG-OBJ_PRIO   = '1'.
       LT_DOC_CHNG-DOC_SIZE   = LV_L_TESTO * 255.
       CLEAR LWA_OBJPACK-TRANSF_BIN.
       LWA_OBJPACK-HEAD_START = 1.
       LWA_OBJPACK-HEAD_NUM   = 0.
       LWA_OBJPACK-BODY_START = 1.
       LWA_OBJPACK-BODY_NUM   = LV_L_TESTO.
       LWA_OBJPACK-DOC_TYPE   = 'RAW'.
       APPEND LWA_OBJPACK TO LT_OBJPACK.
       CLEAR LWA_OBJPACK.
       LWA_OBJPACK-TRANSF_BIN = 'X' .
       LWA_OBJPACK-HEAD_START = 1.
       LWA_OBJPACK-HEAD_NUM   = 1.
       LWA_OBJPACK-BODY_START = 1.
       LWA_OBJPACK-BODY_NUM   = LV_L_ATTACHMENT.
       LWA_OBJPACK-DOC_TYPE   = 'PDF'.
       LWA_OBJPACK-OBJ_NAME   ='SPOOL'.
       LWA_OBJPACK-OBJ_DESCR = 'Test'.     
       LWA_OBJPACK-DOC_SIZE = LV_L_ATTACHMENT * 255.
       APPEND LWA_OBJPACK TO LT_OBJPACK.
       CLEAR LWA_OBJPACK.
       CLEAR LWA_RECLIST.
       LWA_RECLIST-COPY = 'X'.
       LWA_RECLIST-RECEIVER   = P_EMAIL.
       LWA_RECLIST-REC_TYPE   = 'U'.
       LWA_RECLIST-NOTIF_DEL  = 'X'.
       LWA_RECLIST-NOTIF_NDEL = 'X'.
       APPEND LWA_RECLIST TO LT_RECLIST.
       CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
         EXPORTING
           DOCUMENT_DATA              = LT_DOC_CHNG
           PUT_IN_OUTBOX              = ' '
           COMMIT_WORK                = 'X'
         TABLES
           PACKING_LIST               = LT_OBJPACK
           OBJECT_HEADER              = LT_OBJHEAD
           CONTENTS_BIN               = LT_OBJBIN
           CONTENTS_TXT               = LT_OBJTXT
           RECEIVERS                  = LT_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.
       ENDIF.

  • Pdf send as email

    hai gurus,
    i am sending pdf via email its working fine
    but the problem is pdf file is not opened
    it showing an error
    plz help me .
    thanks in advance
    anji

    Moderator message: please search for available information/documentation before asking, provide more technical details about errors when posting again.
    Your previous post got locked... how is this one going to be different?

  • Convert spool to PDF and send as email attachment

    When i try to convert SAP spool to PDF and send it as email attachment,  size of PDF document becomes large as compared to size of the PDF cocument i download using the same spool.
    I am using following FMs.
    CONVERT_ABAPSPOOLJOB_2_PDF to convert spool to PDF
    and
    SO_NEW_DOCUMENT_ATT_SEND_API1 to send email with attchment.
    some times size of attchment exceeds 2MB and email results in error in SAP connect (SOST).
    Any idea on how to compress the PDF attchment??
    Thanks

    Hi Venkat,
    Can you plesae assist me.
    I have a requirement to convert spool to pdf
    send an email to users
    issue is that attachement is big cant go through
    I have used compress, but when I open the pdf file error that file was not correclty decoded
    please assist, anyone

  • Error while sending by email a PDF from SMARTFORM

    Hi all.
    Wer'e upgrading to EP4 and I can send smartform PDF by email but get an error message while trying to open it.
    *FORM convert_otf_2_pdf.
      call function 'CONVERT_OTF_2_PDF'
        importing
          bin_filesize           = lv_len_in  
        tables
          otf                    = gs_return-otfdata[]
          doctab_archive         = it_docs[]
          lines                  = lt_tline[]
        exceptions
          err_conv_not_possible  = 1
          err_otf_mc_noendmarker = 2
          others                 = 3.
      if sy-subrc ne 0.
         MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
    *then to send it as Email attachemnt we need to format the PDF data
      call function 'SX_TABLE_LINE_WIDTH_CHANGE'
        exporting
          line_width_dst              = '255'
        tables
          content_in                  = lt_tline
          content_out                 = lt_objbin
        exceptions
          err_line_width_src_too_long = 1
          err_line_width_dst_too_long = 2
          err_conv_failed             = 3
          others                      = 4.
      clear ls_solisti.
      ls_solisti = 'Payment Notification'.
      append ls_solisti to lt_objtxt.
    DESCRIBE TABLE lt_objtxt LINES lv_lines.
    READ TABLE lt_objtxt INDEX lv_lines.
      ls_doc_chg-obj_name = 'Payment Notification'.
      ls_doc_chg-expiry_dat = sy-datum + 10.
      ls_doc_chg-obj_descr =  'Payment Notification'.
      ls_doc_chg-sensitivty = 'F'.
      ls_doc_chg-doc_size = 255.
      ls_objpack-head_start = 1.
      ls_objpack-head_num = 0.
      ls_objpack-body_start = 1.
      ls_objpack-body_num = 1. "lv_lines.
      ls_objpack-doc_type = 'RAW'.
      append ls_objpack to lt_objpack.
    (pdf-Attachment)
      ls_objpack-transf_bin = 'X'.
      ls_objpack-head_start = 1.
      ls_objpack-head_num = 0.
      ls_objpack-body_start = 1.
      describe table lt_objbin lines lv_lines.
      "READ TABLE lt_objbin INDEX lv_lines.
      ls_objpack-doc_size = lv_lines * 255 .
      ls_objpack-body_num = lv_lines.
      ls_objpack-doc_type = 'PDF'.
      ls_objpack-obj_name = 'NOTIF'.
      ls_objpack-obj_descr = 'Payment Notif.'.
      append ls_objpack to lt_objpack.
      clear lt_dli[].
      lv_name = p_list.
      call function 'SO_DLI_READ_API1'
        exporting
          dli_name                   = lv_name
          dli_id                     = '000000000001'
          shared_dli                 = 'X'
        tables
          dli_entries                = lt_dli
        exceptions
          dli_not_exist              = 1
          operation_no_authorization = 2
          parameter_error            = 3
          x_error                    = 4
          others                     = 5.
      if sy-subrc eq 0 and
        lt_dli[] is not initial.
    clear ls_reclist.
        ls_reclist-receiver = p_list.
        ls_reclist-rec_type = 'C'.
        append ls_reclist to lt_reclist.
      endif.
      call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'
        exporting
          document_data              = ls_doc_chg
          put_in_outbox              = ''
        tables
          packing_list               = lt_objpack
          object_header              = ls_objhead
          contents_bin               = lt_objbin
          contents_txt               = lt_objtxt
          receivers                  = lt_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.
    What's wrong ??
    Thanks all,
    Rebeka

    Hello,
    Try below code
    LOOP AT gt_check_data INTO gw_inc_payment.
              CLEAR wa_pa0105.
              READ TABLE gt_pa0105 INTO wa_pa0105
                                   WITH KEY pernr = gw_inc_payment-pernr.
              IF sy-subrc = 0.      ELSE.             CONDENSE  wa_pa0105-usrid_long NO-GAPS.
                TRANSLATE wa_pa0105-usrid_long TO LOWER CASE.
              ENDIF.
              CALL FUNCTION 'ZHR_ITA_MAIL_PDF'
                EXPORTING
                  im_incentive       = gw_ita_inc
                  im_flag            = 'X'
                IMPORTING
                  ls_job_output_info = ls_op_info
                EXCEPTIONS
                  cntl_error_ctrl    = 1
                  cntl_error_cont    = 2
                  cntl_error_load    = 3
                  cntl_error_show    = 4
                  OTHERS             = 5.
              IF sy-subrc <> 0.
                MESSAGE text-024 TYPE 'E'.
              ELSE.
                CLEAR gt_tline[].
                CALL FUNCTION 'CONVERT_OTF'
                  EXPORTING
                    format                = 'PDF'
                  IMPORTING
                    bin_filesize          = g_pdfsize
                  TABLES
                    otf                   = ls_op_info-otfdata
                    lines                 = gt_tline
                  EXCEPTIONS
                    err_max_linewidth     = 1
                    err_format            = 2
                    err_conv_not_possible = 3
                    err_bad_otf           = 4
                    OTHERS                = 5.
                IF sy-subrc <> 0.
                  IF gt_tline IS INITIAL.
                    MESSAGE text-023 TYPE 'E'.
                  ENDIF.
                ELSE.
          Data handling with required length
                  LOOP AT gt_tline INTO gw_tline.
                    lv_pos = 255 - lv_len.
                    IF lv_pos > 134.                          "length of pdf_table
                      lv_pos = 134.
                    ENDIF.
                    gw_objbin+lv_len = gw_tline(lv_pos).
                    lv_len = lv_len + lv_pos.
                    IF lv_len = 255.                          "length of out (contents_bin)
                      APPEND gw_objbin TO gt_objbin.
                      CLEAR: gw_objbin, lv_len.
                      IF lv_pos < 134.
                        gw_objbin = gw_tline+lv_pos.
                        lv_len = 134 - lv_pos.
                      ENDIF.
                    ENDIF.
                  ENDLOOP.
                  IF lv_len > 0.
                    APPEND gw_objbin TO gt_objbin.
                  ENDIF.
                  CLEAR gw_objbin.
            Mail process with the PDF attachment
                  PERFORM mail_process_attach USING wa_pa0105-usrid_long.
                ENDIF.
              ENDIF.
            ENDLOOP.
    FORM mail_process_attach USING lv_receive TYPE comm_id_long.
    **//--- For Sending eMail
      DATA :  it_packing_list TYPE TABLE OF  sopcklsti1,
              wa_packing_list TYPE sopcklsti1,
              it_receivers    TYPE TABLE OF somlreci1,
              wa_receivers    TYPE somlreci1,
              it_message      TYPE  TABLE OF solisti1,
              wa_message      TYPE  solisti1,
              it_line         TYPE STANDARD TABLE OF tline,
              wa_line         TYPE tline,
              it_attachment   TYPE TABLE OF solisti1,
              wa_attachment   TYPE solisti1,
              wa_doc_data     TYPE sodocchgi1,
              lv_cnt          TYPE  i,
              lv_tablines     TYPE i,
              lv_subject      TYPE so_obj_des,
              lv_incref       TYPE string.
    *--Populating Mail Recepients
      wa_receivers-rec_type   = 'U'.
      wa_receivers-com_type   = 'INT'.
      wa_receivers-notif_del  = 'X'.
      wa_receivers-notif_ndel = 'X'.
      wa_receivers-express    = 'X'.
    assgining a receiver's mail id
      wa_receivers-receiver   = lv_receive.
      APPEND wa_receivers TO it_receivers.
      CLEAR wa_receivers.
    *--Populating the body
      CALL FUNCTION 'READ_TEXT'
        EXPORTING
          client                  = sy-mandt
          id                      = 'ST'
          language                = sy-langu
          name                    = gc_so10_name
          object                  = 'TEXT'
        TABLES
          lines                   = it_line
        EXCEPTIONS
          id                      = 1
          language                = 2
          name                    = 3
          not_found               = 4
          object                  = 5
          reference_check         = 6
          wrong_access_to_archive = 7
          OTHERS                  = 8.
      IF sy-subrc = 0.
        LOOP AT it_line INTO wa_line.
          wa_message-line = wa_line-tdline.
          APPEND wa_message TO it_message.
          CLEAR : wa_line, wa_message.
        ENDLOOP.
      ENDIF.
    *//---  Populate the subject/generic message attributes
      wa_doc_data-obj_langu  = sy-langu.
      READ TABLE it_attachment INTO wa_attachment INDEX lv_cnt.
      wa_doc_data-doc_size   = ( lv_cnt - 1 ) * 255 + STRLEN( wa_attachment ).
      wa_doc_data-obj_name   = 'SAPRPT'.
    *//--- Subject Begin
      CLEAR : lv_subject.
      lv_subject = gw_inc_payment-pernr.
      SHIFT  lv_subject LEFT DELETING LEADING '0'.
      CONCATENATE text-009 '(' lv_subject ')'
                  INTO  wa_doc_data-obj_descr
                  SEPARATED BY space.
    *//--- Subject End
      wa_doc_data-sensitivty = 'F'.
    *--Describe the body of the message
      CLEAR : wa_packing_list, it_packing_list[].
      wa_packing_list-transf_bin  = space.
      wa_packing_list-head_start  = 1.
      wa_packing_list-head_num    = 0.
      wa_packing_list-body_start  = 1.
      DESCRIBE TABLE it_message LINES wa_packing_list-body_num.
      wa_packing_list-doc_type    = 'RAW'.
      APPEND wa_packing_list TO it_packing_list.
    Filling the attachment table
      DESCRIBE TABLE gt_objbin LINES lv_tablines.
      wa_packing_list-transf_bin  = 'X'.
      wa_packing_list-head_start  = 1.
      wa_packing_list-head_num    = 0.
      wa_packing_list-body_start  = 1.
      wa_packing_list-body_num    = lv_tablines.
      wa_packing_list-doc_type    = 'PDF'.
      wa_packing_list-obj_name    = 'ATTACHMENT'(a01).
    *//--- Attachment File Name - Begin
      CLEAR : lv_subject.
      lv_subject = gw_inc_payment-pernr.
      lv_incref  = gw_inc_payment-incref.
      SHIFT lv_subject LEFT DELETING LEADING '0'.
      SHIFT lv_incref  LEFT DELETING LEADING '0'.
      CONCATENATE text-011
                  lv_subject
                  gw_inc_payment-itafy
                  lv_incref
                  INTO wa_packing_list-obj_descr
                  SEPARATED BY '_'.
    *//--- Attachment File Name - End
      wa_packing_list-doc_size    = lv_tablines * 255.
      APPEND wa_packing_list TO it_packing_list.
      CLEAR wa_packing_list.
    calling the function module to send the mail
      CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
        EXPORTING
          document_data              = wa_doc_data
          put_in_outbox              = 'X'
          sender_address             = gc_sender
          sender_address_type        = 'INT'
          commit_work                = 'X'
        TABLES
          packing_list               = it_packing_list
          contents_bin               = gt_objbin[]
          contents_txt               = it_message
          receivers                  = it_receivers
        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.
        gw_inc_payment-zmail       = '0'.
        gw_inc_payment-mail_status = text-022.
        gw_ita_inc-zmail           = '0'.
        MODIFY  gt_inc_payment  FROM gw_inc_payment
        TRANSPORTING zmail  WHERE incref = gw_inc_payment-incref
                              AND pernr = gw_inc_payment-pernr.
        MODIFY zhr_ita_inc_payk FROM gw_ita_inc.
        MESSAGE text-013 TYPE 'E'.
        CLEAR gw_ita_inc.
      ELSE.
        gw_inc_payment-zmail       = '1'.
        gw_inc_payment-mail_status = text-021.
        gw_ita_inc-zmail           = '1'.
        MODIFY  gt_inc_payment FROM gw_inc_payment
                               TRANSPORTING zmail mail_status
                               WHERE incref = gw_inc_payment-incref AND
                                     pernr = gw_inc_payment-pernr.
        IF sy-subrc = 0.
          MODIFY zhr_ita_inc_payk FROM gw_ita_inc.
          IF sy-subrc = 0.
            MESSAGE text-012 TYPE 'S'.
          ENDIF.
        ENDIF.
        CLEAR gw_ita_inc.
      ENDIF.
      CLEAR : it_packing_list,
              gt_objbin[],
              it_message[],
              it_receivers[],
              wa_doc_data.
    ENDFORM.                    " MAIL_PROCESS_ATTACH
    regards

  • Error send a smartform PDF by Email to Vendor

    Hi Expert,
    Please help me.........................
    I want to send a PO (Smartform) as Email to Vendor.
    In SAPScript the PO send by Email is working fine, but in Smartforms it is not working.
    Normally, I will use via Smartforms the Program = YBAA_FM06P, FORM routine = ENTRY_NEU, PDF/Smartform Form = ZYBAA_MMPO1.
    A communication strategy has communication type as INT has been defined.
    This communication strategy has been set as default in the output type ZNEU. The transmission medium has been set to 5 (External Send) and the partner function as VN (Vendor).
    The e-mail address of the vendor has also been maintained.
    In transaction MN04, i have also made an entry for output type ZNEU and set the document type as NB.
    But message output do not create.
    How to send a smartform PDF by Email to vendor?
    Thanks,

    Hi,
    I can convert the PO output in to PDF from SOST I can sent it to external vendor using the Mail triggering configuration settings but meassage output do not create.
    Please tell me how can I do.
    Thank,

  • Sending smartform as PDF attachment through email

    Hi,
    I have used the FM SO_NEW_DOCUMENT_ATT_SEND_API1 to send the smartform as PDF attachment through email.In SOST transaction I can see that the mail has been sent to the reciepient,but the mail is not going to the mail box.What would be the reason for this?
    Regards,
    Hema

    That should be the basis issue. They needs to do some settings. Please ask them to do so.
    Pranav

  • To Send the Email to Ship to Party for Shipment Notification in SMARTFORMS

    HI Gurus,
    I am having a scenario to send the EMAIL  for Shipment Notification using SMARTFORMS when processed through VT01/VT02N transaction.
    I general process, the email is going to Forwarding agent Email address. But the user wants to send the notification to Ship to Party email address.
    Is there any IMG settings to be done or should we handle using Custom Driver program.? If yes, can anyone help how to achive this.
    Your help is greatly appreciated.
    Regards,
    Yathish

    Just take a look at this where PO is discussed but should not be different from your issue
    PO as SMART Form and mail as PDF
    Scheduling Agreement as PDF in email ?
    External Email (PDF Attachment) while PO is created or Changed
    Convert PO into PDF format and send by an email to vendor
    PDF form as email attachment for purchase order
    Send PO as email attachment
    How to convert smartform output to PDF and mailing them
    https://sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/uuid/8fd773b3-0301-0010-eabe-82149bcc292
    Regards,
    Ravi
    Note - Please mark all the helpful answers

  • How to send Smartform and Script in email?

    hi myself Devendra,
    i ve some queries....regarding the Script and Smartform.
    1- Can any body tell me how to send Script as well as Smartform layout in mail output.
    I ve created script and smartform for the PO confirmation.
    2- If i want to send both script and smartform layout of the PO, whenever created,automatically to the Vendor,then what i ve to do.

    Hey,
    REPORT zemail_gm.
    *********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.
    ********Constants *******************************************
    Data : gc_text(11) type c value 'Form Output',
    gc_tst(3) type c value 'TST',
    gc_testing(7) type c value 'Testing'.
    *********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
    *********Internal tables Declarations *****************************
    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
    CLEAR : gv_form_name,
    gs_ctrlop,
    gs_outopt,
    gs_otfdata,
    gv_bin_filesize,
    gv_pos,
    gv_len,
    gv_tab_lines.
    START-OF-SELECTION.
    • Generate Function Module name
    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
    formname = 'ZPDF_G'
    IMPORTING
    fm_name = gv_form_name
    EXCEPTIONS
    no_form = 1
    no_function_module = 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.
    • Assigning values to Form Control Structure and Form Composer
    gs_ctrlop-getotf = 'X'.
    gs_ctrlop-no_dialog = 'X'.
    gs_outopt-tdnoprev = 'X'.
    • Getting the OTFDATA
    CALL FUNCTION gv_form_name
    EXPORTING
    control_parameters = gs_ctrlop
    output_options = gs_outopt
    user_settings = 'X'
    IMPORTING
    job_output_info = gs_otfdata
    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.
    ENDIF.
    • Assigning the OTFDATA to OTF Structure table
    CLEAR gt_otf.
    gt_otf] = gs_otfdata-otfdata[.
    • Convert the OTF DATA to SAP Script Text lines
    CLEAR gt_pdf_tab.
    CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
    format = 'PDF'
    max_linewidth = 132
    IMPORTING
    bin_filesize = gv_bin_filesize
    TABLES
    otf = gt_otf
    lines = gt_pdf_tab
    EXCEPTIONS
    err_max_linewidth = 1
    err_format = 2
    err_conv_not_possible = 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.
    • 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.
    • Assigning the email id to Structure of the API Recipient List table
    CLEAR : gt_reclist, gs_reclist.
    gs_reclist-receiver = '<give the mail id of the receiver'.
    gs_reclist-rec_type = 'U'.
    APPEND gs_reclist TO gt_reclist.
    • 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 > 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 < 134.
    gs_objbin = gs_pdf_tab+gv_pos.
    gv_len = 134 - gv_pos.
    ENDIF.
    ENDIF.
    ENDLOOP.
    IF gv_len > 0.
    APPEND gs_objbin TO gt_objbin.
    ENDIF.
    • 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 = 'ATTACHMENT'.
    gs_objpack-obj_descr = 'test'.
    APPEND gs_objpack TO gt_objpack.
    ENDIF.
    • Sending the Form Output in the PDF format to email
    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
    document_data = gs_docdata
    put_in_outbox = 'X'
    commit_work = 'X'
    TABLES
    packing_list = gt_objpack
    contents_bin = gt_objbin
    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 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ELSE.
    WRITE 'Sent Successfully'.
    ENDIF.
    SUBMIT rsconn01
    WITH mode EQ 'INT'
    AND RETURN.
    END-OF-SELECTION.Regards,
    Midhun Abraham
    Edited by: Midhun Abraham on Oct 12, 2008 4:06 AM

  • To send output as a PDF attachment via email

    Hi experts
    I have the (smartform) output data in OTF format..and displaying it in PDF form with FM 'HR_EFI_SHOW_PDF_FORM' .
    Now the requirement is <b>to send this output as a PDF attachment via email</b>.
    Please help me with sample code to perform this.
    Regards,
    Matt.

    Hi,
    Check this links,
    /people/sap.user72/blog/2004/11/10/bsphowto-generate-pdf-output-from-a-bsp
    Also for email:
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/8cd6adbb-0301-0010-39ba-938c601d5db9
    Refer the following link for more details:
    http://www.sapdevelopment.co.uk/reporting/rep_spooltopdf.htm
    Thanks,
    Reward If Helpful.

  • FM to send an email with a PDF attachment

    Hello All,
        Please suggest me some FMs to send an email along with PDF attachment.
    Thanks,

    DATA: i_otf       TYPE itcoo OCCURS 0 WITH HEADER LINE,
          i_tline     TYPE TABLE OF tline WITH HEADER LINE,
          i_receivers TYPE TABLE OF somlreci1 WITH HEADER LINE,
          i_record    LIKE solisti1 OCCURS 0 WITH HEADER LINE,
    * Objects to send mail.
          i_objpack   LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
          i_objtxt    LIKE solisti1 OCCURS 0 WITH HEADER LINE,
          i_objbin    LIKE solisti1 OCCURS 0 WITH HEADER LINE,
          i_reclist   LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
    **************Work Area declarations***********************
          w_objhead   TYPE soli_tab,
          w_ctrlop    TYPE ssfctrlop,
          w_compop    TYPE ssfcompop,
          w_return    TYPE ssfcrescl,
          w_doc_chng  TYPE sodocchgi1,
          w_data      TYPE sodocchgi1,
          w_buffer    TYPE string."To convert from 132 to 255
    data:     v_len_in     TYPE sood-objlen,
         v_len_out    TYPE sood-objlen,
         v_len_outn   TYPE i,
         v_lines_txt  TYPE i,
         v_lines_bin  TYPE i.
    start-of-selection.
      w_ctrlop-getotf    = gv_abaptrue.
      w_ctrlop-no_dialog = gv_abaptrue.
      w_compop-tdnoprev  = gv_abaptrue.
    PERFORM call_smartform.
      PERFORM convert_to_otf_format.
      PERFORM pdf_formatting.
      PERFORM build_mail_format.
      PERFORM send_mail.
    form call_smartform.
    DATA:fm_name  TYPE rs38l_fnam.
      DATA:formname TYPE tdsfname VALUE 'ZSD_CRM_PROFORMA_INVOICE_001'.
      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          formname = formname
        IMPORTING
          fm_name  = fm_name.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      CALL FUNCTION fm_name
        EXPORTING
          control_parameters = w_ctrlop
          output_options     = w_compop
          user_settings      = ' '
          v_vbeln            = v_vbeln
          v_erdat            = gv_dat
          wa_custaddr        = gw_zcustaddr
          v_stceg            = gw_kna1-stceg
          v_total            = gv_total
          vbak               = vbak
          v_lifnr            = gw_kna1-lifnr
          vbrp               = vbrp
          v_head             = gv_heading
          v_taxtext          = gv_text
          v_tax              = gv_tax
          v_gtotal           = gv_gtot
        IMPORTING
          job_output_info    = w_return
        TABLES
          it_det             = gt_items
        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.
      ENDIF.
    endform.
    form convert_to_otf_format.
      i_otf[] = w_return-otfdata[].
      CALL FUNCTION 'CONVERT_OTF'
        EXPORTING
          format                = 'PDF'
          max_linewidth         = 132
        IMPORTING
          bin_filesize          = v_len_in
        TABLES
          otf                   = i_otf
          lines                 = i_tline
        EXCEPTIONS
          err_max_linewidth     = 1
          err_format            = 2
          err_conv_not_possible = 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.
    endform.
    form pdf_formatting.
    * Convert PDF from 132 to 255.
      LOOP AT i_tline.
    * Replacing space by ~
        TRANSLATE i_tline USING ' ~'.
        CONCATENATE w_buffer i_tline INTO w_buffer.
      ENDLOOP.
    * Replacing ~ by space
      TRANSLATE w_buffer USING '~ '.
      DO.
        i_record = w_buffer.
    * Appending 255 characters as a record
        APPEND i_record.
        SHIFT w_buffer LEFT BY 255 PLACES.
        IF w_buffer IS INITIAL.
          EXIT.
        ENDIF.
      ENDDO.
    endform.     
    FORM build_mail_format .
    DATA:lv_dash(1)         TYPE c VALUE '-'.
      DATA:lv_xtn(4)          TYPE c VALUE '.pdf'.
      CONSTANTS:lv_esacpe     TYPE so_escape  VALUE 'U'.
      CONSTANTS:lv_so_obj_tp  TYPE so_obj_tp  VALUE 'PDF'.
      CONSTANTS:lv_so_obj_tp1 TYPE so_obj_tp  VALUE 'RAW'.
      CONSTANTS:lv_so_obj_sns TYPE so_obj_sns VALUE 'F'.
    * Get Email ID's
      SELECT * INTO TABLE gt_address[] FROM adr6
      WHERE addrnumber = gw_kna1-adrnr.
      REFRESH:i_reclist,
              i_objtxt,
              i_objbin,
              i_objpack.
      CLEAR w_objhead.
    * Object with PDF.
      i_objbin[] = i_record[].
      DESCRIBE TABLE i_objbin[] LINES v_lines_bin.
    * Object with main text of the mail.
      i_objtxt = text-002.
      APPEND i_objtxt.
      DESCRIBE TABLE i_objtxt LINES v_lines_txt.
    * Document information.
      w_doc_chng-obj_name = text-005.
      w_doc_chng-expiry_dat = sy-datum + 10.
      IF gw_flg = 'T'.
        w_doc_chng-obj_descr = text-003.
      ELSE.
        w_doc_chng-obj_descr = text-004.
      ENDIF.
      CONCATENATE w_doc_chng-obj_descr lv_dash v_vbeln INTO w_doc_chng-obj_descr.
      w_doc_chng-sensitivty = lv_so_obj_sns. "Functional object
      w_doc_chng-doc_size = v_lines_txt * 255.
    * Pack to main body as RAW.
    * Obj. to be transported not in binary form
      CLEAR i_objpack-transf_bin.
    * Start line of object header in transport packet
      i_objpack-head_start = 1.
    * Number of lines of an object header in object packet
      i_objpack-head_num = 0.
    * Start line of object contents in an object packet
      i_objpack-body_start = 1.
    * Number of lines of the object contents in an object packet
      i_objpack-body_num = v_lines_txt.
    * Code for document class
      i_objpack-doc_type = lv_so_obj_tp1.
      APPEND i_objpack.
    * Packing as PDF.
      i_objpack-transf_bin = gv_abaptrue.
      i_objpack-head_start = 1.
      i_objpack-head_num = 1.
      i_objpack-body_start = 1.
      i_objpack-body_num = v_lines_bin.
      i_objpack-doc_type = lv_so_obj_tp.
      i_objpack-obj_name = text-005.
      CONCATENATE w_doc_chng-obj_descr lv_xtn INTO i_objpack-obj_descr.
      i_objpack-doc_size = v_lines_bin * 255.
      APPEND i_objpack.
    * Document information.
      CLEAR i_reclist.
    * e-mail receivers.
      LOOP AT gt_address INTO gw_adr6.
        i_reclist-receiver = gw_adr6-smtp_addr.
        i_reclist-express =  gv_abaptrue.
        i_reclist-rec_type = lv_esacpe. "Internet address
        APPEND i_reclist.
      ENDLOOP.
    endform.
    FORM send_mail .
      CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
        EXPORTING
          document_data              = w_doc_chng
          put_in_outbox              = ' '
        TABLES
          packing_list               = i_objpack[]
          object_header              = w_objhead[]
          contents_bin               = i_objbin[]
          contents_txt               = i_objtxt[]
          receivers                  = i_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.
      ENDIF.
      COMMIT WORK.
    ENDFORM.  
    hi this is a program for sending smartform as pdf attachment.
    make the necessary modifications in the OTF part and use it
    Edited by: Keshu Thekkillam on Jul 10, 2009 7:17 PM
    Edited by: Keshu Thekkillam on Jul 10, 2009 7:17 PM

  • HR: Send Salary Receipt, as PDF form, by EMAIL

    Hello friends,
    Soon I'm having the requirement of sending the employee salary receipt (and probably anual income declaration), as a PDF document, by email. I think it can be done with SAP XI, changing the print program of the current smartform, to send an assyncronous message with an attachment, to employee email.
    But I want to know if there is a better way (with some customizing). After searching, I found that I will need to create infotype 105 (comunication), subtype 0010 (email) to mantain employee email. However, I could not find any automatic way to create the pdf and send by email (like output type '5' - external send - in sales order, for example, where the system automatically send the script/smartform by email, converting automatically to pdf).
    Any ideas?
    Thanks in advance.
    Regards,
    Valter Oliveira.
    Edited by: Valter Oliveira on Oct 8, 2008 9:42 AM

    Hi,
    This is the code to send email directly from Print Program
      Get smartforms z_goods_receipt FM name.
      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          formname           = 'Z_QUALITY_NOTIFICATION'
        IMPORTING
          fm_name            = fm_name
        EXCEPTIONS
          no_form            = 1
          no_function_module = 2
          OTHERS             = 3.
      Check for the error in the previous call.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      ssfcompop-tdnewid    = 'X'.
      ssfctrlop-no_dialog  = 'X'.
      ssfctrlop-preview    = 'X'.  " TO-DO COMMENT this line
      ssfctrlop-getotf     = 'X'.
    ssfctrlop-device     = 'TELEFAX'.
    ssfctrlop-langu      = sy-langu.
      CLEAR ssfcompop.
      SELECT SINGLE land1 FROM lfa1
             INTO aux_land1 WHERE lifnr = stru_qn-vendor.
    Set the printer parameters.
      ssfcompop-tdnoprev   = 'X'.    " No print preview
      ssfcompop-tdnoprint  = ''.     " No printing from print preview
      ssfcompop-tdimmed    = 'X'.
      ssfcompop-tddelete   = 'X'.
      ssfcompop-tddest     = p_tddest.
      ssfcompop-tdnewid    = 'X'.
      IF stru_qn-ven_contact_fax IS NOT INITIAL.
        ssfcompop-tdteleland = aux_land1.
        ssfcompop-tdtelenum  = stru_qn-ven_contact_fax.
        ssfcompop-faxformat  = 'PS'.
      ENDIF.
      CALL FUNCTION fm_name
        EXPORTING
          control_parameters = ssfctrlop
          output_options     = ssfcompop
          user_settings      = ''
          p_qn               = stru_qn
        IMPORTING
          job_output_info    = output_data
        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.
      ENDIF.
    CONVERT THE OTF INTO PDF.
      CALL FUNCTION 'CONVERT_OTF'
        EXPORTING
          format                = 'PDF'
        IMPORTING
          bin_filesize          = l_pdf_len
        TABLES
          otf                   = output_data-otfdata
          lines                 = lt_lines
        EXCEPTIONS
          err_max_linewidth     = 1
          err_format            = 2
          err_conv_not_possible = 3
          err_bad_otf           = 4
          OTHERS                = 5.
    To pass PDF data to the email function module
      LOOP AT lt_lines INTO wa_lines.
        TRANSLATE wa_lines USING '~'.
        CONCATENATE wa_buffer wa_lines INTO wa_buffer.
      ENDLOOP.
      TRANSLATE wa_buffer USING '~'.
      DO.
        i_record = wa_buffer.
        APPEND i_record.
        SHIFT wa_buffer LEFT BY 255 PLACES.
        IF wa_buffer IS INITIAL.
          EXIT.
        ENDIF.
      ENDDO.
      i_objtxt-line = 'Please find the attached Quality Notification'.
      APPEND i_objtxt.
      DESCRIBE TABLE i_objtxt LINES v_lines_txt.
      READ TABLE i_objtxt INDEX v_lines_txt.
      DESCRIBE TABLE i_record LINES aux_num.
      READ TABLE i_record INDEX aux_num.
    Create body of the message
      wa_doc_chng-obj_name   = 'smartform'.
      wa_doc_chng-obj_langu  = sy-langu.
      wa_doc_chng-expiry_dat =  sy-datum + 10.
      wa_doc_chng-obj_descr  = 'EMD Quality Notification'.
      wa_doc_chng-sensitivty = 'F'.
    wa_doc_chng-doc_size = ( aux_num - 1 ) * 255 + STRLEN( i_objtxt-line ).
    Body Text
      i_objpack-head_start = 1.
      i_objpack-head_num   = 0.
      i_objpack-body_start = 1.
      i_objpack-body_num   = v_lines_txt.
      i_objpack-doc_type   = 'RAW'.
      APPEND i_objpack.
    PDF Attachment
      i_objpack-transf_bin = 'X'.
      i_objpack-head_start = 1.
      i_objpack-head_num   = 0.
      i_objpack-body_start = 1.
      i_objpack-doc_size  = ( aux_num - 1 ) * 255 + STRLEN( i_record-line ).
      i_objpack-body_num   = aux_num.
      i_objpack-doc_type   = 'PDF'.
      i_objpack-obj_name   = 'smart'.
      i_objpack-obj_descr  = 'Quality Notification'.
      i_objpack-obj_langu  = sy-langu.
      APPEND i_objpack.
      aux_rec-address = 'XXXX'.
    To pass the email address of the vendor to send email
    i_reclist-receiver = stru_qn-ven_contact_email.
      i_reclist-receiver  = aux_rec.
      i_reclist-express   = 'X'.
      i_reclist-rec_type  = 'U'.
      APPEND i_reclist.
      CLEAR i_reclist.
    To send email from smartform
      CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
        EXPORTING
          document_data                    = wa_doc_chng
          put_in_outbox                    = 'X'
        TABLES
          packing_list                     = i_objpack
          contents_bin                     = i_record
          contents_txt                     = i_objtxt
          receivers                        = i_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

  • Please help in senplease help in smartform send external email send.

    hii all,
    pleaseeeeeeeee help in sending external email in smartform print program.
    i need for RLB_INVOICE order confirmation to send thru email.
    what to code in ZRLN_INVOICE . i copied RLB_INVOICE in zprog.
    so  what rthe changes i need to code in driver program?
    pleaseeeeeeee help with sample coding..

    Here is the code to send the Smartform to mail as PDF attachment.
    *& Report ZTEST_PDF_MAIL
    REPORT ZTEST_PDF_MAIL.
    Internal Table declarations
    DATA: I_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE,
    I_TLINE TYPE TABLE OF TLINE WITH HEADER LINE,
    I_RECEIVERS TYPE TABLE OF SOMLRECI1 WITH HEADER LINE,
    I_RECORD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
    Objects to send mail.
    I_OBJPACK LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
    I_OBJTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
    I_OBJBIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
    I_RECLIST LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,
    Work Area declarations
    WA_OBJHEAD TYPE SOLI_TAB,
    W_CTRLOP TYPE SSFCTRLOP,
    W_COMPOP TYPE SSFCOMPOP,
    W_RETURN TYPE SSFCRESCL,
    WA_DOC_CHNG TYPE SODOCCHGI1,
    W_DATA TYPE SODOCCHGI1,
    WA_BUFFER TYPE STRING, "To convert from 132 to 255
    Variables declarations
    V_FORM_NAME TYPE RS38L_FNAM,
    V_LEN_IN LIKE SOOD-OBJLEN,
    V_LEN_OUT LIKE SOOD-OBJLEN,
    V_LEN_OUTN TYPE I,
    V_LINES_TXT TYPE I,
    V_LINES_BIN TYPE I.
    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
    FORMNAME = 'ZTEST'
    IMPORTING
    FM_NAME = V_FORM_NAME
    EXCEPTIONS
    NO_FORM = 1
    NO_FUNCTION_MODULE = 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.
    W_CTRLOP-GETOTF = 'X'.
    W_CTRLOP-NO_DIALOG = 'X'.
    W_COMPOP-TDNOPREV = 'X'.
    CALL FUNCTION V_FORM_NAME
    EXPORTING
    CONTROL_PARAMETERS = W_CTRLOP
    OUTPUT_OPTIONS = W_COMPOP
    USER_SETTINGS = 'X'
    IMPORTING
    JOB_OUTPUT_INFO = W_RETURN
    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.
    ENDIF.
    I_OTF[] = W_RETURN-OTFDATA[].
    CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
    FORMAT = 'PDF'
    MAX_LINEWIDTH = 132
    IMPORTING
    BIN_FILESIZE = V_LEN_IN
    TABLES
    OTF = I_OTF
    LINES = I_TLINE
    EXCEPTIONS
    ERR_MAX_LINEWIDTH = 1
    ERR_FORMAT = 2
    ERR_CONV_NOT_POSSIBLE = 3
    OTHERS = 4.
    IF SY-SUBRC <> 0.
    ENDIF.
    LOOP AT I_TLINE.
    TRANSLATE I_TLINE USING '~'.
    CONCATENATE WA_BUFFER I_TLINE INTO WA_BUFFER.
    ENDLOOP.
    TRANSLATE WA_BUFFER USING '~'.
    DO.
    I_RECORD = WA_BUFFER.
    APPEND I_RECORD.
    SHIFT WA_BUFFER LEFT BY 255 PLACES.
    IF WA_BUFFER IS INITIAL.
    EXIT.
    ENDIF.
    ENDDO.
    Attachment
    REFRESH: I_RECLIST,
    I_OBJTXT,
    I_OBJBIN,
    I_OBJPACK.
    CLEAR WA_OBJHEAD.
    I_OBJBIN[] = I_RECORD[].
    Create Message Body Title and Description
    I_OBJTXT = 'test with pdf-Attachment!'.
    APPEND I_OBJTXT.
    DESCRIBE TABLE I_OBJTXT LINES V_LINES_TXT.
    READ TABLE I_OBJTXT INDEX V_LINES_TXT.
    WA_DOC_CHNG-OBJ_NAME = 'smartform'.
    WA_DOC_CHNG-EXPIRY_DAT = SY-DATUM + 10.
    WA_DOC_CHNG-OBJ_DESCR = 'smartform'.
    WA_DOC_CHNG-SENSITIVTY = 'F'.
    WA_DOC_CHNG-DOC_SIZE = V_LINES_TXT * 255.
    Main Text
    CLEAR I_OBJPACK-TRANSF_BIN.
    I_OBJPACK-HEAD_START = 1.
    I_OBJPACK-HEAD_NUM = 0.
    I_OBJPACK-BODY_START = 1.
    I_OBJPACK-BODY_NUM = V_LINES_TXT.
    I_OBJPACK-DOC_TYPE = 'RAW'.
    APPEND I_OBJPACK.
    Attachment (pdf-Attachment)
    I_OBJPACK-TRANSF_BIN = 'X'.
    I_OBJPACK-HEAD_START = 1.
    I_OBJPACK-HEAD_NUM = 0.
    I_OBJPACK-BODY_START = 1.
    DESCRIBE TABLE I_OBJBIN LINES V_LINES_BIN.
    READ TABLE I_OBJBIN INDEX V_LINES_BIN.
    I_OBJPACK-DOC_SIZE = V_LINES_BIN * 255 .
    I_OBJPACK-BODY_NUM = V_LINES_BIN.
    I_OBJPACK-DOC_TYPE = 'PDF'.
    I_OBJPACK-OBJ_NAME = 'smart'.
    I_OBJPACK-OBJ_DESCR = 'test'.
    APPEND I_OBJPACK.
    CLEAR I_RECLIST.
    I_RECLIST-RECEIVER = '[email protected]'.
    I_RECLIST-REC_TYPE = 'U'.
    APPEND I_RECLIST.
    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
    DOCUMENT_DATA = WA_DOC_CHNG
    PUT_IN_OUTBOX = 'X'
    COMMIT_WORK = 'X'
    TABLES
    PACKING_LIST = I_OBJPACK
    OBJECT_HEADER = WA_OBJHEAD
    CONTENTS_BIN = I_OBJBIN
    CONTENTS_TXT = I_OBJTXT
    RECEIVERS = I_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.
    WRITE:/ 'Error When Sending the File', SY-SUBRC.
    ELSE.
    WRITE:/ 'Mail sent'.
    ENDIF.
    If you want to send some text as Body of the Mail then follow this once
    when u r callin the FM'SO_NEW_DOCUMENT_ATT_SEND_API1'.. points to remember
    1.u have to pass the body of content in table CONTENTS_TXT(ia m using I_OBJBIN) (each line a record) then. suppose i have appended 11 records to the table CONTENTS_TXT .
    2.PACKING_LIST(iam usign I_OBJPACK) table u ahve to append a redord as follows
    I_OBJPACK-TRANSF_BIN = ' '.
    I_OBJPACK-HEAD_START = 000000000000001.
    I_OBJPACK-HEAD_NUM = 000000000000001.
    I_OBJPACK-BODY_START = 000000000000002
    I_OBJPACK-BODY_NUM = 000000000000010.
    I_OBJPACK-DOC_TYPE = 'RAW'.
    append I_OBJPACK-.
    by the above code system treat the first line in table I_OBJBIN as header and the 2nd line to 10 lines tread as body.
    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
    DOCUMENT_DATA = WA_DOC_CHNG
    PUT_IN_OUTBOX = 'X'
    TABLES
    PACKING_LIST = I_OBJPACK
    OBJECT_HEADER = WA_OBJHEAD
    CONTENTS_BIN = I_OBJBIN
    CONTENTS_TXT = I_OBJTXT
    RECEIVERS = I_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.
    regards,
    srinivas

  • CRM ONLINE 2013: On Approval Of Quotation, Run Report, Generate PDF and Send an Email With PDF as attachment

    Hi,
    I am using CRM ONLINE 2013.
    How to automate below process?
    1. On Approval Of Quotation, Run Report.
    2. Generate PDF.
    3. Send an Email With PDF as attachment.
    As i have gone through many forums for this topic, but creating a plugin code for generating Report PDF is not possible in CRM ONLINE.
    So, What is the alternate way to do this..?
    Thanks.

    This is my entire code mentioned below:-
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
        <script type="text/javascript">
            if (typeof (SDK) == "undefined")
            { SDK = { __namespace: true }; }
            SDK.JScriptRESTDataOperations = {
                _context: function () {
                    if (typeof GetGlobalContext != "undefined")
                    { return GetGlobalContext(); }
                    else {
                        if (typeof Xrm != "undefined") {
                            return Xrm.Page.context;
                        else { return new Error("Context is not available."); }
                _getServerUrl: function () {
                    var serverUrl = this._context().getServerUrl()
                    if (serverUrl.match(/\/$/)) {
                        serverUrl = serverUrl.substring(0, serverUrl.length - 1);
                    return serverUrl;
                _ODataPath: function () {
                    return this._getServerUrl() + "/XRMServices/2011/OrganizationData.svc/";
                _errorHandler: function (req) {
                    return new Error("Error : " +
      req.status + ": " +
      req.statusText + ": " +
      JSON.parse(req.responseText).error.message.value);
                _dateReviver: function (key, value) {
                    var a;
                    if (typeof value === 'string') {
                        a = /Date\(([-+]?\d+)\)/.exec(value);
                        if (a) {
                            return new Date(parseInt(value.replace("/Date(", "").replace(")/", ""), 10));
                    return value;
                Create: function (object, type, successCallback, errorCallback) {
                    var req = new XMLHttpRequest();
                    req.open("POST", this._ODataPath() + type + "Set", true);
                    req.setRequestHeader("Accept", "application/json");
                    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                    req.onreadystatechange = function () {
                        if (this.readyState == 4 /* complete */) {
                            if (this.status == 201) {
                                successCallback(JSON.parse(this.responseText, SDK.JScriptRESTDataOperations._dateReviver).d);
                            else {
                                errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
                    req.send(JSON.stringify(object));
                Retrieve: function (id, type, successCallback, errorCallback) {
                    var req = new XMLHttpRequest();
                    req.open("GET", this._ODataPath() + type + "Set(guid'" + id + "')", true);
                    req.setRequestHeader("Accept", "application/json");
                    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                    req.onreadystatechange = function () {
                        if (this.readyState == 4 /* complete */) {
                            if (this.status == 200) {
                                successCallback(JSON.parse(this.responseText, SDK.JScriptRESTDataOperations._dateReviver).d);
                            else {
                                errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
                    req.send();
                Update: function (id, object, type, successCallback, errorCallback) {
                    var req = new XMLHttpRequest();
                    req.open("POST", this._ODataPath() + type + "Set(guid'" + id + "')", true);
                    req.setRequestHeader("Accept", "application/json");
                    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                    req.setRequestHeader("X-HTTP-Method", "MERGE");
                    req.onreadystatechange = function () {
                        if (this.readyState == 4 /* complete */) {
                            if (this.status == 204 || this.status == 1223) {
                                successCallback();
                            else {
                                errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
                    req.send(JSON.stringify(object));
                Delete: function (id, type, successCallback, errorCallback) {
                    var req = new XMLHttpRequest();
                    req.open("POST", this._ODataPath() + type + "Set(guid'" + id + "')", true);
                    req.setRequestHeader("Accept", "application/json");
                    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                    req.setRequestHeader("X-HTTP-Method", "DELETE");
                    req.onreadystatechange = function () {
                        if (this.readyState == 4 /* complete */) {
                            if (this.status == 204 || this.status == 1223) {
                                successCallback();
                            else {
                                errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
                    req.send();
                RetrieveMultiple: function (type, filter, successCallback, errorCallback) {
                    if (filter != null) {
                        filter = "?" + filter;
                    else { filter = ""; }
                    var req = new XMLHttpRequest();
                    req.open("GET", this._ODataPath() + type + "Set" + filter, true);
                    req.setRequestHeader("Accept", "application/json");
                    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                    req.onreadystatechange = function () {
                        if (this.readyState == 4 /* complete */) {
                            if (this.status == 200) {
                                successCallback(JSON.parse(this.responseText, SDK.JScriptRESTDataOperations._dateReviver).d.results);
                            else {
                                errorCallback(SDK.JScriptRESTDataOperations._errorHandler(this));
                    req.send();
                __namespace: true
        </script>
        <script type="text/javascript">
            //Create Email and link it with Order as Regarding field
            var Xrm;
            var email = new Object();
            var ownerID = "";
            var CustomerId = "";
            if (window.opener) { Xrm = window.opener.Xrm; }
            else if (window.parent) { Xrm = window.parent.Xrm; }
            //Get ownerid who send email of quotation to customer
            function GetOwnerID() {
                var owner = Xrm.Page.getAttribute("ownerid").getValue();
                ownerID = owner[0].id;
                var ownerName = owner[0].name;
                var entityType = owner[0].entityType;
                GetToEmailGUID();
            //Get customerid who receive email of quotation from owner
            function GetToEmailGUID() {
                var Customer = Xrm.Page.getAttribute('customerid').getValue();
                CustomerId = Customer[0].id;
                var CustomerName = Customer[0].name;
                var entityType = Customer[0].entityType;
                //if CustomerId is type of "Account" then get Primary Contact id of that account
                if (entityType == "account") {
                    var contact = Xrm.Page.getAttribute("customerid").getValue();
                    if (contact === null) return;
                    var serverUrl = Xrm.Page.context.getClientUrl();
                    var oDataSelect = serverUrl + "/XRMServices/2011/OrganizationData.svc/AccountSet(guid'" + contact[0].id + "')?$select=PrimaryContactId";
                    var req = new XMLHttpRequest();
                    req.open("GET", oDataSelect, false);
                    req.setRequestHeader("Accept", "application/json");
                    req.setRequestHeader("Content-Type", "application/json;charset=utf-8");
                    req.onreadystatechange = function () {
                        if (req.readyState === 4) {
                            if (req.status === 200) {
                                var retrieved = JSON.parse(req.responseText).d;
                                CustomerId = retrieved.PrimaryContactId.Id;
                            else {
                                alert(this.statusText);
                    req.send();
            function CreateEmail() {
                GetOwnerID();
                email.Subject = "Email with Report Attachment";
                //Set The current order as the Regarding object
                email.RegardingObjectId = {
                    Id: Xrm.Page.data.entity.getId(),    //Get the current entity Id , here OrderId
                    LogicalName: Xrm.Page.data.entity.getEntityName()//Get the current entity name, here it will be “salesOrder”
                //Create Email Activity
                SDK.JScriptRESTDataOperations.Create(email, "Email", EmailCallBack, function (error) { alert(error.message); });
            // Email Call Back function
            function EmailCallBack(result) {
                email = result; // Set the email to result to use it later in email attachment for retrieving activity Id
                var activityPartyFrom = new Object();
                // Set the From party of the ActivityParty to relate an entity with Email From field
                activityPartyFrom.PartyId = {
                    Id: CustomerId, //"79EBDD26-FDBE-E311-8986-D89D6765B238",  // id of entity you want to associate this activity with.        
                    LogicalName: "contact"
                // Set the "activity" of the ActivityParty
                activityPartyFrom.ActivityId = {
                    Id: result.ActivityId,
                    LogicalName: "email"
                // Now set the participation type that describes the role of the party on the activity).
                activityPartyFrom.ParticipationTypeMask = { Value: 2 }; // 2 means ToRecipients
                // Create the from ActivityParty for the email
                SDK.JScriptRESTDataOperations.Create(activityPartyFrom, "ActivityParty", ActivityPartyFromCallBack, function (error) { alert(error.message); });
                var activityPartyTo = new Object();
                // Set the From party of the ActivityParty to relate an entity with Email From field
                activityPartyTo.PartyId = {
                    Id: ownerID, //"79EBDD26-FDBE-E311-8986-D89D6765B238",  // id of entity you want to associate this activity with.        
                    LogicalName: "systemuser"
                // Set the "activity" of the ActivityParty  
                activityPartyTo.ActivityId = {
                    Id: result.ActivityId,
                    LogicalName: "email"
                // Now set the participation type that describes the role of the party on the activity).    
                activityPartyTo.ParticipationTypeMask = { Value: 1 }; // 1 means Sender
                // Create the from ActivityParty
                SDK.JScriptRESTDataOperations.Create(activityPartyTo, "ActivityParty", ActivityPartyToCallBack, function (error) { alert(error.message); });
            //ActivityParty From Callback
            function ActivityPartyFromCallBack(result) {
            //ActivityParty To Callback
            function ActivityPartyToCallBack(result) {
                GetReportId('ABM_Infotech_SalesQuote');
            //Create attachment for the created email
            function CreateEmailAttachment() {
                //get reporting session and use the params to convert a report in PDF
                var params = getReportingSession();
                //Email attachment parameters
                var activitymimeattachment = Object();
                activitymimeattachment.ObjectId = Object();
                activitymimeattachment.ObjectId.LogicalName = "email";
                activitymimeattachment.ObjectId.Id = email.ActivityId;
                activitymimeattachment.ObjectTypeCode = "email",
                    activitymimeattachment.Subject = "File Attachment";
                activitymimeattachment.Body = encodePdf(params);
                activitymimeattachment.FileName = "Report1.pdf";
                activitymimeattachment.MimeType = "application/pdf";
                //Attachment call
                SDK.JScriptRESTDataOperations.Create(activitymimeattachment, "ActivityMimeAttachment", ActivityMimeAttachmentCallBack, function (error) { alert(error.message); });
            //ActivityMimeAttachment CallBack function
            function ActivityMimeAttachmentCallBack(result) {
                var features = "location=no,menubar=no,status=no,toolbar=no,resizable=yes";
                var width = "800px";
                var height = "600px";
                window.open(Xrm.Page.context.getServerUrl() + "main.aspx?etc=" + 4202 + "&pagetype=entityrecord&id=" + email.ActivityId, "_blank", features);
                // To open window which works in outlook and IE both
                //openStdWin(Xrm.Page.context.getServerUrl() + "main.aspx?etc=" + 4202 + "&pagetype=entityrecord&id=" + email.ActivityId, "_blank", width,
    height, features);
            //This method will get the reportId based on a report name that will be used in            getReportingSession() function
            function GetReportId(reportName) {
                var oDataSetName = "ReportSet";
                var columns = "ReportId";
                var filter = "Name eq '" + reportName + "'";
                retrieveMultiple(oDataSetName, columns, filter, onSuccess);
            function retrieveMultiple(odataSetName, select, filter, successCallback) {
                var serverUrl = Xrm.Page.context.getServerUrl();
                var ODATA_ENDPOINT = "/XRMServices/2011/OrganizationData.svc";
                var odataUri = serverUrl + ODATA_ENDPOINT + "/" + odataSetName + "?";
                if (select) {
                    odataUri += "$select=" + select + "&";
                if (filter) {
                    odataUri += "$filter=" + filter;
                $.ajax({
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    datatype: "json",
                    url: odataUri,
                    beforeSend: function (XMLHttpRequest) {
                        XMLHttpRequest.setRequestHeader("Accept", "application/json");
                    success: function (data) {
                        if (successCallback) {
                            if (data && data.d && data.d.results) {
                                successCallback(data.d.results);
                            else if (data && data.d) {
                                successCallback(data.d);
                            else {
                                successCallback(data);
                    error: function (XmlHttpRequest, errorThrown) {
                        if (XmlHttpRequest && XmlHttpRequest.responseText) {
                            alert("Error while retrieval ; Error – " + XmlHttpRequest.responseText);
            function onSuccess(data) {
                reportId = data[0].ReportId.replace('{', ").replace('}', ");
                CreateEmailAttachment(); // Create Email Attachment
            //Gets the report contents
            function getReportingSession() {
                var pth = Xrm.Page.context.getServerUrl() + "/CRMReports/rsviewer/reportviewer.aspx";
                var retrieveEntityReq = new XMLHttpRequest();
                var Id = Xrm.Page.data.entity.getId();
                var quotationGUID = Id.replace('{', ""); //set this to selected quotation GUID
                quotationGUID = quotationGUID.replace('}', "");
                var reportName = "ABM_Infotech_SalesQuote"; //set this to the report you are trying to download
                var reportID = "751089AA-74B8-E211-B52F-D8D3855B253B"; //set this to the guid of the report you are trying to download
                var rptPathString = ""; //set this to the CRMF_Filtered parameter
                var strParameterXML = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'><entity name='quote'><all-attributes /><filter type='and'><condition
    attribute='quoteid' operator='eq' uitype='quote' value='" + quotationGUID + "' /> </filter></entity></fetch>";
                retrieveEntityReq.open("POST", pth, false);
                retrieveEntityReq.setRequestHeader("Accept", "*/*");
                retrieveEntityReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                rptPathString = "id=%7B" + reportID + "%7D&uniquename=" + Xrm.Page.context.getOrgUniqueName() + "&iscustomreport=true&reportnameonsrs=&reportName="
    +
                                reportName + "&isScheduledReport=false&p:ABMFilteredQuote=" + strParameterXML;
                //remove the part starting from &p:salesorderid if your report has no parameters
                retrieveEntityReq.send(rptPathString);
                var x = retrieveEntityReq.responseText.indexOf("ReportSession=");
                var ret = new Array();
                ret[0] = retrieveEntityReq.responseText.substr(x + 14, retrieveEntityReq.responseText.indexOf("&", x) - x - 14); //the session id
                x = retrieveEntityReq.responseText.indexOf("ControlID=");
                ret[1] = retrieveEntityReq.responseText.substr(x + 10, retrieveEntityReq.responseText.indexOf("&", x) - x - 10); //the control id
                return ret;
            var bdy = new Array();
            var bdyLen = 0;
            function concat2Bdy(x) {
                bdy[bdyLen] = x;
                bdyLen++;
            function encodePdf(params) {
                bdy = new Array();
                bdyLen = 0;
                var retrieveEntityReq = new XMLHttpRequest();
                var pth = Xrm.Page.context.getServerUrl() + "/Reserved.ReportViewerWebControl.axd?ReportSession=" + params[0] +
                "&Culture=1033&CultureOverrides=True&UICulture=1033&UICultureOverrides=True&ReportStack=1&ControlID=" + params[1] +
                "&OpType=Export&FileName=Public&ContentDisposition=OnlyHtmlInline&Format=PDF";
                retrieveEntityReq.open("GET", pth, false);
                retrieveEntityReq.setRequestHeader("Accept", "*/*");
                retrieveEntityReq.send();
                BinaryToArray(retrieveEntityReq.responseBody);
                return encode64(bdy);
            var StringMaker = function () {
                this.parts = [];
                this.length = 0;
                this.append = function (s) {
                    this.parts.push(s);
                    this.length += s.length;
                this.prepend = function (s) {
                    this.parts.unshift(s);
                    this.length += s.length;
                this.toString = function () {
                    return this.parts.join('');
            var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
            function encode64(input) {
                var output = new StringMaker();
                var chr1, chr2, chr3;
                var enc1, enc2, enc3, enc4;
                var i = 0;
                while (i < input.length) {
                    chr1 = input[i++];
                    chr2 = input[i++];
                    chr3 = input[i++];
                    enc1 = chr1 >> 2;
                    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
                    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
                    enc4 = chr3 & 63;
                    if (isNaN(chr2)) {
                        enc3 = enc4 = 64;
                    } else if (isNaN(chr3)) {
                        enc4 = 64;
                    output.append(keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4));
                return output.toString();
        </script>
        <script type="text/vbscript">
        Function BinaryToArray(Binary)
               Dim i
               ReDim byteArray(LenB(Binary))
               For i = 1 To LenB(Binary)
                     byteArray(i-1) = AscB(MidB(Binary, i, 1))
                     concat2Bdy(AscB(MidB(Binary, i, 1)))
             Next
              BinaryToArray = byteArray
       End Function     
        </script>
    </head>
    <body>
        <input type="button" onclick="CreateEmail();" value="Attach Report" />
    </body>
    </html>

Maybe you are looking for