Блог

Создание письма с гиперссылкой на объект интерфейса

Пример создания письма из хранимой процедуры.

 

Создается письмо с гиперссылкой на объект базы знаний и вложенным файлом.

 

DECLARE

@MessageBody AS VARBINARY(MAX),

@MessageText VARCHAR(MAX),

@AddressTo NVARCHAR(MAX),

@Data VARCHAR(MAX),

@AttachmentXML NVARCHAR(MAX),

@GuidEmpty UNIQUEIDENTIFIER = '00000000-0000-0000-0000-000000000000'

 

-- Адресаты

SET @AddressTo = '<DS><Address><IDUser>5B62D95A-A3ED-4232-A94D-4EDEF2531FA1</IDUser><ShortName>Администратор</ShortName><EMail>ivanov@formulabi.ru</EMail><Type>0</Type><AddressType>0</AddressType></Address></DS>'

-- Другой вариант

SET @AddressTo = (

SELECT '7D588196-698A-4690-910F-572B16F20D4F' AS IDUser,

      'Администратор' AS ShortName,

'ivanov@formulabi.ru' AS EMail,

0 Type,

0 AS AddressType

FOR XML RAW('Address'), ELEMENTS, ROOT('DS')

)

 

-- Type - тип адреса. 0 - кому, 1 - копия

-- AddressType - тип адресата. 0 - пользователь, 1 - ящик, 2 - приватная группа, 3 - общая группа

 

-- Параметры объекта Базы Знаний

SET @Data = '<DS><Params><ParamName>DBName</ParamName><ParamValue>KB</ParamValue></Params></DS>'

-- Другой вариант

SET @Data = (

SELECT 'DBName' AS ParamName, 'KB' AS ParamValue

FOR XML RAW('Params'), ELEMENTS, ROOT('DS')

);

 

-- Текст письма с гиперссылкой на браузер

SET @MessageText = '<html><body><B>Пример текста.</B><br/>' +

'<a href="Invoke://IDObject=cf51fd34-5739-4c39-9e96-8ef6024a807f;ObjectType=3' +

';Data=' + Messaging.dbo.BinaryToBase64(CAST(@Data AS VARBINARY(MAX))) +

'" title="Текст в сплывающей подсказке">' +

'"Ссылка на лог датаблоков по базе KB</a>' +

'</html></body>'

 

SET @MessageBody = CAST(@MessageText AS VARBINARY(MAX))

 

-- Вложение

SET @AttachmentXML = (

SELECT 1 AS FileNumber,

'ReadMe.txt' AS FileName,

CAST('Текст файла' AS VARBINARY(MAX)) AS FileBody,

'txt' AS Extension

FOR XML RAW('Attachment'), ELEMENTS, ROOT('DS'), BINARY BASE64

);

 

 

EXEC dbo.PostMessageSend

@IDParent = NULL,

@IDPostMessageBox = '7D588196-698A-4690-910F-572B16F20D4F',

@AddressTo = @AddressTo,

@Subject = 'Тема письма',

@MessageBody = @MessageBody,

@IDContentType = 1,

@IsDraft = 0,

@EMailCopy = 0,

@IDTemplate = NULL,

@Params = NULL,

@AttachmentXML = @AttachmentXML

 

Описание параметров:

 

@IDParent - Всегда NULL.

@IDPostMessageBox - ID пользователя или почтового ящика. Если равен @GuidEmpty, то сообщение создается от имени системы.

@AddressTo - Получатели письма.

@Subject - Тема письма. Разрешен NULL.

@MessageBody - Текст письма. Разрешен NULL.

@IDContentType - Тип текста письма. 0 - rff, 1 - html. Рекомендуется всегда использовать html.

@IsDraft - Признак черновика. Черновик не отправляется адресатам.

@AttachmentXML - Файловые вложения в письмо. Если в письме нет вложений, параметр нужно пропустить.

@EMailCopy - Копия письма по E-Mail (если задан). В системе должен быть прописан SMTP-сервер.

@IDTemplate - ID шаблона. Разрешен NULL.

@Params - Параметры для шаблона. Разрешен NULL.

 

 

 

Если кому-то нужны свои функции конвертации стоки в Base64 и обратно:

 

CREATE FUNCTION [dbo].[ToBase64] (@Input varchar(8000))

RETURNS varchar(8000)

AS

BEGIN

-- Конвертация строки в Base64

DECLARE

@Output varchar(8000),

@Bits varbinary(3),

@Pos int

 

SET @Pos = 1

SET @Output = ''

WHILE @Pos <= Len(@Input)

BEGIN

SET @Bits = Convert(varbinary(3), Substring(@Input, @Pos, 3))

SET @Output = @Output + Substring('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',Substring(@Bits, 1, 1) / 4 + 1, 1)

 

SET @Output = @Output + Substring('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',

Substring(@Bits, 1, 1) % 4 * 16 +

Substring(@Bits, 2, 1) / 16 + 1, 1)

SET @Output = @Output +

Substring('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',

Substring(@Bits, 2, 1) % 16 * 4 +

Substring(@Bits, 3, 1) / 64 + 1, 1)

 

SET @Output = @Output +

Substring('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',

Substring(@Bits, 3, 1) % 64 + 1, 1)

 

SET @Pos = @Pos + 3

END

 

RETURN (Left(@Output, Len(@Output) - 3 + Len(@Bits)) + Replicate('=', 3 - Len(@Bits)))

 

END

 

 

CREATE FUNCTION [dbo].[FromBase64] (@data varchar(max))

RETURNS varchar(8000)

AS

-- Конвертация Base64 в строку

BEGIN

DECLARE @XmlData xml = CAST('<data>' + @data + '</data>' as xml)

DECLARE @Output varchar(8000) = CONVERT(varchar(max),@XmlData.value('(data)[1]', 'varbinary(max)'))

RETURN @Output

END

 


Примеры реализации
Подписаться

Новые статьи

Изменения в разработке пользовательских форм Платформа как инструмент реализации задач индивидуального пользователя Поиск по связанным сущностям Дополнительные настройки Browser'а Новая форма интерфейса - FinderBrowser Новый вид меню пользователя Возможность формирования отчетов с использованием различных источников данных (Федерация данных) Росагролизинг внедрил лизинговый конвейер, автоматизировав процесс рассмотрения заявок на поставку сельхозтехники Возможность аутентификации и авторизации с использованием ADFS Создание значка уведомления (NotifyArea)