Автор Тема: Примеры работы SO_NEW_DOCUMENT_SEND_API1 (отправка сообщений)  (Прочитано 79380 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
В общем-то вполне полезный функционал который позволяет отправлять сообщения пользователям как по системе так и на внешние e-mail адреса, ну если конечно ваши администраторы настроили соответствующий функционал системы и отправка разрешена на выбранные домены.

В общем виде шаблон вызова ФМ представлен в следующем виде:
Код: You are not allowed to view links. Register or Login
CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
  EXPORTING
    document_data                    =
*   DOCUMENT_TYPE                    = 'RAW'
*   PUT_IN_OUTBOX                    = ' '
* IMPORTING
*   SENT_TO_ALL                      =
*   NEW_OBJECT_ID                    =
  tables
*   OBJECT_HEADER                    =
*   OBJECT_CONTENT                   =
*   CONTENTS_HEX                     =
*   OBJECT_PARA                      =
*   OBJECT_PARB                      =
    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.

Ну и расшифруем некоторые параметры ФМ-ки:
Код: You are not allowed to view links. Register or Login
DOCUMENT_DATA - содержит заголовок отправляемого документа, полей в нем много и большая часть из них актуальная для хранения документа в sapoffice. Из того что обязательно/желательно заполнить в данной стркутуре:
OBJ_NAME - Имя документа,
OBJ_DESCR - Краткое описание,  собственно фактически это аналог темы e-mail сообщений
OBJ_LANGU - Код языка, ну сюда обычно толкаем значение из SY-LANGU, если не требуется что либо другое
SENSITIVTY - Степень конфиденциальности документа пока возможны следующие значения:
P Личный объект
F Функциональный объект
O Конфиденциальный объект
C Конфиденциальный объект фирмы
EXPIRY_DAT - Дата истчения срока действия сообщения. Полезно использовать совместно с параметром PUT_IN_OUTBOX.
NO_CHANGE - Если поставить в Х, то документ невозможно будет изменить. Само собой актуально для SapOffice
PUT_IN_OUTBOX - Иногда полезная функция, позволяте оставить отправленное сообщение в папке исходящие. Полезно для разбора полетов было сформировано сообщение или нет, ну если это какая-то вертушка работает.
DOCUMENT_TYPE - Тип документа который отправляется. Фактически это тип данных который передается в таблице OBJECT_CONTENT. Констант там определено дочертиков, опять же разницу в использовании определяйте сами, я лично пользовался всего парочкой из предложенного ниже списка (в примерах будет показано), а так вот оно:
      fol like sood-objtp value 'FOL', " Folder
      dli like sood-objtp value 'DLI', " Distributionlist
      usr like sood-objtp value 'USR', " User
      sys like sood-objtp value 'SYS', " System
      raw like sood-objtp value 'RAW', " RAW-Text
      int like sood-objtp value 'INT', " RAW-Text mit byte count
      bin like sood-objtp value 'BIN', " Binary Objects
      doc like sood-objtp value 'DOC', " Word - documents
      xls like sood-objtp value 'XLS', " Exel - documents
      img like sood-objtp value 'IMG', " Image-link
      otf like sood-objtp value 'OTF', " SAPscript Ausgabeformat
      rtf like sood-objtp value 'RTF', " RTF Editor (no TOM)
      txt like sood-objtp value 'TXT', " Text Format (notepad -no TOM)
      htm like sood-objtp value 'HTM', " HTML Format (no TOM)
      scr like sood-objtp value 'SCR', " SAPscript-Texte
      adr like sood-objtp value 'ADR', " Adressen
      org like sood-objtp value 'ORG', " organisation unit
      obj like sood-objtp value 'OBJ', " sap object
      ofo like sood-objtp value 'OFO', " object folder'RAW'
      url like sood-objtp value 'URL', " Internet/Intranet-Link
      dat like sood-objtp value 'DAT', " Date (Termin)
      qry like sood-objtp value 'QRY', " Suchabfragen SAPfind
      shl like sood-objtp value 'SHL', " Shelltexte SAPfind
      gry like sood-objtp value 'GRY', " SAP Prôsentationsgraphik
      fax like sood-objtp value 'FAX', " Telefax
      ext like sood-objtp value 'EXT', " PC documents
      arc like sood-objtp value 'ARC', " ArchiveLink
      ali like sood-objtp value 'ALI', " ABAP lists
      idc like sood-objtp value 'IDC', " idocs for edi as referenz
      r3i like sood-objtp value 'R3I', " idocs for edi as referenz
      wfl like sood-objtp value 'WFL', " WorkFlow
      gra like sood-objtp value 'GRA'. " SAP Prôsentationsgraphik

OBJECT_CONTENT - Собственно сам текст сообщения хранится в данной таблице, вообще там все по простому просто таблица строк в 255 символов длинной.
RECEIVERS - Список получателей, тут структура посложнее хотя не все нам из нее нужно:
RECEIVER - Имя получателя. Сюда можно записать как имя пользователя в система SAP так и внешний e-mail адрес.
REC_TYPE - Собственно поле определяющее что же мы записали в RECEIVER. По умолчнию предполагается что там записан пользователь из системы SAP, но вообще список довольно большой, пользовал или B - пользователь SAP или же U - что соответствует e-mail адресу Кстати из списка значений ясно что можно организовать рассылку списку адресатов из SAPoffice.
P Личный список адресатов
C Общий список адресатов
O Пользователь SAPoffice
B SAP-пользователь
U Адрес в Интернете
X X.400-адрес
R SAP-пользователь в другой SAP-системе
A Внешний адрес
F Номер факса
D X.500-адрес
L Номер телекса
H Организационная единица/Штатная должность
J SAP-объект
G Организационный объект/Ид.
EXPRESS - Полезная галочка, если нужно то по SAPoffice документ придет с отметкой экспресс, т.е. вывалится сообщение пользователю.

Ну а остальные поля уже по вкусу разбирайте от требований ситуации. В принципе для простой отправки текста данных уже хватает с головой. Так что можно перейти к практическому примеру. Например программа отработала и вывалила список сообщений обычными WRITE и к примеру вам надо этот сформированный отчет в некотором случае отправить пользователю по системе SAP.

Код: You are not allowed to view links. Register or Login
  DATA: real_type LIKE soodk-objtp,
        document_data LIKE sodocchgi1,
        so_ali LIKE soli OCCURS 100 WITH HEADER LINE,
        rec_tab LIKE somlreci1 OCCURS 1 WITH HEADER LINE.

* Сначала получит данные спула, куда шел вывод.
  CALL FUNCTION 'RSPO_RETURN_SPOOLJOB'
       EXPORTING
            rqident              = SY-SPONO
            first_line           = '1'
            desired_type         = 'ALI'
       IMPORTING
            real_type            = real_type
       TABLES
            buffer               = so_ali
       EXCEPTIONS
            no_such_job          = 1
            job_contains_no_data = 2
            selection_empty      = 3
            no_permission        = 4
            can_not_access       = 5
            read_error           = 6
            type_no_match        = 7
            OTHERS               = 8.
  IF sy-subrc = 0.
    document_data-obj_langu = sy-langu.
    document_data-obj_name = 'Liste'(sls).
    document_data-obj_descr = sy-title.
    document_data-sensitivty = 'O'.

    MOVE: 'UUKRUL_SAP' TO rec_tab-receiver,
          'X'  TO rec_tab-express.
    APPEND rec_tab.

    CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
         EXPORTING
              document_data              = document_data
              document_type              = real_type
              put_in_outbox              = 'X'
         TABLES
              object_content             = so_ali
              receivers                  = rec_tab
         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.
  ENDIF.

Для отправки на e-mail меняем тип получателя на 'U' задаем адрес и тип документа 'RAW', затем после отправки собственно всей почты требуется вызвать коммуникационную программу которая собственно говоря и сделает физическую отправку почты. Обычно админы данную программу планируют в фоне с периодичностью от часа до... сколько им там нужно, но никто ж нам не запрещает это дело подтолкнуть. Для этого требуется вызвать следующий код:

Код: You are not allowed to view links. Register or Login
    SUBMIT rsconn01 WITH mode = 'INT'
                    WITH output = 'X'
           TO SAP-SPOOL DESTINATION 'LOCL' IMMEDIATELY ' '
           KEEP IN SPOOL 'X' DATASET EXPIRATION 14
           WITHOUT SPOOL DYNPRO AND RETURN.

Вызывать только при отправке на адреса e-mail, для внутренних пользователей SAPoffice, это делать не нужно.

Оффлайн Skif

  • Jr. Member
  • **
  • Сообщений: 726
  • Репутация: +10/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
дошло что он rfc :)
неясно только что значит тип получателя "R" - если вызываешь как RFC, то пользователь-то уже локальный?

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
неясно только что значит тип получателя "R" - если вызываешь как RFC, то пользователь-то уже локальный?
R - SAP-пользователь в другой SAP-системе... т.е. локальный для системы получателя.

