Пару слов о формулярах CRM. Недавно столкнулся с формулярами в Solution Manager. Для меня это впервые, сохраню напоминалку, может быть кому-то еще пригодится.
Настройка ведется в транзакции SPRO:
SPRO->SAP Solution Manager: руководство по внедрению->Управление отношениями с клиентами->Маркетинг->Маркетинговое планирование и управление кампаниями->Персонализированный мейл->Обработать контексты признаков для формуляров мейла
Тут мы можем создать пользовательский контекст
Указываем структуру из se11
Поля подтянутся сами
Ведение формуляров осуществляется в транзакции SM_CRM.
Выбираем роль пользователя, далее переходим в Основные функции:
Для поиска существующих мы используем поиск (1), если нужен новый то можем создать новый (2)
Поиск:
Редактировать и создавать файлы можно в двух форматах в графическом или редактированием HTML тегов.
2. Выбор набора атрибутов. Как стандартных так и созданных в «Обработать контексты признаков для формуляров мейла». Кнопка. «Атрибут» позволяет вставить конкретный атрибут в тело письма.
Получение формуляра и подстановка данных из пользовательского контекста .
У нас есть два варинта(Конечно, может и больше, но знаю только эти)
1. Получение формуляра и отправка каким-либо известным способом отправки.
Тут при получении формуляра можем автоматически подставить данные
Надо только заполнить таблицу add_key_value_pairs во входных параметрах.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
APPEND VALUE #( NAME = 'ZZZ_S_CONTEXT-LABLE1' VALUE = 'ДАННЫЕ ДОБАВЛЕННЫЕ В КОНТЕКСТ' ) TO lt_key_value_pairs. CALL FUNCTION 'AI_CRM_ERMS_MAIL_COMPOSE' EXPORTING form_id = 'Z_TEST_PAU_2' add_key_value_pairs = lt_key_value_pairs IMPORTING et_mail_body = et_mail_body et_attachments = et_attachments et_pictures = et_pictures et_mail_parts = et_mail_parts subject = ev_subject CHANGING et_pers_mail_body = lt_pers_mail_body EXCEPTIONS form_not_found = 1 OTHERS = 2. |
2. Отправка стандартным способом, например, из стандартного WF такого как CRM_RFC_APPR
Для этого надо создать реализацию
в BADI CRM_IM_ADD_DATA_BADI в реализации можно прокидывать данные в форму. Смотрите в параметрах таблицу CT_ATTRIBUTES
Изображения:
Для вставки изображений можно использовать несколько методов.
1. Это сохранение картинки в коде используя BASE64
<img width="800" height="85" alt="" src="data:image/png;base64,iVBORw0…. ==" border="0">
Самый простой способ но не очень удобный если картинки необходимо периодически менять или динами
2. В интернетах предлагают вставлять изображения при помощи ссылок на общедоступное хранилище с картинками. Очень странное решение даже внутри корпоративной сети
3. Пришлось пойти путем расширения. А именно хранение картинок в репозитарии и c последующим перекодированием их в BASE64 и вставки в шаблон.
Первым делом перейдем в транзакцию SE80 и загрузим картинку в репозитарий
В формуляр вставим такую код
<img width="800" height="95" src="data:image/png;base64,#zimage_test.jpg#" border="0"> Ниже код замены тега #zimage_test.jpg# в коде.
Читаем формуляр:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
DATA(lo_data) = cl_mime_repository_api=>if_mr_api~get_api( ). lo_data->get( EXPORTING i_url = |/SAP/PUBLIC/test.jpg| IMPORTING e_content = DATA(lv_file) EXCEPTIONS error_occured = 1 not_found = 2 permission_failure = 3 CALL FUNCTION 'SSFC_BASE64_ENCODE' EXPORTING bindata = lv_file * BINLENG = IMPORTING b64data = lv_image EXCEPTIONS ssf_krn_error = 1 ssf_krn_noop = 2 ssf_krn_nomemory = 3 ssf_krn_opinv = 4 ssf_krn_input_data_error = 5 ssf_krn_invalid_par = 6 ssf_krn_invalid_parlen = 7 OTHERS = 8. IF sy-subrc <> 0. CONTINUE. ENDIF. |
Читаем формуляр.
Вот тут несколько варинтов. 1. Мы отправляем формуляр из своего кода, тогда нам надо читать формуляр. Например ФМом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
DATA lt_pers_mail_body TYPE crmt_pml_txtsubj_exec_tab. DATA lt_mail_body TYPE soli_tab. CALL FUNCTION 'AI_CRM_ERMS_MAIL_COMPOSE' EXPORTING form_id = iv_formname IMPORTING et_mail_body = lt_mail_body subject = ev_subject EXCEPTIONS form_not_found = 1 OTHERS = 2. IF sy-subrc = 0. LOOP AT lt_mail_body INTO DATA(ls_mail_body). lv_body = lv_body && ls_mail_body-line. ENDLOOP. ENDIF *Замена тега REPLACE ALL OCCURRENCES OF lv_lable IN lv_string WITH lv_image. |
Второй вариант, если вы отправляете письмо при помощи WF, например, CRM_RFC_APPR, пришлось расширить класс CL_CRM_ERMS_MAIL_COMPOSER метод COMPOSE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
TRY. LOOP AT me->core_object->mt_personalized_mail ASSIGNING FIELD-SYMBOL(<ls_personalized_mail>) WHERE texttype = me->core_object->mc_text_type-html. cl_bcs_utilities=>get_cp_from_content( EXPORTING iv_doctype = 'HTM' IMPORTING ev_codepage = DATA(lv_codepage) CHANGING cv_xstring = <ls_personalized_mail>-text ). DATA(lv_string) = cl_bcs_convert=>xstring_to_string( iv_xstr = <ls_personalized_mail>-text iv_cp = lv_codepage ). Замена тега REPLACE ALL OCCURRENCES OF lv_lable IN lv_string WITH lv_image. <ls_personalized_mail>-text = cl_bcs_convert=>string_to_xstring( iv_string = lv_string ). ENDLOOP. CATCH cx_root. ENDTRY. data lv_lable type string value ‘#zimage_test.jpg#’. REPLACE ALL OCCURRENCES OF lv_lable IN rv_body WITH lv_image. |
Второй вариант это положить данные в шаблон при получении, если мы получаем это при помощи ФМ типа 'AI_CRM_ERMS_MAIL_COMPOSE'
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
APPEND VALUE #( NAME = 'ZSB_SM_MAIL_META_ATR-CODE' VALUE = 'QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ' ) TO lt_key_value_pairs. CALL FUNCTION 'AI_CRM_ERMS_MAIL_COMPOSE' EXPORTING form_id = 'Z_TEST_PAU_1' add_key_value_pairs = lt_key_value_pairs IMPORTING et_mail_body = et_mail_body et_attachments = et_attachments et_pictures = et_pictures et_mail_parts = et_mail_parts subject = ev_subject CHANGING et_pers_mail_body = lt_pers_mail_body EXCEPTIONS form_not_found = 1 OTHERS = 2. |
Если мы работаем с формой в стандарте, и не читаем ее каким-то Z кодом можем подставлять данные в BADI CRM_IM_ADD_DATA_BADI в реализации можно прокидывать данные в форму. Смотрите в параметрах таблицу CT_ATTRIBUTES