C# интеграция Dropbox и Exchange пример

C# интеграция Dropbox и Exchange пример

Sherif KenawyTechnical Leave a Comment

1. Введение

1.1 Введение

Мы решили написать небольшой блог для любых разработчиков C#, которые хотели бы разработать интеграционное решение между такими системами, как Dropbox, Exchange и многими другими. Мы создали пример короткого приложения, которое служит в качестве демонстрации того, как простая такая интеграция может быть осуществлена с использованием Connect Bridge платформа.

1.2 Предпосылки

Вы можете просканировать статью, чтобы понять концепцию платформы Connect Bridge. Более того, мы также предоставляем по запросу бесплатную пробную лицензию программы на тот случай, если вы захотите поиграть с ней самостоятельно.

2. Требования к сценарию

Сценарий интеграции, требуемый здесь, заключается в следующем создайте резервную копию вложений электронной почты обмена в папку Dropbox. Может быть полезно иметь резервную копию, или свести к минимуму использование обмена, или по каким-то другим причинам.

3. Базовый документооборот

Независимо от того, какое интеграционное решение вам необходимо внедрить, есть три основных простых шага, которые вам необходимо выполнить. Эти шаги описаны ниже.

3.1 Настройка анализатора запросов CB

Первым делом необходимо убедиться, что вы можете подключиться к целевой системе (Exchange и Dropbox в нашем сценарии); проще всего это сделать с помощью CB Query Analyzer. Здесь я уже настроил свой сервер ConnectBridge с помощью инструмента администрирования для подключения к MS Exchange 365 и к Dropbox, создав необходимые группы и пользователей. Я создал имя пользователя под названием “martin” с паролем “1234”. У этого пользователя есть права на подключение к Exchange365 и Dropbox. Теперь из Query Analyzer я создам 2 соединения с каждой целевой системой и убежусь, что могу успешно подключиться.

Пример Exchange

Рисунок 1: Администрирование аккаунтов

Dropbox и Exchange

Рисунок 2: Администрирование групп и пользователей

Dropbox и Exchange

Рисунок 3: Подключения анализатора запросов

3.2 Проверьте свои показания

Как показано выше, мы имеем успешную конфигурацию и подключение к обеим целевым системам. Теперь мы можем проверить наши утверждения.

3.2.1. Загрузка вложений с Exchange

На моем счету обмена у меня есть пара электронных писем, всего 3 письма, которые имеют вложения, как показано ниже.

Рисунок 4: Exchange Электронная почта

Dropbox и Exchange

Чтобы загрузить вложения из обмена, нам необходимо выполнить 3 шага:

1. Получить список идентификаторов электронной почты с вложениями:
Выполнение нижеприведенного утверждения должно дать нам 3 ID, так как у нас есть только 3 сообщения с вложениями, как показано на рисунке 4 выше. Для тестирования я возьму ID письма с 2 вложениями и получу список вложений в следующем шаге.

ВЫБЕРИТЕ идентификатор из сообщения, ГДЕ НАСТОЯЩИЙ = true;

На рисунке 5 ниже показан результат выполнения вышеуказанного утверждения.

2. Получить список вложений из каждого письма:

Выполнение нижеследующего утверждения должно дать нам 2 строки, одна для readme.txt и одна для logo.jpg, как показано на рисунке 4 выше. Каждое вложение будет иметь поле под названием адрес, которое будет использоваться в следующем шаге для загрузки вложения

EXEC SP_SELECT_ATTACHMENTS 'AAMkADljZGY4ZjYzLWY2MDUtN............';

На рисунке 6 ниже показан результат выполнения вышеуказанного утверждения.

3. Возьми насадки:
Теперь я скачаю вложение log.jpg, используя его адрес, который я получил с предыдущего шага.

EXEC SP_SAVE_ATTACHMENT 'AAMkADljZGY4ZjYzLWY2MDUtNDBjOC0.......';

На рисунке 7 ниже показан результат выполнения вышеуказанного утверждения.

Примечание: мы использовали таблицу и 2 хранимые процедуры, предлагаемые коннектором Exchange. Более подробную информацию о таблицах и хранимых процедурах, предлагаемых коннектором, вы можете найти в разделе “Exchange Разъем Ссылка” документ.