Оффлайн Skif

  • Jr. Member
  • **
  • Сообщений: 726
  • Репутация: +10/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
R - SAP-пользователь в другой SAP-системе... т.е. локальный для системы получателя.
ну так модуль уже запускается в системе-получателе как rfc
фактически ему передаются только адресат и пакет, а исполняется уже всё там
те передать локальному (для destination) юзеру
если указать 'B'  то что-то разве изменится?...
впрочем может логику какую завязали на этом...

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 158
  • Репутация: +9/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
а также форматированный вывод
ошеннно красиво получается  ;D
You are not allowed to view links. Register or Login
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Report  ZTEST_SEND_MAIL_HTML
*&---------------------------------------------------------------------*
*& This report will show how to send the Formatted Emails using
*&   SAPConnect
*&---------------------------------------------------------------------*
REPORT  ztest_np_send_mail.

DATA:
t_objbin   TYPE STANDARD TABLE OF solisti1,   " Attachment data
t_objtxt   TYPE STANDARD TABLE OF solisti1,   " Message body
t_objpack  TYPE STANDARD TABLE OF sopcklsti1, " Packing list
t_reclist  TYPE STANDARD TABLE OF somlreci1,  " Receipient list
t_objhead  TYPE STANDARD TABLE OF solisti1.   " Header

DATA: wa_docdata TYPE sodocchgi1,   " Document data
      wa_objtxt  TYPE solisti1,     " Message body
      wa_objbin  TYPE solisti1,     " Attachment data
      wa_objpack TYPE sopcklsti1,   " Packing list
      wa_reclist TYPE somlreci1.    " Receipient list

DATA: w_tab_lines TYPE i.           " Table lines

* Selection Screen
PARAMETERS: p_email TYPE char120 obligatory
                VISIBLE LENGTH 40
                LOWER CASE.

* Start-of-selection
START-OF-SELECTION.

* Creating message
  PERFORM create_message.

* Sending Message
  PERFORM send_message.

*&---------------------------------------------------------------------*
*&      Form  create_message
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM create_message .

**1 Title, Description & Body
  PERFORM create_title_desc_body.

**2 Receivers
  PERFORM fill_receivers.

ENDFORM.                    " create_message

*&---------------------------------------------------------------------*
*&      Form  CREATE_TITLE_DESC_BODY
*&---------------------------------------------------------------------*
*       Title, Description and body
*----------------------------------------------------------------------*
FORM create_title_desc_body.

*...Title
  wa_docdata-obj_name  = 'Email notification'.

*...Description
  wa_docdata-obj_descr = 'Email body in HTML'.

