Создание письма с гиперссылкой на объект интерфейса
Пример создания письма из хранимой процедуры.
Создается письмо с гиперссылкой на объект базы знаний и вложенным файлом.
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
0 комментариев