В режиме предварительного просмотра вам доступны не только экспорты отчета, но и некоторые варианты сохранения отчета, например, Box, DropBox, GoogleDrive и другие. В меню «Сохранить» выделена специальная секция с вариантами сохранения отчета в различные облачные сервисы:
Нам доступны:
1) Box;
2) Dropbox;
3) FastCloud;
4) GoogleDrive;
5) OneDrive;
6) XMPP.
Последний вариант использует облачные сервис FastCloud для хранения и построения отчетов. По протоколу XMPP передается ссылка на отчет в jabber клиент. Использование этих вариантов сохранения не вызывает сложностей, если вручную задавать настройки в режиме предварительного просмотра. Но как же автоматизировать процесс сохранения, с помощью кода?
Об этом и пойдет речь в этой статье.
За исключением FastCloud все облачные сервисы используют авторизацию типа OAuth. Это протокол авторизации, который позволяет вам без использования реальных логина и пароля от сервиса дать доступ приложению к облачному сервису. При этом вы можете ограничить права доступа. Вам будет выдан идентификатор и секретный ключ, которые нужно использовать для авторизации.
Чтобы получить идентификатор (Client Id) и ключ (Client secret) вам нужно создать приложение и зарегистрировать его на OAuth сервере вашего облачного сервиса.
Таким образом, нам нужно задать как минимум два параметра для сохранения отчета в облачный сервис. Рассмотрим по порядку.
1) Для сервиса Box:
Прежде всего необходимо добавить библиотеку FastReport:
using FastReport;
Создаем экземпляр класса ClientInfo, который будет содержать информацию для авторизации:
1 2 |
FastReport.Cloud.StorageClient.SkyDrive.ClientInfo clientInfo = new FastReport.Cloud.StorageClient.SkyDrive.ClientInfo("ClientName", "ClientId", "ClientSecret"); |
ClientInfo можетприниматьтрипараметра: ClientName, ClientId и ClientSecret. Внашемслучае, требуется ClientId и ClientSecret. Затем создаем клиент GoogleDrive для сохранения отчета:
1 2 |
FastReport.Cloud.StorageClient.GoogleDrive.GoogleDriveStorageClient client = new FastReport.Cloud.StorageClient.GoogleDrive.GoogleDriveStorageClient(clientInfo); |
Создаем объект отчета и загружаем в него отчет:
1 2 |
Report report = new Report(); report.Load(@"C:\Program Files (x86)\FastReports\FastReport.Net\Demos\Reports\Text.frx"); |
Если нужно сохранить отчет в формате отличном от нативного fpx (формат предварительного просмотра отчета), то нужно создать экземпляр экспорта:
1 |
FastReport.Export.Pdf.PDFExport pdf = new FastReport.Export.Pdf.PDFExport();
|
Сохраняем отчет с помощью клиента:
1 |
client.SaveReport(report, pdf);
|
Если вы сохраняете отчет в формате fpx, вместо второго параметра можно передать null:
1 |
client.SaveReport(report, null);
|
2) Для DropBox немного отличается. В рамках OAuth можно также использовать access token. Это ключ доступа, который генерируется в результате удачной авторизации. Передав такой токен, мы как бы восстанавливаем предыдущую авторизацию. Создаем клиент для DropBox и передаем ему access token в текстовом формате:
1 2 |
FastReport.Cloud.StorageClient.Dropbox.DropboxStorageClient drop = new FastReport.Cloud.StorageClient.Dropbox.DropboxStorageClient("accessToken"); |
Настройки прокси:
1 2 3 4 5 |
drop.ProxySettings.Server = ""; drop.ProxySettings.Port = 999; drop.ProxySettings.ProxyType = FastReport.Cloud.ProxyType.Http; drop.ProxySettings.Username = "Username"; drop.ProxySettings.Password = "Password"; |
Далее, как и в предыдущем примере:
1 2 |
Report report = new Report(); report.Load(@"C:\Program Files (x86)\FastReports\FastReport.Net\Demos\Reports\Text.frx"); |
Сохраняем отчет:
1 |
drop.SaveReport(report, null);
|
3) Для GoogleDrive:
Настройки прокси, если нужно:
1 2 3 4 5 |
client.ProxySettings.Server = ""; client.ProxySettings.Port = 999; client.ProxySettings.ProxyType = FastReport.Cloud.ProxyType.Http; client.ProxySettings.Username = "Username"; client.ProxySettings.Password = "Password"; |
Создаем отчет:
1 2 |
Report report = new Report(); report.Load(@"C:\Program Files (x86)\FastReports\FastReport.Net\Demos\Reports\Text.frx"); |
Создаем экспорт:
1 |
FastReport.Export.Pdf.PDFExport pdf = new FastReport.Export.Pdf.PDFExport();
|
Сохраняем отчет:
1 |
client.SaveReport(report, pdf);
|
4) Для OneDrive:
1 2 3 4 |
FastReport.Cloud.StorageClient.SkyDrive.ClientInfo clientInfo = new FastReport.Cloud.StorageClient.SkyDrive.ClientInfo("ClientName", "ClientId", "ClientSecret"); FastReport.Cloud.StorageClient.SkyDrive.SkyDriveStorageClient one = new FastReport.Cloud.StorageClient.SkyDrive.SkyDriveStorageClient(clientInfo); |
Настройки прокси, если нужно:
1 2 3 4 5 |
one.ProxySettings.Server = ""; one.ProxySettings.Port = 999; one.ProxySettings.ProxyType = FastReport.Cloud.ProxyType.Http; one.ProxySettings.Username = "Username"; one.ProxySettings.Password = "Password"; |
Создаем отчет:
1 2 3 |
Report report = new Report(); report.Load(@"C:\Program Files (x86)\FastReports\FastReport.Net\Demos\Reports\Text.frx"); one.SaveReport(report, null); |
5) Для FastCloud тоже есть отличия. Здесь не используется протокол OAuth. Авторизация проводится по почтовому адресу и паролю. Создаем клиент FastCloud:
1 2 |
FastReport.Cloud.StorageClient.FastCloud.FastCloudStorageClient fast = new FastReport.Cloud.StorageClient.FastCloud.FastCloudStorageClient(); |
Присваиваем токен. Для формирования токена используем метод GetAccessToken:
1 |
fast.AccessToken = fast.GetAccessToken("email@mail.com", "password");
|
Создаем экземпляр экспорта:
6) Отправка отчета в Jabber(XMPP). Предварительно нам нужно создать xmpp клиент:
1 2 |
FastReport.Messaging.Xmpp.XmppMessenger messenger = new FastReport.Messaging.Xmpp.XmppMessenger("user@xmpp.jp", "password", "user@xmpp.jp"); |
Если нужно настроить Proxy:
1 2 3 4 5 |
messenger.ProxySettings.Server = "server"; messenger.ProxySettings.Port = 999; messenger.ProxySettings.ProxyType = FastReport.Cloud.ProxyType.Http; messenger.ProxySettings.Username = "username"; messenger.ProxySettings.Password = "password"; |
Затем, или до этого, создаем объект отчета:
1 2 |
Report report = new Report(); report.Load(@"С:\Program Files (x86)\FastReports\FastReport.Net\Demos\Reports\Text.frx"); |
И передаем его xmpp клиенту:
1 |
messenger.SendReport(report, null);
|
Выполнив этот код, мы отправляем отчет в облачный сервис FastCloud и сообщение со ссылкой на отчет пользователю jabber. Ссылка в xmpp клиенте выглядит так:
https://cloud.fast-report.com/reports/3da0fcd3f76ac1f6d87c21df85f5d5e2