Loading



+ Sapforum.Biz » Инструменты » ABAP - Инструментальные средства » SE37 - Построитель функций (Модератор: Dmitriy)Тема:
|- Примеры работы SO_NEW_DOCUMENT_SEND_API1 (отправка сообщений)



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

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

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.312
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
В общем-то вполне полезный функционал который позволяет отправлять сообщения пользователям как по системе так и на внешние e-mail адреса, ну если конечно ваши администраторы настроили соответствующий функционал системы и отправка разрешена на выбранные домены.

В общем виде шаблон вызова ФМ представлен в следующем виде:
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.

Ну и расшифруем некоторые параметры ФМ-ки:
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.

  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', затем после отправки собственно всей почты требуется вызвать коммуникационную программу которая собственно говоря и сделает физическую отправку почты. Обычно админы данную программу планируют в фоне с периодичностью от часа до... сколько им там нужно, но никто ж нам не запрещает это дело подтолкнуть. Для этого требуется вызвать следующий код:

    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
  • **
  • Сообщений: 548
  • Reputation Power: 0
  • Skif has no influence.
дошло что он rfc :)
неясно только что значит тип получателя "R" - если вызываешь как RFC, то пользователь-то уже локальный?

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.312
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
неясно только что значит тип получателя "R" - если вызываешь как RFC, то пользователь-то уже локальный?
R - SAP-пользователь в другой SAP-системе... т.е. локальный для системы получателя.

Оффлайн Skif

  • Jr. Member
  • **
  • Сообщений: 548
  • Reputation Power: 0
  • Skif has no influence.
R - SAP-пользователь в другой SAP-системе... т.е. локальный для системы получателя.
ну так модуль уже запускается в системе-получателе как rfc
фактически ему передаются только адресат и пакет, а исполняется уже всё там
те передать локальному (для destination) юзеру
если указать 'B'  то что-то разве изменится?...
впрочем может логику какую завязали на этом...

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 143
  • Reputation Power: 0
  • NachDenken has no influence.
а также форматированный вывод
ошеннно красиво получается  ;D
http://help-abap.blogspot.com/2008/09/sapconnect-email-with-formatting.html
*&---------------------------------------------------------------------*
*& 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
  • Reputation Power: 0
  • lestat has no influence.
А подскажите пожалуйста, как прикрепить к вложениям отправляемого письма файл XLS! Допустим файл сформировался - куда-нибудь сложился на комп и потом его сразу отправить?

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.312
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
А подскажите пожалуйста, как прикрепить к вложениям отправляемого письма файл XLS! Допустим файл сформировался - куда-нибудь сложился на комп и потом его сразу отправить?
Ну тут есть вариант описания отправки сообщения с вложением, посмотри пример: http://sapnet.ru/viewtopic.php?p=6490

Оффлайн lestat

  • Newbie
  • *
  • Сообщений: 2
  • Reputation Power: 0
  • lestat has no influence.
Спасибо за пример! А этот пример отправляет на любую почту письма, в том числе и на внешнюю?

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.312
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
Спасибо за пример! А этот пример отправляет на любую почту письма, в том числе и на внешнюю?
Тип получателя наверное надо указать правильно. Ну и разрешения дложня быть на отправку почты на внешние адреса.

Оффлайн Uukrul

  • SAP R/3 4.6C
  • Administrator
  • Hero Member
  • *****
  • Сообщений: 2.312
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
    • Sapforum.BIZ
А этот фм из примера вообще ничего не делает... коммит в конце раскоментил...
Не подскажешь как самое простое с помощью SO_NEW_DOCUMENT_SEND_API1 прилепить к вложениям XLS?
Так почему ты решил что ничего не делается? При отправке почты из SAP она не уходит сразу на указанный адрес. Сообщение попадет в очередь и в зависимости от настройки администраторами, физическая отправка происходит периодическим заданием или в ручном режиме запустить транзакцию SCOT и там выбрать режим "Запустить процесс отправки". Или вы это делали?


 


Facebook Comments