Привет друзья, помогите реализовать обмен между двумя нетиповыми базами..
Имеются 2 базы, (не типовые), нужен небольшой обмен 2-3 справочников и документов, реализовал с помощью Web-Сервисов и Универсальным обменом данных XML,. Регистрирую изменения с помощью правил обмена и выгружаю измененные объекты.
В теории всё работает (и в копии).
Т.Е. выгружаются все объекты - регистрация в плане обмена удаляется.
Но если по какой либо причине не удалось загрузить файлы в приемнике (Возникла ошибка, отключили свет\интернет и тд) - файлы не смогут загрузиться повторно, и в плане обмена регистрация уже будет снята...
Можете подсказать как лучше настроить ? или направить в нужном направлении ...
Обмен, можно сказать, односторонний.
Есть мысли подключиться к базе и выгрузить файлы первый раз, и второй отправить обратно эти же файлы для удаления регистрации изменения )) Но это не очень оптимальное решение
(1) Попробовать перейти на http-сервисы и json. Если данные в приемнике загрузились вернет код 200 и все ОК. Если нет, сформировать код с ошибкой. Если ошибка, значит регистрацию в плане обмена не удалять. Правда что делать потом не очень ясно. Но это полностью переделывать обмен. Хотя по мне http и json как-то интереснее, чем XML и веб-сервисы.
А обмен можно сделать с смешнее. Источник по http уведомляет что есть изменения данных и где, а приемник в ответ запрашивает эти данные. Тогда наверно вообще можно от планов обмена уйти. Это уже так, размышления как можно сделать.
Источник по http уведомляет что есть изменения данных и где
можно по подробнее ?) Как узнать что есть изменения без регистрации плана обмена ? После каждого изменения\нового документа - отправлять запрос на обновления в базу1 или я не правильно понял ?)
(9) Ну вариантов тут много. Да, самый простой - это после изменения/создания документа тут же отправлять запрос/уведомление на сторону-приемник. Что делать на приемнике, сразу получать данные или где-то их накопить и с какой-то периодичностью забирать, тут уже есть варианты. И в данном случае можно на этапе получения данных явно указать что они нормально легли. Либо нет. Что делать с информацией об ошибке при получении данных, это уже зависит от постановки задачи. Может это и не лучший вариант. Но вполне себе вариант.
Кстати, он гораздо гибче. В том плане, что можно реализовать какие-то хитрые алгоритмы обработки полученной информации. Т.е. не просто синхронизация, а с какими-то плюшками. Это не всегда нужно конечно, но иногда очень даже полезно.
(2)Нет, смотри,
база1 подключается к базе2 по WS.
там формируется файл xml (стандартные процедуры универсального обмена xml)
и регистрация Плана обмена удаляется сразу ( тоже типовой механизм)
и формально файл выгружен и возвращается обратно в базу1
(Вот если при чтении произойдет ошибка ) - данные потеряются
Даже не отключение света скорее, а какая-нибудь банальная ошибка пользователя в документе например (не правильно заполнил реквизит)
(3) Ну тогда используйте трехфакторную структуру.
1. Файл выгрузки сохраняется в отдельный РС, а в Базу 1 возвращается его адрес (идентификатор в регистре), База 2 хранит у себя идентификаторы.
2. База 1 запрашивает по необработанным идентификаторам состав файла.
3. После успешной обработки файла База1 подает сигнал в Базу2 о необходимости удалить файл (успешная обработка).
(4) Хотя есть нюанс )
Допустим файл сфомировался с ошибкой, (допустим документ "Установка цен", пользователь не указал отбор и выгрузилось без ошибок но 2 документа с одной номенклатурой)
По сути фал сохранен, но база1 не сможет его загрузить и будет ругаться ...