• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Merge Conflict Documents

  • Автор темы Автор темы FixeR
  • Дата начала Дата начала
F

FixeR

Пользователь берёт документ на редактирование. В это время по расписанию начинает исполняться агент на сервере, в котором меняется одно поле у этого же документа и сохраняется (doc.Save). Теперь пользователь нажимает на сохранение документа:

Another copy of this document was saved while you were editing it.
Save your changes also as a Save Conflict Document?

Точно известно, что в агенте меняется только 1 поле, которого нет на форме.
Т.е. пользователь это поле изменить никак не может.

Вопрос: как-нибудь можно сохранить изменения агента и пользователя в одном документе?

В агенте - doc.Save(True, False)
У формы - Merge/No Conflicts
Кнопка "Сохранить" на форме - uidoc.Save

Перепробовал кучу комбинаций уже.

По хелпу мне нужно у формы выставить значение "Merge/No Conflicts".
Но какой бы вариант я там не выбирал - результат один и тот же.

Ещё у Save есть пара параметров, отвечающих за создание конфликтных документов - совершенно непонятно, как это всё работает в паре с параметром Conflict Handling формы.
 
Правильно - это выставить у форм "No Conflicts", а во всех случаях изменении документов использовать блокировки (метод Lock), - поищите по форуму, здесь много было об этом.
 
а во всех случаях изменении документов использовать блокировки (метод Lock)
Ну это слишком просто ;)

Вот из справки:
Merge Conflicts -- If a replication conflict occurs, saves the edits to each field in a single document. However, if two users edit the same field in the same document, Notes saves one document as a main document and the other document as a response document marked as a replication conflict. The main document is selected based on the criteria listed in the bullet above.
 
Не то выделил. Надо было: If a replication conflict occurs.

Добавлено: Можно в QuerySave проверять не изменился ли документ.
 
могу порекомендовать варианты, но потребуют серьезной реализации:

1. Юзеру отдавать на редактирование копию документа ( например ввиде респонса), при сохранении обновлять по его образу оринигал

2. Как я писал для случая многосерверной распределенной среды писал движок, который обрабатывал очередь транзакций по предопределенным правилам. Транзакции генерировались действиями пользователя.

Вариант с блокировкой лично меня не устрол для распределенной среды,т.к. долго держит документ занятым...

3. Еще один раз для разбора конфликтов репликаций писал агент, который анализировал доки и сливал в один.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab