«Центр Разработки и Внедрения Террасофт Поволжье» Интеграция с внешними системами Содержание Средства и инструменты интеграции Протокол OData Интеграция через Web service PT 1C Connector Quartz.NET Средства и инструменты интеграции Цели интеграции Единая база справочников Bpm’online Автоматический обмена данными между системами Синхронизация работы подразделений компании Средство интеграции Информация вводится один раз 1C Средства интеграции Средство интеграции Bpm’online 1C БП bpm’online Web service 1C SQL bpm’online SQL 1C OData Com Приложение Дополнительные инструменты интеграции .Net Managed Assemblies Com Dll Промежуточные файлы Подробнее об интеграции: http://www.terrasoft.ua/software/bpmonline/integration DEMO Взаимодействие с bpm’online с помощью dll-библиотек DLL. Добавление dll файла в разделе в конфигураторе DLL. Добавление Using директив DLL. Создание бизнес-процесса и написание кода DLL. Результат работы Основные схемы интеграции. Мастер-система Мастер-система – система, изменения данных которой являются наиболее приоритетными при интеграции SQL bpm’online OData БП bpm’online SQL 1C Приложение SQL 1C Web service 1C Интеграция на основе SQL job SQL bpm’online Достоинства SQL 1C Недостатки • Быстрота • On-site • Безопасность • 1C только на SQL БД • Индивидуальные для каждого проекта хранимые процедуры Интеграция на основе SQL job. Разработка SQL bpm’online SQL 1C Дополнительные поля в 1С для хранения id записи из bpm’online Хранимые процедуры интеграции SQL Job запускающий хранимые процедуры в соответствии с расписанием Интеграция через отдельное приложение SQL 1C OData Приложение Com 1C Достоинства • On-site и on-demand • Файловая и SQL 1C Недостатки • Невозможна интеграция по событию • Скорость Интеграция через отдельное приложение. Разработка SQL 1C OData Приложение Com 1C Дополнительные поля в 1С для хранения id записи из bpm’online либо в bpm’online для хранения кодов, номеров и дат 1С Код Регистрация приложения в Windows Scheduler Протокол OData Протокол OData Data Protocol (OData) — это открытый веб-протокол для запроса и обновления данных Позволяет выполнять операции с ресурсами, используя в качестве запросов HTTP-команды, и получать ответы в форматах Atom, JSON или XML. Microsoft выпустила OData SDK, состоящий из библиотек для .NET Framework, AJAX, PHP, Java, JavaScript, WebOS, и Objective-C. OData. Поддерживаемые операции Добавление/обновление/удаление объекта Добавление/удаление связей между объектами Получение коллекции объектов Получение конкретного объекта Получение отдельного поля / нескольких полей конкретного объекта Получение N первых объектов коллекции Возврат коллекции объектов, пропустив N объектов (с N+1 объекта) Сортировка объектов DEMO Взаимодействие с bpm’online по протоколу OData OData. Генерация прокси-классов сервиса OData. Работа через WCF-клиент Получение Пример получения коллекции коллекции контактов контактов явным запросом неявным через запросом LINQ–запрос: через через объект объект контекста: контекста: public static void GetContactCollectionExample() { // Объявление переменной адреса сервиса OData Uri serverUri = new Uri("http://<имя_сервера>/0/ServiceModel/EntityDataService.svc/"); Определение Uri запроса к сервису, который возвращает коллекцию контактов. // Создание контекста объекта контекста приложения приложения BPMonline. BPMonline. Uri context contactUri = new Uri(serverUri, "ContactCollection"); var = new BPMonline(serverUri); Создание имени объекта контекста приложенияBPMonline. BPMonline. // Указание и пароля пользователя var context = new BPMonline(serverUri); context.Credentials = new NetworkCredential("BPMUserName", "BPMUserPassword"); // имени и пароля пользователя BPMonline. tryУказание { context.Credentials = new LINQ NetworkCredential("BPMUserName", "BPMUserPassword"); // Определение Построение запроса неявного запроса для получение к сервисуколлекции для получения контактов. коллекции контактов. try var { allContacts = from contacts DataServiceQuery<Contact> allContacts in context.ContactCollection = context.ContactCollection; select contacts; // Выполнение явного запроса к сервису вызовом метода Execute<>(). foreach (Contact contact in allContacts) { foreach (Contactдействий contact inсконтактами. context.Execute<Contact>(contactUri)) { ////Выполнение Выполнение действийс контактами. } // Выполнение действий с контактами. } } catch (Exception ex) { } catch (Exception ex) { // Обработка ошибок. } // Обработка ошибок. } } } Особенности использования OData в bpm’online Используя ОData нельзя работать с системными таблицами, например, нельзя создавать пользователей системы, т.к. при работе через протокол OData на уровне ядра запрещен доступ к системным таблицам (с приставкой Sys-) В bpm’online реализована принудительная постраничность при возврате результирующих коллекций объектов. По умолчанию запрос возвращает первые 40 объектов. Интеграция через Web service Интеграция через Web service 1C БП bpm’online Достоинства Web service 1C Недостатки • On-site и on-demand • Скорость • Файловая и SQL 1C • Web service доступны через интернет • Интеграция по событию Интеграция через Web service 1C. Разработка БП bpm’online Web service получение данных об объектах, создание новых, удаление (в случае мастер-системы bpm’online) XDTO package 1C Интерфейс БП bpm’online (событийные либо запускающиеся с помощью Quartz .NET) Web service 1C PT 1C Connector PT 1C Connector PT 1C Connector – продукт, позволяющий пользователю bpm’online 7.X настраивать интеграцию с 1С. Интеграция справочников и документов Гибкое расписание Фильтрация данных Иерархии и агрегации Выполнение скриптов в 1С DEMO Quartz.NET Библиотека Quartz.NET Quartz.NET – это библиотека .NET с открытым исходным кодом, написанным на C#. Планировщик оперирует понятиями задание и триггер. Задание (job) представляет собой исполняемую задачу, которая может быть запланирована. Триггер (trigger) представляет собой график выполнения задачи. Преимущества Quartz.NET Задание может быть создано и сохранено в планировщике независимо от триггера После отрабатывания триггеров задание остается в планировщике и может быть отредактировано или использовано в дальнейшем без повторного переопределения Одно задание может быть связано с несколькими различными триггерами Триггер может быть модифицирован без переопределения связанных с ним заданий Методы и свойства класса AppScheduler Instance - получение экземпляра планировщика приложения CreateProcessJob() - создание задания для запуска процесса ScheduleImmediateProcessJob() - планирование задачи для немедленного однократного запуска процесса ScheduleMinutelyProcessJob() - планирование задачи для запуска процесса с заданным интервалом, начиная с текущего момента DoesJobExist() - проверка существования задания в заданной группе RemoveJob() - удаление задачи из планировщика Более подробно свойства и методы класса описаны в bpm’online SDK Примеры работы с AppSheduler и Quartz.NET начиная с текущего момента,начиная запуск процесса по графику: запускать с текущего процесс смомента, интервалом в 3 часа запускать процесс запуска каждые 15 минут в течение часа в 10:30,процесса 11:30, 12:30 и 13:30 каждую среду и пятницу // Задание интервала (в минутах). int minutleyInterval = 180; // Создание задания для запуска процесса. IJobDetail job = AppScheduler.CreateProcessJob("ReadSomeDataProcessJob", null, // Добавление задания по запуску процесса в планировщик. "ReadSomeDataProcess", "CurrentWorkspace", "CurrentUserName"); AppScheduler.ScheduleMinutelyProcessJob("ReadSomeDataProcessJob", null, "ReadSomeDataProcess", "CurrentWorkspace", "CurrentUserName", minutleyInterval); // Создание простого триггера, соответствующего графику запуска задания. Cron-триггера, соответствующего графику запуска задания. ITrigger trigger = new SimpleTriggerImpl("ReadSomeDataProcessTrigger", null, CronTriggerImpl("ReadSomeDataProcessTrigger", null, DateTime.UtcNow, DateTime.UtcNow.AddHours(1), "0 30 10-13 ? * WED,FRI"); MisfireInstruction.SimpleTrigger.RescheduleNextWithExistingCount, TimeSpan.FromMinutes(15)); // Добавление задания и триггера в планировщик. AppScheduler.Instance.ScheduleJob(job, trigger); // Добавление задания и триггера в планировщик. AppScheduler.Instance.ScheduleJob(job, trigger); Пример передачи параметров в БП (для 7.х) // Создание словаря, хранящего параметры var parameters = new Dictionary<string, object>(); // Добавление параметра в словарь parameters.Add("ConnectorSettingsId", connectorSettings.ToString()); IJobDetail job = AppScheduler.CreateProcessJob("ReadSomeDataProcessJob", null, "ReadSomeDataProcess", "CurrentWorkspace", "CurrentUserName", parameters); // Создание простого триггера, соответствующего графику запуска задания. ITrigger trigger = new SimpleTriggerImpl("ReadSomeDataProcessTrigger", null, DateTime.UtcNow, DateTime.UtcNow.AddHours(1), MisfireInstruction.SimpleTrigger.RescheduleNextWithExistingCount, TimeSpan.FromMinutes(15)); // Добавление задания и триггера в планировщик. AppScheduler.Instance.ScheduleJob(job, trigger); Россия: 443035 Самара, Московское шоссе 4а +7 (846) 266-55-69 [email protected] 123090, Москва, Ул. Каланчевская, д. 16 +7 (495) 280-16-80 [email protected] Украина: 03118, Киев, пр-т. Краснозвездный, 115-А +38 (044) 363-31-33 [email protected] UK: PORTLAND HOUSE, BRESSENDAN PLACE, LONDON SW1E 5RS +44 (2) 0338 40040 [email protected] Alexandria: 901 N Pitt Street, Suite 325 +1 (917) 383-27-70 Alexandria [email protected]