Это старая версия документа!


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

Здесь собраны ответы на частые вопросы, возникающие при интеграции внешних информационных систем с платформой 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) на заинтересованных пользователей с информацией о произошедших изменениях.
  • С заданной регулярностью запускаем созданный скрипт (через cron в Linux или планировщик задач в Windows)

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