Image

Рисунок 5: Получить список почтовых ID с вложениями

Dropbox и Exchange

Рисунок 6: Получить список вложений из электронного письма

Dropbox и Exchange

Рисунок 7: Получить вложение

3.2.2 Загрузка файла в Dropbox

Это один простой шаг. Чтобы загрузить файл в Dropbox, мы выполним хранимую процедуру “SP_UPLOADFILE”, которая вызовет необходимые API на Dropbox для загрузки файла. Для простоты мы загрузим текстовый файл.

SP_UPLOADFILE:

EXEC SP_UPLOADFILE '@path', '@filename', '@content';

Вышеуказанная хранимая процедура ожидает содержимое файла в байтах.
Я хочу загрузить текстовый файл с именем “first.txt” в корневой каталог Dropbox. Содержимое файла будет “Hello World”; как и было оговорено, нам нужно преобразовать это сообщение “Hello World” в байты с помощью собственного кода или любого онлайн-конвертера.

EXEC SP_UPLOADFILE '/', 'first.txt', ‘SGVsbG8gV29ybGQ=’;

Примечание: Более подробную информацию о таблицах и хранимых процедурах, предлагаемых коннектором Dropbox, можно найти в разделе “Ссылка на разъем Dropbox” документ.

На рисунках 8 и 9 ниже показаны выполнение и вывод вышеописанной хранимой процедуры.

Dropbox и Exchange

Рисунок 8: Загрузка файла в Dropbox

Image

Рисунок 9: Загруженный файл

3.3 Копирование связи и заявлений

Теперь мы знаем, что можем загружать вложения с Exchange, а также знаем, что можем загружать документы в Dropbox. Мы также протестировали наши SQL заявления. Теперь нам нужно скопировать строку соединения из Query Analyzer и протестированные операторы в наше приложение C#.

Чтобы скопировать соединение из анализатора запросов, нам нужно просто щелкнуть правой кнопкой мыши на соединении, нажать Edit и перейти в закладку Advanced, а затем скопировать оттуда текст, как показано ниже на рисунке 10.

Рисунок 10: Копирование строки соединения из анализатора запросов

Dropbox и Exchange

Вот мои соединительные строки для обеих целевых систем.

1ТП23Т

Driver={Media Gateway ODBC Driver};импл='CORBA';host='localhost';port='8087'';acc='ACC_EXCH365_CU7';uid='martin';pwd='1234''

Деппбокс

Driver={Media Gateway ODBC Driver};IMPL=CORBA;HOST='localhost';PORT='8087';ACC='ACC_DRBX_CBD';UID='martin';PWD='1234''.

Теперь мы готовы открыть visual studio.net и приступить к реализации нашего интеграционного решения C#.

4. Прохождение решения

4.1 Создание нового приложения C#

Этого достаточно для создания простого консольного приложения. Наше решение не требует никаких внешних ссылок или развертывания сторонних пакетов. Решение основано на ODBC, поэтому нам просто нужно импортировать необходимые пространства имен в наш класс.

используя System.Data;
используя System.Data.Odbc;

4.2 Создать и открыть соединение с Exchange.

1. Укажите строку соединения

string connectionString = "Driver={Media Gateway ODBC Driver};IMPL=CORBA;HOST='localhost';PORT='8087';ACC='ACC_EXCH365_CU7';UID='martin';PWD='1234''";

2. Создать и открыть соединение:

using (OdbcConnection connection = new OdbcConnection(connectionString))
{
    connection.Open();
    ..............................
}

4.3 Загрузка вложений с Exchange

1. Загрузите идентификаторы писем Exchange с вложениями в таблицу DataTable “messageIDs”. Для подключения и загрузки идентификаторов мы будем использовать DataAdapter “messagesAdapter”.

используя (OdbcDataAdapter messagesAdapter = новый OdbcDataAdapter("SELECT ID FROM Message where HasAttachment = true;", соединение))).
{
    messagesAdapter.Fill(messageIDs);
}

