Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
product:api:faq [20.08.2025 10:50] – создано Белугин Александрproduct:api:faq [20.08.2025 11:09] (текущий) – [Синхронизация данных с внешним приложением] Белугин Александр
Строка 5: Строка 5:
 **Ситуация** **Ситуация**
  
-  1) есть внешний источник данных по неким задачам (перечень задач, срок начала, срок окончания, дополнительные атрибуты). +  есть внешний источник данных по неким задачам (перечень задач, срок начала, срок окончания, дополнительные атрибуты). 
-  2) в ADVANTA на основании полученного перечня задач делается их декомпозиция, задачи и подзадачи обрастают определёнными сведениями +  в ADVANTA на основании полученного перечня задач делается их декомпозиция, задачи и подзадачи обрастают определёнными сведениями 
-  3) внешний источник нечасто, но регулярно обновляется, изменяется перечень и атрибуты задач в нем+  внешний источник нечасто, но регулярно обновляется, изменяется перечень и атрибуты задач в нем
  
 **Вопрос** **Вопрос**
  
-  Каким образом можно проводить регулярное обновление/слияние данных из внешнего источника с перечнем задач в 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 данные из внешней системы и данные по связанным задачам и принимать решение о том, как изменять информацию или же просто мониторить отклонения между данными двух систем.