*...Message Body in HMTL
  wa_objtxt-line = '<html> <body style="background-color:#FFE4C4;">'.
  APPEND wa_objtxt TO t_objtxt.

  wa_objtxt-line = '<p> List of Test materials </p>'.
  APPEND wa_objtxt TO t_objtxt.

*   table display
  wa_objtxt-line = '<table style="MARGIN: 10px" bordercolor="#90EE90" '.
  APPEND wa_objtxt TO t_objtxt.
  wa_objtxt-line = ' cellspacing="0" cellpadding="3" width="400"'.
  APPEND wa_objtxt TO t_objtxt.
  wa_objtxt-line = ' border="1"><tbody><tr>'.
  APPEND wa_objtxt TO t_objtxt.

*   table header
  wa_objtxt-line = '<th bgcolor="#90EE90">Material</th>'.
  APPEND wa_objtxt TO t_objtxt.
  wa_objtxt-line = '<th bgcolor="#90EE90">Description</th></tr>'.
  APPEND wa_objtxt TO t_objtxt.

*   table Contents
  DO 5 TIMES.
    wa_objtxt-line = '<tr style="background-color:#eeeeee;"><td>TEST</td>'.
    APPEND wa_objtxt TO t_objtxt.
    CONCATENATE '<td>' sy-abcde '</td> </tr>' INTO wa_objtxt-line.
    APPEND wa_objtxt TO t_objtxt.
  ENDDO.

*   table close
  wa_objtxt-line = '</tbody> </table>'.
  APPEND wa_objtxt TO t_objtxt.

*   Hyperlink
  wa_objtxt-line = '<br> <br>'.
  APPEND wa_objtxt TO t_objtxt.
  wa_objtxt-line = '<p><a href="http://help-abap.blogspot.com">'.
  APPEND wa_objtxt TO t_objtxt.
  wa_objtxt-line = 'Click here to check the latest post</a></p>'.
  APPEND wa_objtxt TO t_objtxt.

*   Signature with background color
  wa_objtxt-line = '<br><br>'.
  APPEND wa_objtxt TO t_objtxt.
  wa_objtxt-line = '<p> Regards,</p>'.
  APPEND wa_objtxt TO t_objtxt.
  wa_objtxt-line = '<p style="background-color:#1E90FF;"><b>Naimesh Patel</b></p>'.
  APPEND wa_objtxt TO t_objtxt.


*   HTML close
  wa_objtxt-line = '</body> </html> '.
  APPEND wa_objtxt TO t_objtxt.

* Document data
  DESCRIBE TABLE t_objtxt      LINES w_tab_lines.
  READ     TABLE t_objtxt      INTO wa_objtxt INDEX w_tab_lines.
  wa_docdata-doc_size =
      ( w_tab_lines - 1 ) * 255 + STRLEN( wa_objtxt ).

* Packing data
  CLEAR wa_objpack-transf_bin.
  wa_objpack-head_start = 1.
  wa_objpack-head_num   = 0.
  wa_objpack-body_start = 1.
  wa_objpack-body_num   = w_tab_lines.
*   we will pass the HTML, since we have created the message
*   body in the HTML
  wa_objpack-doc_type   = 'HTML'.
  APPEND wa_objpack TO t_objpack.

ENDFORM.                    " CREATE_TITLE_DESC_BODY

*&---------------------------------------------------------------------*
*&      Form  fill_receivers
*&---------------------------------------------------------------------*
*       Filling up the Receivers
*----------------------------------------------------------------------*
FORM fill_receivers .

  wa_reclist-receiver = p_email.
  wa_reclist-rec_type = 'U'.
  APPEND wa_reclist TO t_reclist.
  CLEAR  wa_reclist.


ENDFORM.                    " fill_receivers
*&---------------------------------------------------------------------*
*&      Form  send_message
*&---------------------------------------------------------------------*
*       Sending Mail
*----------------------------------------------------------------------*
FORM send_message .

* Send Message to external Internet ID
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      document_data              = wa_docdata
      put_in_outbox              = 'X'
      commit_work                = 'X'     "used from rel.6.10
    TABLES
      packing_list               = t_objpack
      object_header              = t_objhead
      contents_txt               = t_objtxt
      receivers                  = t_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 NE 0.
    WRITE: 'Sending Failed'.
  ELSE.
    WRITE: 'Sending Successful'.
  ENDIF.


ENDFORM.                    " send_message

PS: Uukrul, подправил код на предмет заключения в скобки code /code
« Последнее редактирование: Октябрь 15, 2010, 11:41:19 am от Uukrul »

Оффлайн lestat

  • Newbie
  • *
  • Сообщений: 2
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
А подскажите пожалуйста, как прикрепить к вложениям отправляемого письма файл XLS! Допустим файл сформировался - куда-нибудь сложился на комп и потом его сразу отправить?

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
А подскажите пожалуйста, как прикрепить к вложениям отправляемого письма файл XLS! Допустим файл сформировался - куда-нибудь сложился на комп и потом его сразу отправить?
Ну тут есть вариант описания отправки сообщения с вложением, посмотри пример: You are not allowed to view links. Register or Login

Оффлайн lestat

  • Newbie
  • *
  • Сообщений: 2
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Спасибо за пример! А этот пример отправляет на любую почту письма, в том числе и на внешнюю?

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Спасибо за пример! А этот пример отправляет на любую почту письма, в том числе и на внешнюю?
Тип получателя наверное надо указать правильно. Ну и разрешения дложня быть на отправку почты на внешние адреса.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
А этот фм из примера вообще ничего не делает... коммит в конце раскоментил...
Не подскажешь как самое простое с помощью SO_NEW_DOCUMENT_SEND_API1 прилепить к вложениям XLS?
Так почему ты решил что ничего не делается? При отправке почты из SAP она не уходит сразу на указанный адрес. Сообщение попадет в очередь и в зависимости от настройки администраторами, физическая отправка происходит периодическим заданием или в ручном режиме запустить транзакцию SCOT и там выбрать режим "Запустить процесс отправки". Или вы это делали?

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Подскажите пожалуйста.
Пытаюсь Смартформу конвертнуть в ПДФ, приатачить к письму и отправить.
но при выполнении функции "SO_NEW_DOCUMENT_SEND_API1" получаю EXCEPTIONS x_error = 6
В чем может быть проблема?