2. Для каждого идентификатора электронной почты в таблице “messageIDs” мы получим список вложений “только информация” и сохраним их в другой таблице DataTable “documentsListTable”. Для получения списка вложений мы будем использовать другой DataAdapter “documentsListAdapter”.

передний край (DataRow messageIDRow в messageIDs.Rows).
{
     string sqlQueryString = string.Format("EXEC SP_SELECT_ATTACHMENTS '{0}';",
                             messageIDRow["ID"]);
     используя (OdbcDataAdapter documentsListAdapter = новый OdbcDataAdapter
                                                  (sqlQueryString, соединение))
            documentsListAdapter.Fill(documentsListTable);
}

3. Для каждого вложения в таблице “documentsListTable” мы получим адрес и используем его для получения фактического вложения, а затем добавим это вложение в третью таблицу “documentsTable”. Для получения вложений/документов мы будем использовать другой DataAdapter “documentsAdapter”.

foreach (DataRow документInfoRow в документахListTable.Rows)
{
    string sqlQueryString = string.Format("EXEC SP_SAVE_ATTACHMENT '{0}';",
                            документInfoRow["Адрес"]);
    using (documentsAdapter = новый OdbcDataAdapter(sqlQueryString, соединение))
          документыАдаптер.заполнение(документыТаблица);
}

4. Для каждого успешно загруженного прикрепленного файла при обмене отображается сообщение пользователю с именем файла прикрепленного файла.

foreach (DataRow documentRow в документахTable.Rows)
    Console.WriteLine(string.Format("{0} downloaded!"),
                                    документRow["OutFileName"]));

4.4 Закрыть соединение с 1ТП23Т.

если (connection.State == ConnectionState.Open)
        соединение. Закрыть();

4.5 Создать и открыть соединение с Dropbox.

1. Укажите строку соединения

string connectionString = "Driver={Media Gateway ODBC Driver};IMPL=CORBA;HOST='localhost';PORT='8087';ACC='ACC_DRBX_CBD';UID='martin';PWD='1234''";

2. Создать и открыть соединение:

using (OdbcConnection connection = new OdbcConnection(connectionString))
{
    connection.Open();
    ..............................
}

4.6 Загрузка вложений в Dropbox

Для каждого файла вложения в “documentsTable”, мы получим имя файла “Имя аутФайла” и содержимое файла “OutBuffer” и сохраните файл в корневой папке Dropbox “/”.

Нам не нужен новый DataAdapter, нам просто нужна команда OdbcCommand, основанная на “SP_UPLOADFILE” хранимой процедуры, о которой мы говорили ранее, и нам нужно добавить к ней необходимые параметры, чтобы мы могли передать хранимой процедуре нужные значения.

foreach (DataRow documentRow в документахTable.Rows)
{
     используя (OdbcCommand command = new OdbcCommand("Exec SP_UploadFile ?, ?, ?",
           соединение))
     {
       command.CommandType = CommandType.StoredProcedure;
       command.Parameters.AddWithValue("@path", "/");
       command.Parameters.AddWithValue("@filename", documentRow["OutFileName"]);
       команда.Parameters.AddWithValue("@content", documentRow["OutBuffer"]);
       fileUploadStatus = (команда.ExecuteNonQuery() > 0) ? "Загружено!" :
                          "Не загружено!";
       Console.WriteLine("{0} : {1}", documentRow["OutFileName"]],
                                      fileUploadStatus);
     }
}

4.7 Закрыть соединение с Dropbox.

если (connection.State == ConnectionState.Open)
        соединение. Закрыть();

5. Запуск решения

Dropbox и Exchange

Рисунок 11: Выполнение решения

Dropbox и Exchange

Рисунок 12: Содержимое папки Dropbox после запуска решения

6. Примечания к решению

Мы постарались максимально упростить логику приложения, однако логику можно было бы улучшить, сохранив вложения из каждого письма обмена в отдельную папку, где имя папки могло бы быть частью ID сообщения или любого другого уникального идентификатора.

Для простоты мы проигнорировали многие основные стандарты кодирования, включая, но не ограничиваясь ими:

1. Имея строки соединения в конфигурационном файле
2. Хэширование и шифрование паролей с помощью хэш-кода и соли
3. Реализация шаблонов дизайна, таких как принцип одиночной ответственности или даже лучше, принцип инверсии зависимости

