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

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

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
"Ошибка БД при <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
  • YearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
позже (может уже в следующем году) выложу, нужно их подготовить - а то нет времени...

А пока такой вопрос, а как сделать, что бы письмо отправлялось от другого имени (которое будет постоянное)
к примеру support@com.ua, не меняя sy-uname?

Код: You are not allowed to view links. Register or Login
lv_sender = 'sender@dot.com'.

    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
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
Код: You are not allowed to view links. Register or Login
lv_sender = 'sender@dot.com'.

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

Оффлайн Sed0Y

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

Оффлайн Sed0Y

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

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

Оффлайн Sed0Y

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

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

Оффлайн Uukrul

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

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
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
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYears
Итак, как обещал.
Начну с 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 = 'some_email@kiev.ua'.
        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 728
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Пример отправки SmartForms в виде PDF-атачмента: You are not allowed to view links. Register or Login

Оффлайн salmaner

  • Newbie
  • *
  • Сообщений: 1
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYears
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?
Или можно как то заставить открываться транзакцию по двойному клику?