«Центр Разработки и Внедрения Террасофт Поволжье» Интеграция с внешними системами
Содержание Средства и инструменты интеграции Протокол OData Интеграция через Web service PT 1C Connector Quartz.NET
Средства и инструменты интеграции
Цели интеграции Bpmonline 1C Средство интеграции Синхронизация работы подразделений компании Информация вводится один раз Единая база справочников Автоматический обмена данными между системами
Средства интеграции Bpmonline Средство интеграции БП bpmonline SQL bpmonline Web service 1C SQL 1C OData Com Приложение 1C
Дополнительные инструменты интеграции.Net Managed Assemblies Com Dll Промежуточные файлы Подробнее об интеграции:
DEMO Взаимодействие с bpmonline с помощью dll-библиотек
DLL. Добавление dll файла в разделе в конфигураторе
DLL. Добавление Using директив
DLL. Создание бизнес-процесса и написание кода
DLL. Результат работы
Основные схемы интеграции. Мастер-система SQL bpmonline SQL 1C OData Приложение БП bpmonline Web service 1C Мастер-система – система, изменения данных которой являются наиболее приоритетными при интеграции
Интеграция на основе SQL job SQL bpmonline SQL 1C Достоинства Быстрота Безопасность Недостатки On-site 1C только на SQL БД Индивидуальные для каждого проекта хранимые процедуры
Интеграция на основе SQL job. Разработка Дополнительные поля в 1С для хранения id записи из bpmonline Хранимые процедуры интеграции SQL Job запускающий хранимые процедуры в соответствии с расписанием SQL bpmonline SQL 1C
Интеграция через отдельное приложение SQL 1C OData Приложение Com 1C Достоинства On-site и on-demand Файловая и SQL 1C Недостатки Невозможна интеграция по событию Скорость
Интеграция через отдельное приложение. Разработка Дополнительные поля в 1С для хранения id записи из bpmonline либо в bpmonline для хранения кодов, номеров и дат 1С Код Регистрация приложения в Windows Scheduler SQL 1C OData Приложение Com 1C
Протокол 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 Взаимодействие с bpmonline по протоколу OData
OData. Генерация прокси-классов сервиса
OData. Работа через WCF-клиент Получение коллекции контактов явным запросом через объект контекста: public static void GetContactCollectionExample() { // Объявление переменной адреса сервиса OData Uri serverUri = new Uri(" /0/ServiceModel/EntityDataService.svc/"); // Определение Uri запроса к сервису, который возвращает коллекцию контактов. Uri contactUri = new Uri(serverUri, "ContactCollection"); // Создание объекта контекста приложения BPMonline. var context = new BPMonline(serverUri); // Указание имени и пароля пользователя BPMonline. context.Credentials = new NetworkCredential("BPMUserName", "BPMUserPassword"); try { // Выполнение явного запроса к сервису вызовом метода Execute(). foreach (Contact contact in context.Execute (contactUri)) { // Выполнение действий с контактами. } } catch (Exception ex) { // Обработка ошибок. } Получение коллекции контактов неявным запросом через объект контекста: public static void GetContactCollectionExample() { // Объявление переменной адреса сервиса OData Uri serverUri = new Uri(" /0/ServiceModel/EntityDataService.svc/"); // Создание объекта контекста приложения BPMonline. var context = new BPMonline(serverUri); // Указание имени и пароля пользователя BPMonline. context.Credentials = new NetworkCredential("BPMUserName", "BPMUserPassword"); try { // Определение неявного запроса к сервису для получения коллекции контактов. DataServiceQuery allContacts = context.ContactCollection; foreach (Contact contact in allContacts) { // Выполнение действий с контактами. } } catch (Exception ex) { // Обработка ошибок. } Пример получения коллекции контактов через LINQ–запрос: public static void GetContactCollectionExample() { // Объявление переменной адреса сервиса OData Uri serverUri = new Uri(" /0/ServiceModel/EntityDataService.svc/"); // Создание контекста приложения BPMonline. var context = new BPMonline(serverUri); // Указание имени и пароля пользователя BPMonline. context.Credentials = new NetworkCredential("BPMUserName", "BPMUserPassword"); try { // Построение запроса LINQ для получение коллекции контактов. var allContacts = from contacts in context.ContactCollection select contacts; foreach (Contact contact in allContacts) { // Выполнение действий с контактами. } } catch (Exception ex) { // Обработка ошибок. }
Особенности использования OData в bpmonline Используя ОData нельзя работать с системными таблицами, например, нельзя создавать пользователей системы, т.к. при работе через протокол OData на уровне ядра запрещен доступ к системным таблицам (с приставкой Sys-) В bpmonline реализована принудительная постранично есть при возврате результирующих коллекций объектов. По умолчанию запрос возвращает первые 40 объектов.
Интеграция через Web service
Интеграция через Web service 1C БП bpmonline Web service 1C Достоинства On-site и on-demand Файловая и SQL 1C Интеграция по событию Недостатки Скорость Web service доступны через интернет
Интеграция через Web service 1C. Разработка БП bpmonline Web service 1C Web service получение данных об объектах, создание новых, удаление (в случае мастер-системы bpmonline) XDTO package 1C Интерфейс БП bpmonline (событийные либо запускающиеся с помощью Quartz.NET)
PT 1C Connector
PT 1C Connector – продукт, позволяющий пользователю bpmonline 7. X настраивать интеграцию с 1С. Гибкое расписание Интеграция справочников и документов Фильтрация данных Иерархии и агрегации Выполнение скриптов в 1С
DEMO
Quartz.NET
Библиотека Quartz.NET Quartz.NET – это библиотека.NET с открытым исходным кодом, написанным на C#. Планировщик оперирует понятиями задание и триггер. Задание (job) представляет собой исполняемую задачу, которая может быть запланирована. Триггер (trigger) представляет собой график выполнения задачи.
Преимущества Quartz.NET Задание может быть создано и сохранено в планировщике независимо от триггера После отрабатывания триггеров задание остается в планировщике и может быть отредактировано или использовано в дальнейшем без повторного переопределения Одно задание может быть связано с несколькими различными триггерами Триггер может быть модифицирован без переопределения связанных с ним заданий
Методы и свойства класса AppScheduler Instance - получение экземпляра планировщика приложения CreateProcessJob() - создание задания для запуска процесса ScheduleImmediateProcessJob() - планирование задачи для немедленного однократного запуска процесса ScheduleMinutelyProcessJob() - планирование задачи для запуска процесса с заданным интервалом, начиная с текущего момента DoesJobExist() - проверка существования задания в заданной группе RemoveJob() - удаление задачи из планировщика Более подробно свойства и методы класса описаны в bpmonline SDK
Примеры работы с AppSheduler и Quartz.NET запуск процесса по графику: начиная с текущего момента, запускать процесс в 10:30, 11:30, 12:30 и 13:30 каждую среду и пятницу // Создание задания для запуска процесса. IJobDetail job = AppScheduler.CreateProcessJob("ReadSomeDataProcessJob", null, "ReadSomeDataProcess", "CurrentWorkspace", "CurrentUserName"); // Создание Cron-триггера, соответствующего графику запуска задания. ITrigger trigger = new CronTriggerImpl("ReadSomeDataProcessTrigger", null, " ? * WED,FRI"); // Добавление задания и триггера в планировщик. AppScheduler.Instance.ScheduleJob(job, trigger); начиная с текущего момента, запускать процесс каждые 15 минут в течение часа // Создание задания для запуска процесса. IJobDetail job = AppScheduler.CreateProcessJob("ReadSomeDataProcessJob", null, "ReadSomeDataProcess", "CurrentWorkspace", "CurrentUserName"); // Создание простого триггера, соответствующего графику запуска задания. ITrigger trigger = new SimpleTriggerImpl("ReadSomeDataProcessTrigger", null, DateTime.UtcNow, DateTime.UtcNow.AddHours(1), MisfireInstruction.SimpleTrigger.RescheduleNextWithExistingCount, TimeSpan.FromMinutes(15)); // Добавление задания и триггера в планировщик. AppScheduler.Instance.ScheduleJob(job, trigger); начиная с текущего момента, запускать процесс с интервалом в 3 часа // Задание интервала запуска процесса (в минутах). int minutleyInterval = 180; // Добавление задания по запуску процесса в планировщик. AppScheduler.ScheduleMinutelyProcessJob("ReadSomeDataProcessJob", null, "ReadSomeDataProcess", "CurrentWorkspace", "CurrentUserName", minutleyInterval);
Пример передачи параметров в БП (для 7.х) // Создание словаря, хранящего параметры var parameters = new Dictionary (); // Добавление параметра в словарь 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);
Россия: Самара, Московское шоссе 4 а +7 (846) , Москва, Ул. Каланчевская, д (495) , Киев, пр-т. Краснозвездный, 115-А +38 (044) Украина: PORTLAND HOUSE, BRESSENDAN PLACE, LONDON SW1E 5RS +44 (2) UK: Alexandria: 901 N Pitt Street, Suite 325 Alexandria +1 (917) m