Подставлял и U и R...

не могу понять в чем ошибка... :(
  itab_reclist-rec_type = 'R'. "U Internet address

Код: You are not allowed to view links. Register or Login
DATA: ls_output_data          TYPE ssfcrescl.
...
PERFORM send_emailnew TABLES ls_output_data-otfdata.
...
FORM send_emailnew TABLES p_otf.

* Definitions for emailing
DATA: itab_otf        TYPE TABLE OF itcoo WITH HEADER LINE,
      itab_lines      TYPE TABLE OF tline WITH HEADER LINE,
      itab_receivers  TYPE TABLE OF somlreci1 WITH HEADER LINE,
      itab_objpack    TYPE TABLE OF sopcklsti1 WITH HEADER LINE,
      itab_objtxt     TYPE TABLE OF solisti1 WITH HEADER LINE,
      itab_pdf        TYPE TABLE OF solisti1 WITH HEADER LINE,
      itab_reclist    TYPE TABLE OF somlreci1 WITH HEADER LINE,
*      l_return TYPE ssfcrescl,
      l_doc_chng      TYPE sodocchgi1,
      l_bin_size      LIKE sood-objlen,
      l_lines         TYPE i.
* Convert Smart Form output into PDF binary format
  itab_otf[] = p_otf[].

*  CALL FUNCTION 'CONVERT_OTF'
  CALL FUNCTION 'CONVERT_OTF_2_PDF'
*    EXPORTING
*      format                = 'PDF'
*      max_linewidth         = 132
    IMPORTING
      bin_filesize          = l_bin_size
    TABLES
      otf                   = itab_otf
      doctab_archive        = gt_docs
      lines                 = itab_lines
    EXCEPTIONS
      err_max_linewidth     = 1
      err_format            = 2
      err_conv_not_possible = 3
      err_bad_otf           = 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.

  REFRESH itab_pdf[].

  CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
    EXPORTING
      line_width_dst              = '255'
    TABLES
      content_in                  = itab_lines
      content_out                 = itab_pdf
    EXCEPTIONS
      err_line_width_src_too_long = 1
      err_line_width_dst_too_long = 2
      err_conv_failed             = 3
      OTHERS                      = 4.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CLEAR: l_doc_chng, itab_reclist, itab_objtxt, itab_objpack.
  REFRESH: itab_reclist, itab_objtxt, itab_objpack.

  l_doc_chng-obj_name   = sy-repid.
  l_doc_chng-obj_descr  = 'Test'.
  l_doc_chng-sensitivty = 'O'.

* Email body text
  itab_objtxt-line = 'Test'.
  APPEND itab_objtxt.

* Packing for body text.
  DESCRIBE TABLE itab_objtxt LINES l_lines.

 l_doc_chng-doc_size = ( l_lines - 1 ) * 255 + strlen( itab_objtxt ).

  CLEAR itab_objpack-transf_bin.
  itab_objpack-head_start = 1.
  itab_objpack-head_num   = 0.
  itab_objpack-body_start = 1.
  itab_objpack-body_num   = l_lines.
  itab_objpack-doc_type   = 'RAW'.
  itab_objpack-doc_size   = l_lines * 255.
  APPEND itab_objpack.

* Packing for PDF.
  DESCRIBE TABLE itab_pdf LINES l_lines.
  itab_objpack-transf_bin = 'X'.
  itab_objpack-head_start = 1.
  itab_objpack-head_num   = 1.
  itab_objpack-body_start = 1.
  itab_objpack-body_num   = l_lines.
  itab_objpack-doc_type   = 'PDF'.
  itab_objpack-obj_name   = 'Invoice'.
  CONCATENATE itab_objpack-obj_name '.pdf' INTO itab_objpack-obj_descr.
  itab_objpack-doc_size = l_lines * 255.
  APPEND itab_objpack.

* Email recipient list
  itab_reclist-rec_type = 'R'. "U Internet address
  itab_reclist-receiver = '****@***.com'.
  APPEND itab_reclist.

* Sending mail.
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
*  CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
    EXPORTING
      document_data              = l_doc_chng
      put_in_outbox              = 'X'
      commit_work                = 'X'
    TABLES
      packing_list               = itab_objpack
      contents_bin               = itab_pdf
      contents_txt               = itab_objtxt
      receivers                  = itab_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.


ENDFORM.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Значит так,  R - это имя сап пользователя, а ты отправляешь на интернет почту, так что точно надо U ставить. Еще нужно узнать разрешена ли отправка сообщений за пределы системы, стандартно в системе отправка почты на E-mail закрыта.

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
Значит так,  R - это имя сап пользователя, а ты отправляешь на интернет почту, так что точно надо U ставить. Еще нужно узнать разрешена ли отправка сообщений за пределы системы, стандартно в системе отправка почты на E-mail закрыта.

Можете подсказать куда копать дабы открыть (что бы им подсказать) . а то они не знают и получается что неверно работает прога - то есть я крайний...

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Можете подсказать куда копать дабы открыть (что бы им подсказать) . а то они не знают и получается что неверно работает прога - то есть я крайний...
Как сказали знакомые базисники, типа читать тут: You are not allowed to view links. Register or Login

или тут:

You are not allowed to view links. Register or Login

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Спасибо.
Как оказалось. доступ все же есть.
Ошибка возникает если добавить такой блок:

То есть пытаюсь приатачить ПДФ документ.

Код: You are not allowed to view links. Register or Login
* Packing for PDF.
  DESCRIBE TABLE itab_pdf LINES l_lines.
  itab_objpack-transf_bin = 'X'.
  itab_objpack-head_start = 1.
  itab_objpack-head_num   = 1.
  itab_objpack-body_start = 1.
  itab_objpack-body_num   = l_lines.
  itab_objpack-doc_type   = 'PDF'.
  itab_objpack-obj_name   = 'DocName'.
  CONCATENATE itab_objpack-obj_name '.pdf' INTO itab_objpack-obj_descr.
  itab_objpack-doc_size = l_lines * 255.
  APPEND itab_objpack.

может кто-то такое делал, как описывать этот блок?

по поводу itab_objpack-doc_type   = 'PDF'.
Перешел через домен "SO_OBJ_TP" поля doc_type в таблицу TSOTD (Допустимые типы объектов)
и там кода 'PDF' нет, может из-за этого? если да то как его туда добавить?


Закоментил строку "doc_type   = 'PDF'." получил сообщение с вложением  "Name_PDF.pdf.txt"
Прописал типа "doc_type   = 'RAW'". получил сообщение с вложением  "Name_PDF.pdf.txt"

правда как текст там иероглифы, а если убрать .txt и оставить "Name_PDF.pdf" то пишет, что ошибка в чтении...

%(
« Последнее редактирование: Декабрь 14, 2012, 02:06:39 pm от Sed0Y »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Перешел через домен "SO_OBJ_TP" поля doc_type в таблицу TSOTD (Допустимые типы объектов)
и там кода 'PDF' нет, может из-за этого? если да то как его туда добавить?
А остальные типа BIN или EXT тоже не подходят?

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Нет (
может

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Нет
Почитай еще тут: You are not allowed to view links. Register or Login

и тут типа пример программы вроде как есть:

You are not allowed to view links. Register or Login

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
что-то не получается, вроде бы даже готовые с сайта примеры подставлял все равно... :(

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Сделал настройки как по ссылке(рис smtp.jpg):

И также сделал второй вариант отправки email с вложением PDF через клас "cl_bcs"

И тоже самое - оба, если прописываю type = 'PDF' ДАМП,
если type = 'RAW' получаем тело письма(1) и само вложение в ПДФ(2) (рис outlook.jpg)
Тело письма нормально читаемое,
а вот само вложение иероглифы (рис nopdf.jpg)





Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
попробовал зайти на почту САП (тр SBWP) и там создать себе письмо и риатачить какой-то документ
в результате получил ошбку "Ошибка БД при <INSERT INTO KPRO> <>"
На продуктиве все ОК с этим, так может оно как-то связано?

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
попробовал зайти на почту САП (тр SBWP) и там создать себе письмо и риатачить какой-то документ
в результате получил ошбку "Ошибка БД при <INSERT INTO KPRO> <>"
А еще одна система типа теста, где можно проверить под руками нет? Вполне может быть, что проблема с этим.

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
А еще одна система типа теста, где можно проверить под руками нет? Вполне может быть, что проблема с этим.
Спасибо.
Да, так и сделал.
Ошибка была(и есть пока что) в CRM, я перенес все наработки в ERP - и тут все отработало без ошибки.
Таки проблема базиса.
Если нужно могу тут выложить 1 готовый пример (есть 3 варианта реализации :) ).

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Если нужно могу тут выложить 1 готовый пример (есть 3 варианта реализации :) ).
Не только можно, но и нужно.. причем можно все три.. мало ли кому пригодится...

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
Не только можно, но и нужно.. причем можно все три.. мало ли кому пригодится...

позже (может уже в следующем году) выложу, нужно их подготовить - а то нет времени...

А пока такой вопрос, а как сделать, что бы письмо отправлялось от другого имени (которое будет постоянное)
к примеру [email protected], не меняя sy-uname?
« Последнее редактирование: Декабрь 18, 2012, 12:27:52 pm от Sed0Y »

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
"Ошибка БД при <INSERT INTO KPRO> <>"
Данный ФМ лезит в РФЦ...
эта ошибка была из-за неверной настройки HTTP_SERV в этом манданте..

Если хотите узнать под какой настройкой у вас лезит, поставьте остановку в ФМе "SCMS_HTTP_CREATE_TABLE"
и посмотрите на переменную "CREP_ID"
А дальше Таблицы в связке: SDOKSTCA-STOR_REP - > CREP_HTTP-CREP_ID

ну и Настройка тут(рис. so_new_document_send_api1.png)
« Последнее редактирование: Декабрь 18, 2012, 01:11:58 pm от Sed0Y »

Оффлайн ysichov

  • Newbie
  • *
  • Сообщений: 40
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
позже (может уже в следующем году) выложу, нужно их подготовить - а то нет времени...

А пока такой вопрос, а как сделать, что бы письмо отправлялось от другого имени (которое будет постоянное)
к примеру [email protected], не меняя sy-uname?

Код: You are not allowed to view links. Register or Login
lv_sender = '[email protected]'.

    CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
      EXPORTING
        document_data              = wa_docdata
        put_in_outbox              = 'X'
        sender_address             = lv_sender " space "
        sender_address_type        = 'INT' "space
        commit_work                = 'X'
      TABLES
        packing_list               = lt_objpack
        object_header              = lt_objhead
        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.

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
Код: You are not allowed to view links. Register or Login
lv_sender = '[email protected]'.

    CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
...
        sender_address             = lv_sender " space "
...
спасибо.

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Еще такой вопрос:
можно как-то перенаправить письмо, чтобы оно шло по другому SMTP хосту?

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Ну или через RFC?

Кста, тут хорошая статья как настроить RFC You are not allowed to view links. Register or Login

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Наткнулся на один прикол касательно вложения документа. Для меня это было ново..
Если у пользователя нет этой настройки (см. рис) то к письму не будет приатачен документ.

В тр su01
« Последнее редактирование: Январь 16, 2013, 12:08:29 pm от Sed0Y »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Если у пользователя нет этой настройки (см. рис) то к письму не будет приатачен документ.
Т.е. не задано устройство вывода по умолчанию? Или не задан немедленный вывод? Так как эти параметры доступны пользователю для изменений.

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
Т.е. не задано устройство вывода по умолчанию? Или не задан немедленный вывод? Так как эти параметры доступны пользователю для изменений.

Да, хорошо подметили - если не задано устройство вывода по умолчанию то не будет приатачен документ.
Подмечу - если отправка происходит в фоне то и фонового пользователя это тоже касается.
« Последнее редактирование: Январь 16, 2013, 12:41:28 pm от Sed0Y »

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Итак, как обещал.
Начну с cl_bcs

У меня была задача СМАРТФОРМ отправлять почтой.
Выбрал данный метод потому что, много плюсов, один из них это тема письма больше 50символов, и немедленная отправка без дерганья тр SCOT :)

Код: You are not allowed to view links. Register or Login
  DATA:
        l_function_module_name  TYPE rs38l_fnam.
* parameters for generated function module
  DATA:
        ls_output_options       TYPE ssfcompop,
        ls_control_parameters   TYPE ssfctrlop.

" тут получаем имя смартфомы
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = 'SMARTFORM_NAME'
    IMPORTING
      fm_name            = l_function_module_name
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      others             = 3.
  ls_control_parameters-no_dialog = 'X'.
  ls_control_parameters-getotf    = 'X'.

     CALL FUNCTION l_function_module_name
        EXPORTING
          control_parameters = ls_control_parameters
          output_options     = ls_output_options
          user_settings      = space
        IMPORTING
          job_output_info    = ls_output_data
        EXCEPTIONS
          formatting_error   = 1
          internal_error     = 2
          send_error         = 3
          user_canceled      = 4
          others             = 5.
.
DATA:
        itab_message_body TYPE TABLE OF solisti1 WITH HEADER LINE,
        l_bin_size        LIKE sood-objlen,
        lv_xstring        TYPE xstring,
        itab_lines        TYPE TABLE OF tline,
        itab_otf          TYPE TABLE OF itcoo.

     itab_otf[] = ls_output_data-otfdata[]

  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      format                = 'PDF'
      max_linewidth         = 132
    IMPORTING
      bin_filesize          = l_bin_size "#EC NEEDED
      bin_file              = lv_xstring
    TABLES
      otf                   = itab_otf
      lines                 = itab_lines
    EXCEPTIONS
      err_max_linewidth     = 1
      err_format            = 2
      err_conv_not_possible = 3
      OTHERS                = 4.

  CALL FUNCTION 'ZSEND_EMAIL'
    EXPORTING
      lines_xstring       = lv_xstring
      sender_email_from   = gl_email_from   " email FROM
      recipient_email_to  = gl_email_adress " email TO
      title_email         = lv_title_email
    IMPORTING
      result              = lv_senemail_res
    TABLES
      contents_text       = itab_message_body. " текст тела письма



Код: You are not allowed to view links. Register or Login
FUNCTION ZSEND_EMAIL.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     REFERENCE(LINES_XSTRING) TYPE  XSTRING
*"     REFERENCE(SENDER_EMAIL_FROM) TYPE  ADR6-SMTP_ADDR
*"     REFERENCE(RECIPIENT_EMAIL_TO) TYPE  ADR6-SMTP_ADDR
*"     REFERENCE(TITLE_EMAIL) TYPE  STRING OPTIONAL
*"     REFERENCE(TYPE_ATACH_DOC) TYPE  SO_OBJ_TP DEFAULT 'PDF'
*"     REFERENCE(NAME_ATACH_DOC) TYPE  SO_OBJ_DES DEFAULT 'SomeName'
*"  EXPORTING
*"     REFERENCE(RESULT) TYPE  I
*"  TABLES
*"      CONTENTS_BIN STRUCTURE  SOLISTI1 OPTIONAL
*"      CONTENTS_TEXT STRUCTURE  SOLISTI1 OPTIONAL
*"----------------------------------------------------------------------

DATA:
      zes_keg_email_documents_row   TYPE zes_keg_email_documents_row OCCURS 0 WITH HEADER LINE,
      zes_keg_email_recipients_row  TYPE zes_keg_email_recipients_row OCCURS 0 WITH HEADER LINE.

  zes_keg_email_documents_row-type            = type_atach_doc.
  zes_keg_email_documents_row-subject         = name_atach_doc.
  zes_keg_email_documents_row-content_text[]  = contents_text[].
  APPEND zes_keg_email_documents_row.

  zes_keg_email_recipients_row-c_address = recipient_email_to.
  zes_keg_email_recipients_row-i_express = 'X'.
  APPEND zes_keg_email_recipients_row.

  CALL FUNCTION 'ZEMAIL_WITH_CL_BCS'
    EXPORTING
      sender_address_from    = sender_email_from
      title_email            = title_email
      lines_xstring          = lines_xstring
      documents              = zes_keg_email_documents_row[]
      recipients             = zes_keg_email_recipients_row[]
    IMPORTING
      result                 = result.


ENDFUNCTION.




Код: You are not allowed to view links. Register or Login
FUNCTION ZEMAIL_WITH_CL_BCS.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     REFERENCE(SENDER_ADDRESS_FROM) TYPE  ADR6-SMTP_ADDR
*"     REFERENCE(TITLE_EMAIL) TYPE  STRING OPTIONAL
*"     REFERENCE(LINES_XSTRING) TYPE  XSTRING OPTIONAL
*"     REFERENCE(DOCUMENTS) TYPE  ZES_KEG_EMAIL_DOCUMENTS OPTIONAL
*"     REFERENCE(RECIPIENTS) TYPE  ZES_KEG_EMAIL_RECIPIENTS OPTIONAL
*"     REFERENCE(CONTENT_TYPE) TYPE  SO_OBJ_TP DEFAULT 'HTM'
*"  EXPORTING
*"     REFERENCE(RESULT) TYPE  I
*"  RAISING
*"      CX_BCS
*"----------------------------------------------------------------------

*----------------------------------------------------------------------*
* CLASS-DEFINITIONS                                                    *
*----------------------------------------------------------------------*
  DATA: send_request       TYPE REF TO cl_bcs.
  DATA: document           TYPE REF TO cl_document_bcs.
*  DATA: sender             TYPE REF TO cl_sapuser_bcs.
  DATA: sender             TYPE REF TO cl_cam_address_bcs.
  DATA: recipient          TYPE REF TO if_recipient_bcs.
  DATA: exception_info     TYPE REF TO if_os_exception_info,
        bcs_exception      TYPE REF TO cx_bcs.

*----------------------------------------------------------------------*
* INTERNAL TABLES                                                      *
*----------------------------------------------------------------------*
  DATA: l_mailtext TYPE soli_tab.
  DATA: l_mailhex  TYPE solix_tab.
*  DATA: iaddsmtp   TYPE bapiadsmtp OCCURS 0 WITH HEADER LINE.
  DATA: ireturn    TYPE bapiret2 OCCURS 0 WITH HEADER LINE.

*----------------------------------------------------------------------*
* VARIABLES                                                            *
*----------------------------------------------------------------------*
  DATA: mail_line       LIKE LINE OF l_mailtext.
  DATA: mailx_line      LIKE LINE OF l_mailhex.
  DATA: la_doc_line     LIKE LINE OF documents.
  DATA: recipients_line LIKE LINE OF recipients.
*  DATA: bapiadsmtp      TYPE bapiadsmtp.
  DATA: lv_mail_from    TYPE adr6-smtp_addr.
  DATA: first(1)        TYPE c.
  DATA: la_contents     TYPE soli.
  DATA: conlengths      TYPE so_obj_len.
  DATA: lv_pdf_content  TYPE solix_tab.
*----------------------------------------------------------------------*
* CONSTANTS                                                            *
*----------------------------------------------------------------------*
  CLASS cl_cam_address_bcs DEFINITION LOAD.
  CLASS cl_abap_char_utilities DEFINITION LOAD.

  lv_mail_from = sender_address_from.
  TRY.
* Create persistent send request
      send_request = cl_bcs=>create_persistent( ).

      CLEAR first.

      lv_pdf_content = cl_document_bcs=>xstring_to_solix( lines_xstring ).

      LOOP AT documents INTO la_doc_line.
* Build the Main Document
          IF la_doc_line-content_hex[] IS INITIAL.
            DESCRIBE TABLE la_doc_line-content_text[] LINES conlengths.
            READ TABLE la_doc_line-content_text[] INTO la_contents INDEX conlengths.
            conlengths = ( conlengths - 1 ) * 255 + STRLEN( la_contents ).

            document = cl_document_bcs=>create_document(
                                i_type    = content_type
                                i_text    = la_doc_line-content_text[]
                                i_length  = conlengths
                                i_subject = la_doc_line-subject ).
            IF NOT lv_pdf_content IS INITIAL.
                document->add_attachment(
                                   i_attachment_type    = la_doc_line-type " add PDF attachment
                                   i_attachment_subject = la_doc_line-subject
                                   i_att_content_hex    = lv_pdf_content ).
            ENDIF.
          ELSE.
* Add Attachment
            document->add_attachment(
                               i_attachment_type    = la_doc_line-type
                               i_attachment_subject = la_doc_line-subject
                               i_att_content_hex    = la_doc_line-content_hex ).
          ENDIF.
      ENDLOOP.

* Add document to send request
      send_request->set_document( document ).

* Get sender object
*      sender = cl_sapuser_bcs=>create( sy-uname ).
      sender = cl_cam_address_bcs=>create_internet_address( lv_mail_from ).

* Add sender
      send_request->set_sender( sender ).

* Create recipient TO
      LOOP AT recipients INTO recipients_line.
        IF recipients_line-c_address IS INITIAL.
            recipients_line-c_address = '[email protected]'.
        ENDIF.

        recipient = cl_cam_address_bcs=>create_internet_address( recipients_line-c_address ).
* Add recipient with its respective attributes to send request
        send_request->add_recipient(
            i_recipient  = recipient
            i_express    = recipients_line-i_express
            i_copy       = recipients_line-i_copy
            i_blind_copy = recipients_line-i_blind_copy
            i_no_forward = recipients_line-i_no_foward ).

      ENDLOOP.

* subject line more than 50 chars
      send_request->set_message_subject( title_email ).

* set send immediately flag
      send_request->set_send_immediately( 'X' ).

* Send document
      send_request->send( ).

      COMMIT WORK AND WAIT.

    CATCH cx_bcs INTO bcs_exception.
      RESULT = 10.
*      RAISE EXCEPTION bcs_exception.

  ENDTRY.
ENDFUNCTION.


"*---------------- ВТОРОЙ СПОСОБ ----------------------*"
"*---------------- SO_DOCUMENT_SEND_API1 ---------*"
Код: You are not allowed to view links. Register or Login
  itab_otf[] = ls_output_data-otfdata[].

  CALL FUNCTION 'CONVERT_OTF_2_PDF'
    IMPORTING
      bin_filesize           = bin_filesize
    TABLES
      OTF                    = itab_otf
      DOCTAB_ARCHIVE         = itab_docs
      LINES                  = itab_lines
            .

  CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
  EXPORTING
    line_width_dst              = '255'
  TABLES
    content_in                  = itab_lines
    content_out                 = itab_pdf
  EXCEPTIONS
    err_line_width_src_too_long = 1
    err_line_width_dst_too_long = 2
    err_conv_failed             = 3
    OTHERS                      = 4.


Код: You are not allowed to view links. Register or Login
FUNCTION ZEMAIL_WITH_API.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     REFERENCE(SENDER_MAIL_FROM) TYPE  SOMLRECI1-RECEIVER
*"     REFERENCE(RECIPIENT_MAIL_TO) TYPE  SOMLRECI1-RECEIVER
*"     REFERENCE(NAME_EMAIL50) TYPE  SO_OBJ_DES
*"     REFERENCE(TYPE_BODY_TEXT) TYPE  SO_OBJ_TP DEFAULT 'HTM'
*"     REFERENCE(TYPE_ATACH_DOC) TYPE  SO_OBJ_TP DEFAULT 'PDF'
*"     REFERENCE(NAME_ATACH_DOC) TYPE  SO_OBJ_DES DEFAULT 'SomeName'
*"  EXPORTING
*"     REFERENCE(RESULT) TYPE  I
*"  TABLES
*"      CONTENTS_BIN STRUCTURE  SOLISTI1 OPTIONAL " сам атач
*"      MESSAGE_BODY STRUCTURE  SOLISTI1 OPTIONAL " тело
*"----------------------------------------------------------------------


DATA:
      v_lines_bin         TYPE i VALUE 0,
      v_lines_rec         TYPE i,
      v_lines_txt         TYPE i,
      la_doc_data         TYPE sodocchgi1,
      lt_receivers        LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
      lt_packlist         LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
      la_document_data         TYPE sodocchgi1.

*-- Assign the Email id and User id to  Whom you want to Send  -------------&
  REFRESH lt_receivers.
  lt_receivers-receiver   = recipient_mail_to. "&---- Assign Email id
  lt_receivers-rec_type   = 'U'.               "&---- Send to External Email id
  lt_receivers-com_type   = 'INT'.
  lt_receivers-notif_del  = 'X'.
  lt_receivers-notif_ndel = 'X'.
  APPEND lt_receivers.
*& - END of  Assign the Email id and User id to  Whom you want to Send  --&

"&--- Read the Number of lines in the Internal Table
  DESCRIBE TABLE lt_receivers LINES v_lines_rec.
  IF v_lines_rec IS NOT INITIAL.

      DESCRIBE TABLE message_body LINES v_lines_txt.
      READ TABLE message_body INDEX v_lines_txt.

      la_doc_data-obj_name    = 'SMARTFORM'.
      la_doc_data-expiry_dat  = sy-datum + 10.
      la_doc_data-obj_descr   = name_email50.
      la_doc_data-sensitivty  = 'F'.
      la_doc_data-doc_size    = v_lines_txt * 255.
*      la_doc_data-doc_size    = ( v_lines_bin - 1 ) * 255 + STRLEN( contents_bin ).
      la_doc_data-obj_langu   = sy-langu.

*     Describe the body of the message
      REFRESH lt_packlist.
      lt_packlist-transf_bin = space.
      lt_packlist-head_start = 1.
      lt_packlist-head_num   = 0.
      lt_packlist-body_start = 1.
      lt_packlist-body_num   = v_lines_txt.
      lt_packlist-doc_type   = type_body_text."'RAW'.
      APPEND lt_packlist.

*       Packing for PDF.
      IF NOT contents_bin IS INITIAL.
        DESCRIBE TABLE contents_bin LINES v_lines_bin.
      ENDIF.
      lt_packlist-transf_bin = 'X'.
      lt_packlist-head_start = 1.
      lt_packlist-head_num   = 1.
      lt_packlist-body_start = 1.
      lt_packlist-body_num   = v_lines_bin.
      lt_packlist-doc_type   = type_atach_doc. "'PDF'.
      lt_packlist-obj_name   = 'smart'.
      lt_packlist-obj_descr  = name_atach_doc.
      lt_packlist-doc_size   = v_lines_bin * 255.
      APPEND lt_packlist.

      CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
        EXPORTING
          document_data                   = la_doc_data
          sender_address                  = sender_mail_from
          sender_address_type             = 'INT'
          put_in_outbox                   = 'X'
          commit_work                     = 'X'
         TABLES
           packing_list                   = lt_packlist
           contents_bin                   = contents_bin
           contents_txt                   = message_body
           receivers                      = lt_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 .

      result = sy-subrc.

  ENDIF. "&---- END of Check the Sender Email id or SAP User id is got or not.

ENDFUNCTION.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Пример отправки SmartForms в виде PDF-атачмента: You are not allowed to view links. Register or Login

Оффлайн salmaner

  • Newbie
  • *
  • Сообщений: 1
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Примеры работы SO_NEW_DOCUMENT_SEND_API1 (отправка сообщений)
« Ответ #35 : Сентябрь 24, 2019, 02:56:28 pm »
Всем доброго времени суток!

Коллеги, мы отправили письмо с транзакцией. Но пользователю не понравилось что надо
открывать письмо и далее идти в меню и нажимать Документ->Выполнить (Ctrl+F6).
Пользователь хочет по двойному клику по письму что бы запускалась транзакция.
На сколько я знаю, это можно сделать если через Work-Flow.
Из примера описания данного фм-ника видно что можно передать параметр объекта
Код: You are not allowed to view links. Register or Login
wfl like sood-objtp value 'WFL', " WorkFlow.

Вопрос как создать объект WorkFlow программно и добавить в таблицу object_content?
Или можно как то заставить открываться транзакцию по двойному клику?


Sapforum.Biz

Re: Примеры работы SO_NEW_DOCUMENT_SEND_API1 (отправка сообщений)
« Ответ #35 : Сентябрь 24, 2019, 02:56:28 pm »