Бывают случаи, когда данные вы получаете через вложение электронной почты – например, вы работаете в FMCG или фармацевтической компании и еженедельно (ежемесячно) получаете отчеты в едином формате по почте от дистрибьюторов. Сегодня расскажу о способе автоматизации выгрузки таких данных из ящика сразу в QlikView или Qlik Sense.

НА ЗАМЕТКУ! Для удобства работы, предлагаю вам обзавестись отдельным адресом для получения данных.

Вариант №1: макрос

Процесс

  1. Данные запускаются через скрипт ежедневно.
  2. Письмо приходит регулярно в одно и то же время (с разницей в 5 минут).
  3. Письмо приходит, а вложение (источник данных) сохраняется на сетевой диск.
  4. Планировщик QlikView стартует через 20 минут после получения письма и обновляет данные в модели.

Макрос

Формат файла можно заменить на тот, в котором у вас приходят источники данных.

За и против

Недостаток такого решения, что скрипт нужно запускать через правило в Outlook, а Outlook должен быть запущен постоянно. Т.е. если мы говорим о полной автоматизации процесса, есть одно ограничение (необходимость работы Outlook 24/7), т.к. схема не может работать как автоответ.

Установка правил

Как установить правила в почте – каждый решает сам. У меня почтовый клиент настроен на проверку двух вещей:

  1. Тема письма
  2. Наличие вложения

Вот и все! Такой скрипт поможет автоматически загружать данные в QlikView.

Вариант №2: Qlik Mailbox Коннектор

С недавнего времени появился второй бесплатный способ автоматизации загрузки вложений из электронных писем в QlikView – при помощи Qlik Mailbox Коннектора. Подключение происходит при помощи POP3 and IMAP, что безусловно удобно.

В зависимости от задачи, вас будут интересовать опции в коннекторе:

  • ImapMessageAttachments или Pop3MessageAttachments
  • ImapMessageDownloadAttachment или Pop3MessageDownloadAttachment
  • ImapMessageGetAttachmentAsText или Pop3MessageGetAttachmentAsText
  • ImapMessageGetAttachmentAsBinary или Pop3MessageGetAttachmentAsBinary

Пример скрипта для Коннектора

Пример скрипта для скачивания всех вложений со всех e-mail-ов в определенной папке на локальную машину для загрузки в Qlik:

SET ThousandSep=’,’;
SET DecimalSep=’.’;
SET MoneyThousandSep=’,’;
SET MoneyDecimalSep=’.’;
SET MoneyFormat=’£#,##0.00;-£#,##0.00′;
SET TimeFormat=’hh:mm:ss’;
SET DateFormat=’DD/MM/YYYY’;
SET TimestampFormat=’DD/MM/YYYY hh:mm:ss[.fff]’;
SET MonthNames=’Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec’;
SET DayNames=’Mon;Tue;Wed;Thu;Fri;Sat;Sun’;
NOTE – In this script the server, username, password etc. have been
stripped from the request URLs as the connector will then
automatically pick out those configured in the connector UI.
*******************************************************************/
//
// QlikView/Qlik Sense must have write access to this location.
//
let vDownloadFolder = ‘C:\Users\YOUR_USER_NAME\Desktop\’;
//
// Edit this if you running Qlik Web Connectors on a different port.
//
let vQlikWebConnectorBase = ‘http://localhost:5555/web’;
//
// Email folder to process.
//
let vFolderToSearch = ‘Inbox’;
MessagesInFolder:
LOAD
id,
UID,
inReplyTo,
folder,
to,
cc,
bcc,
from,
subject,
sent,
text,
html,
size,
attachments,
gmailMessageId,
gmailThreadId,
gmailLabels
FROM
[$(vQlikWebConnectorBase)/QlikMailBoxConnector/?table=ImapMessagesInFolder&appID=&Folder=$(vFolderToSearch)]
(qvx) where attachments > 0;
Let noRows = NoOfRows(‘MessagesInFolder’);
for i=0 to $(noRows)-1
let vID = peek(‘id’,$(i),’MessagesInFolder’);
let vUID = peek(‘UID’, $(i), ‘MessagesInFolder’);
let vFolder = peek(‘MessagesInFolder’, $(i), ‘MessagesInFolder’);
Attachments:
LOAD
‘$(vID)’ as id,
‘$(vUID)’ as AttachmentUID,
‘$(vFolder)’ as AttachmentFolder,
FileName as AttachmentFileName
FROM
[$(vQlikWebConnectorBase)/QlikMailBoxConnector/?table=ImapMessageAttachments&appID=&Folder=$(vFolder)&MessageID=$(vUID)]
(qvx) where FileName <> ”;
NEXT
LET noRows = NoOfRows(‘Attachments’);
for i=0 to $(noRows)-1
let vID = peek(‘id’,$(i),’Attachments’);
let vFolder = peek(‘AttachmentFolder’, $(i), ‘Attachments’);
let vUID = peek(‘AttachmentUID’, $(i), ‘Attachments’);
let vFilename = peek(‘AttachmentFileName’, $(i), ‘Attachments’);
//
// Note – we use the UID here as we need something unique to prevent attachments with the same name overwriting previous ones.
//
let vTarget = ‘$(vDownloadFolder)$(vUID)_$(vFilename)’;
trace ‘About to download $(vFilename) in email $(vUID) to $(vTarget)’;
Downloads:
LOAD
‘$(vID)’ as id,
‘$(vUID)’ as Downloads_UID,
Status as Downloads_Status,
‘$(vFilename)’ as Downloads_Filename
FROM
[$(vQlikWebConnectorBase)/QlikMailBoxConnector/?table=ImapMessageDownloadAttachment&appID=&MessageID=$(vUID)&AttachmentFileName=$(vFilename)&TargetPath=$(vTarget)&Folder=$(vFolder)]
(qvx);
next i

О Qlik Mailbox Коннекторе можно прочитать в нашем обзоре бесплатных веб-коннекторов Qlik (ранее – QVSource) или в официальном хэлпе Qlik.

На этом на сегодня все! Хороших вам разработок!