Ссылки на записи системы в шаблонах сообщений (с помощью базового функционала)
Всем привет!
На днях настраивал шаблоны сообщений, где макрос поля (например Инциденты.Номер) в теле письма должен быть ссылкой на запись в Системе. (По нажатию на эту ссылку, пользователь переходит к данному инциденту в реестре раздела).
Поскольку на комюнити по этому поводу ничего конкретно не нашел - решил поделится.
В системе есть сервис scr_HyperlinkUtils, который и отвечает за этот функционал. Поскольку там много всего перейду к самому главному - как сделать ссылку.
Есть конструкция:
#[Link;%1:Макрос>;Действие>/ Название сущности >/%1:ID]#, где
- Макрос> - Название макроса соответствующего поля
- Действие> - Одно из действий, которое произойдет по нажатию на ссылку, а именно
- open - открытие карточки редактирования записи
- goto - переход к записи в реестре
- calltonumber - звонок по номеру средствами call-центра системы
- Название сущности > - название сущности в системе (Инцидент - Incident, Задача - Task и т.д.)
Получается, что для решения задачки, которую я описал в начале, нам необходимо:
Макрос #Номер# заменить на #[Link;%1:Номер;goto/Incident/%1:ID]#
Не могли бы описать этот механизм подробнее?
Что значит Макрос #Номер#? Вместо чего нужно подставить номер (или ID в базе) проекта, к которому нужно перейти из письма?
"Росинская Лена" написал:Не могли бы описать этот механизм подробнее?
Что значит Макрос #Номер#? Вместо чего нужно подставить номер (или ID в базе) проекта, к которому нужно перейти из письма?
1. Для примера: при выполнении всех задач по инциденту, необходимо оповестить ответственного, о том, что все работы выполнены. Для удобства просмотра инцидента Вы можете добавить ссылку на эту запись. (В теле письма номер инцидента будет ссылкой, кликнув на которую, программа Террасофт перейдет к записи инцидента, либо откроет её карточку)
2. При настройке шаблонов сообщений в Террасофте Вы можете добавлять макросы из пользовательского запроса.
В нашем случае мы используем макрос Номер, который в тело письма вставится в формате #Номер#.
И для того, что бы при отправке письма номер отображаемого инцидента стал ссылкой необходимо заменить #Номер# на #[Link;%1:Номер;goto/Incident/%1:ID]#
видимо, надо изначально написать этот макрос, который в нужное место письма подставляет строку.
Пытаюсь просто вставить её в письмо - как ссылка не работает. Что я делаю не так? =)
И можно ли из кода при формировании письма вместо номера подставлять эту строку (чтобы работало как ссылка)?
Попыталась из кода отправить письмо со строкой
#[Link;%1:Номер;goto/Opportunities/%1:{ED24FAA0-13E3-423A-BBBF-9C61B58D7FE7}]#
Не воспринимается как ссылка.
Елена, здесь, вероятно, дело не в том, что Вы отправляете письмо из кода. Проверьте, верно ли создан шаблон сообщения, а именно:
- сформирован пользовательский запрос;
- шаблон сообщения создан с использованием пользовательского запроса;
- выполнен пункт 2 из ответа Дмитрия (http://www.community.terrasoft.ru/blogs/7544#comment-35998)
Спасибо, но всё-таки важно то, что письмо отправляется из кода следующим образом:
var Body = Body + FormatStr("Создал: %1\nДата создания: %2\n\nНазвание проекта: %3\nНаправление: %4\nТочка продаж: %5\nОтветственный: %6",
Author, DateStr, GetCorrectStringForSendEmail(Title), Direct, Department, Owner);
var Link = FormatStr("%1", OwnerID)
Link = '#[Link;%1:Номер;goto/Opportunities/%1:'+ Link+']#';
Body = Body+Link;
var SQL = "EXEC msdb.dbo.sp_send_dbmail @profile_name = '%1', ";
SQL += "@recipients = '%2', @body = '%3', @subject = '%4', @body_format = '%5'";
var body_format = 'HTML';
SQL = FormatStr(SQL, ProfileName, AddressStr, Body, Subject, body_format);
Connector.DBEngine.ExecuteCustomSQL(SQL, System.EmptyValue);
в формате html. Но текст #[Link;%1:Номер;goto/Opportunities/%1:'+ Link+']# всё так же не распознаётся как ссылка.
Скрипты, указанные в ответе Дмитрия, не используются (это видно по отладчику).
Елена,
при отправке писем через dbMail, с использованием Body_Format="HTML" следует использовать следующий формат ссылки:
<a href="terrasoft://open/Opportunities/' + CONVERT(NVARCHAR(250),@ID) + '">Перейти</a>
где
Open - операция открытия записи
Goto - переход к записи в реестре
@ID - ID Продажи (в Вашем случае).
Вопрос в продолжение темы: можно ли настроить переход по ссылке к разделу, но так, чтобы фильтр был настроен на по ID записи, а по ContactID, к примеру?
"Росинская Лена" написал:Вопрос в продолжение темы: можно ли настроить переход по ссылке к разделу, но так, чтобы фильтр был настроен на по ID записи, а по ContactID, к примеру?
Лена, все возможно с Террасофт :smile:
Вам необходимо будет переопределить метод: HyperlinkGotoWorkspace. То есть в существующий формат передачи ссылок добавить параметр, опредиляющий поле по которому необходимо осуществить фильтрацию.
terrasoft://goto/wnd_ХХХWorkspace/{b365C4C25-D782-4F14-89DA-1BB5C1D993CA}/ContactID - например.
А уже в самой функции распарсить сам параметр
if (Params.length < 2) { return; } var Module = Params[0]; var IDValue = Params[1].replace(/%7b/g, '{').replace(/%7d/, '}'); // Опредиляем парамет из строки ссылки var FieldName = Params[2];
и уже соответственно обработать дальше
Спасибо за быстрый ответ!
И ещё один вопрос: можно ли сделать поле в датасете так, чтобы оно являлось ссылкой? Как в письме?
То есть, к примеру, в текстовом поле написать Перейти
так, чтобы это воспринималось как ссылка?
"Росинская Лена" написал:Спасибо за быстрый ответ!
И ещё один вопрос: можно ли сделать поле в датасете так, чтобы оно являлось ссылкой? Как в письме?
То есть, к примеру, в текстовом поле написать Перейти
так, чтобы это воспринималось как ссылка?
Если речь идет о карточке, то я бы лучше сделал кнопку, при нажатии на которую, вычитывал данные из поля в котором указана сформирована ссылка, или же формировал её динамически.
"Росинская Лена" написал:
можно ли сделать поле в датасете так, чтобы оно являлось ссылкой? Как в письме?
Если я верно понял, может, так?
Добрый день, подскажите пожалуйста как правильно сформировать BodyText, чтобы письмо в формате HTML отправлялось со ссылкой?
Я делаю так :
BodyText = 'Здравствуйте!/nВы добавлены в команду проекта: <a href="terrasoft://goto/Project/E9A312A0-4882-40DA-8DE7-05B1D45B4449/">Валютный проект</a>./n/nЭто сообщение сгенерировано автоматически. Пожалуйста, не отвечайте на него.'
На выходе получается следующее письмо:
Здравствуйте! Вы добавлены в команду проекта: <a href="terrasoft://goto/Project/E9A312A0-4882-40DA-8DE7-05B1D45B4449/">Валютный проект</a>. Это сообщение сгенерировано автоматически. Пожалуйста, не отвечайте на него.
Валентин, проверьте, какой формат устанавливается?
Сам текст Вы формируете правильно, такое ощущение, что формат сообщения текстовый.
Вот полный вызов процедуры:
SendEmail({Address: TeamSelectDataset.Values('eMail'), Subject: 'Вы добавлены в команду проекта!', BodyFormat: 2, HTMLBody: 'Здравствуйте!/nВы <b>добавлены</b> в команду проекта: <a href="terrasoft://goto/Project/E9A312A0-4882-40DA-8DE7-05B1D45B4449/">Валютный проект</a>./n/nЭто сообщение сгенерировано автоматически. Пожалуйста, не отвечайте на него.', AutoSend: true, SendImmediately: true});
Валентин, завтра проверю корректность формирования BodyText с учетом добавленной Вами процедуры вызова и сообщу результат.
Валентин, в функции CreateOutlookMessage скрипта scr_OutlookUtils замените блок кода
if (Params.HTMLBody) { Message.BodyFormat = 2; Message.Body = Params.HTMLBody; }
На:
if (Params.HTMLBody) { Message.BodyFormat = 2; Message.HTMLBody = Params.HTMLBody; }