7. Полный исходный код

используя Систему;
используя Систему.Данные;
используя System.Data.Odbc;

пространство имён MySolution
{
    классная программа
    {
        статический void Main(string[] args)
        {
            //обеспечить соединение
            string connectionString = string.Empty;
            string sqlQueryString = string.Empty;
            Соединение OdbcConnection;
            Команда OdbcCommand;
            DataTable documentsTable = new DataTable();
            OdbcDataAdapter messagesAdapter, documentsListAdapter, documentsAdapter;
            DataTable messageIDs = new DataTable();
            DataTable documentsListTable = new DataTable();

            //создавая соединение с Exchange
            соединениеString = "Driver={Media Gateway ODBC Driver};IMPL=CORBA;HOST='localhost';PORT='8087';ACC='ACC_EXCH365_CU7';UID='martin';PWD='1234''";
            using (connection = new OdbcConnection(connectionString))
            {
                //открыть соединение
                соединение. Open();

                //загрузить идентификаторы сообщений для сообщений с вложениями.
                используя (messagesAdapter = new OdbcDataAdapter("SELECT ID FROM Message where HasAttachment = true;", connection))
                {
                    // заполните таблицу идентификаторов сообщений сообщениями.
                    messagesAdapter.Fill(messageIDs);
                }

                // для каждого сообщения, используя идентификатор сообщения, получите список вложений.
                передний край (DataRow messageIDRow в messageIDs.Rows).
                {
                    sqlQueryString = string.Format("EXEC SP_SELECT_ATTACHMENTS '{0}';", messageIDRow["ID"]);
                    using (documentsListAdapter = new OdbcDataAdapter(sqlQueryString, соединение))
                        documentsListAdapter.Fill(documentsListTable);
                }

                //Забудьте о каждом атташе и сохраните его в документеTable/
                foreach (DataRow документInfoRow в документахListTable.Rows)
                {
                    sqlQueryString = string.Format("EXEC SP_SAVE_ATTACHMENT '{0}';", документInfoRow["Адрес"]);
                    using (documentsAdapter = new OdbcDataAdapter(sqlQueryString, соединение))
                        документыАдаптер.заполнение(документыТаблица);
                }

                // пропустите обратную связь с пользователем, что эти файлы были загружены
                foreach (DataRow documentRow в документахTable.Rows)
                    Console.WriteLine(string.Format("{0} downloaded!", documentRow["OutFileName"])));

                //Закрыть соединение с Exchange
                если (connection.State == ConnectionState.Open)
                    соединение. Закрыть();
            }

            //создание соединения с DropBox
            соединениеString = "Driver={Media Gateway ODBC Driver};IMPL=CORBA;HOST='localhost';PORT='8087';ACC='ACC_DRBX_CBD';UID='martin';PWD='1234''";
            using (connection = new OdbcConnection(connectionString))
            {
                //открыть соединение
                соединение. Open();

                //Статус размещения документов
                строковый файлUploadStatus = string.Empty;

                // для каждого документа, который мы имеем в нашей таблице документов/
                foreach (DataRow documentRow в документахTable.Rows)
                {
                    //вызывает сохраненную процедуру для загрузки файла.
                    используя (команда = new OdbcCommand("Exec SP_UploadFile ?, ?, ?", соединение)).
                    {
                        command.CommandType = CommandType.StoredProcedure;
                        command.Parameters.AddWithValue("@path", "/");
                        command.Parameters.AddWithValue("@filename", documentRow["OutFileName"]);
                        команда.Parameters.AddWithValue("@content", documentRow["OutBuffer"]);

                        //Проверить состояние и отображение на экране
                        fileUploadStatus = (команда.ExecuteNonQuery() > 0) ? "Загружено!" "Не загружен!";
                        Console.WriteLine("{0} : {1}", documentRow["OutFileName"], fileUploadStatus);
                    }
                }

                //закрыть соединение с Dropbox
                если (connection.State == ConnectionState.Open)
                    соединение. Закрыть();
            }

            //отзывы пользователей
            Console.WriteLine("все готово...");
            Console.ReadKey();
        }
    }
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.