Ответы на вопросы по интеграциям

Здесь собраны ответы на частые вопросы, возникающие при интеграции внешних информационных систем с платформой ADVANTA, а также возможные варианты решения различных типовых задач

Ситуация

  • есть внешний источник данных по неким задачам (перечень задач, срок начала, срок окончания, дополнительные атрибуты).
  • в ADVANTA на основании полученного перечня задач делается их декомпозиция, задачи и подзадачи обрастают определёнными сведениями
  • внешний источник нечасто, но регулярно обновляется, изменяется перечень и атрибуты задач в нем

Вопрос

  • каким образом можно проводить регулярное обновление/слияние данных из внешнего источника с перечнем задач в ADVANTA, ничего при этом не потеряв из тех задач/подзадач, по которым в ADVANTA со времени последнего обмена произошли изменения определённых атрибутов (часть подзадач уже выполнена, сроки основной задачи изменились и т.п.)?

Ответ

  • Для реализации изложенной ниже логики пишем скрипт на Power Shell, Python или мини-приложение на C# (.Net), но можно использовать и другие языки / средства запуска сценариев.
  • Получаем данные из внешней системы (из файла, API или шины). Критически важно, чтобы у полученных из внешнего источника данных были уникальные идентификаторы по каждой задаче (уникальные для данного источника и однозначно идентифицирующие каждую задачу – далее «внешний ключ» задачи).
  • Сохраняем полученные данные в скрипте (или нашем приложении из п.1) в массив для обработки.
  • Последовательно обрабатываем хранящиеся в массиве задачи с использованием цикла.
  • Запросом в API ADVANTA (быстрее всего будет сделать вызов LINQ-запроса с параметром в виде «внешнего ключа») проверяем что в ADVANTA еще нет объекта, связанного с задачей из внешнего источника. Если это так, то создаем в ADVANTA через API новый объект и в скрытом поле этого объекта (надо его будет создать через админку) сохраняем значение «внешнего ключа» для будущих синхронизаций. Все полученные из внешней системы атрибуты задачи сохраняем в системные или кастомные реквизиты объекта в ADVANTA (или в справочники, при необходимости). Созданную в ADVANTA задачу (имеющую связь с внешней системой) желательно не изменять вручную, но декомпозировать на вложенные в нее подчиненные задачи/объекты и вести работу с ними (либо использовать горизонтальные связи с другими задачами в ADVANTA - новыми или уже существующими).
  • Если связанный с задачей из внешнего источника объект уже есть в ADVANTA (найдено совпадение по «внешнему ключу»), то полученные из внешней системы данные необходимо сохранить в объекте ADVANTA, но не затирая текущие значения его реквизитов, а сохранив полученные из внешней системы данные в отдельном табличном справочнике (нескольких справочниках, при необходимости).
  • По «связанным» с внешней системой объектам в ADVANTA можно создать контрольный отчет, для отображения расхождений в атрибутах задачи в ADVANTA и полученных по этой задаче данных из внешней системы.
  • Можно дополнительно на уровне скрипта/приложения или через модуль ADVANTA «Цифровой помощник» (Триггеры) делать сравнение атрибутов, и в случае их изменения направлять уведомление (или создавать дискуссию в ADVANTA) на заинтересованных пользователей с информацией о произошедших изменениях.
  • С заданной регулярностью запускаем созданный скрипт (через cron в Linux или планировщик задач в Windows)

Таким образом информация в объектах ADVANTA будет защищена от изменений, пришедших из внешней системы, но при этом можно будет сопоставлять непосредственно в ADVANTA данные из внешней системы и данные по связанным задачам и принимать решение о том, как изменять информацию или же просто мониторить отклонения между данными двух систем.