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