Конфликтные документы

dimat

Well-known member
31.07.2008
508
0
BIT
0
Всем привет.
Ситуация:
В БД включена блокировка документов
Пользователь открывает документ на редактирование, после некоторых действий(Собираются данные и рисуется таблица в Rich Text Field) документ рефрешится
Код:
Call b2.Update
Call doccurr.Document.ReplaceItemValue("Form", "FormName")
Call ws.EditDocument(True, doccurr.Document)
Call doccurr.Document.ReplaceItemValue("SaveOptions", "0")
Call doccurr.Close(True)
Далее ползователь нажимает кнопку с действием
@Command([FileSave]);
@Command([FileCloseWindow])
Вываливается сообщение:
Another copy of this document was saved while your were editing it. Save your changes also as a Save Conflict document? Да Нет.
Жмем Да - создается конфликтный документ, жмем Нет - данные не сохраняются вобще.
Что сделать чтобы данные сохранялись в том же документе?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
dimat
скорее всего крому уишного сейва где-то используется еще и обычный сейв, в перед ним нужно делать лоченье или же добиться только одного сейва
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
После doccurr.Close(True) происходит разблокировка документа и изменяются поля в документе на диске. Но перед этим ты уже открыл заблокированный документ. Отсюда и конфликт. Значит, нужно делать принудительную разблокировку перед ws.EditDocument(True, doccurr.Document).
 

dimat

Well-known member
31.07.2008
508
0
BIT
0
скорее всего крому уишного сейва где-то используется еще и обычный сейв, в перед ним нужно делать лоченье или же добиться только одного сейва
Сейвов кроме уишного по кнопке
@Command([FileSave]);
@Command([FileCloseWindow])
Нет
 
N

nvyush

Натыкался на ситуацию, когда при наличии поля SaveOptions = "1" обновление рт-поля вызывало "несанкционированное" сохранение документа.
 

dimat

Well-known member
31.07.2008
508
0
BIT
0
После doccurr.Close(True) происходит разблокировка документа и изменяются поля в документе на диске. Но перед этим ты уже открыл заблокированный документ. Отсюда и конфликт. Значит, нужно делать принудительную разблокировку перед ws.EditDocument(True, doccurr.Document).
Код:
		Call doccurr.Document.ReplaceItemValue("Form", "CheckOPO")
[b]Call doccurr.Document.UnLock[/b]
Call ws.EditDocument(True, doccurr.Document)
Call doccurr.Document.ReplaceItemValue("SaveOptions", "0")
Call doccurr.Close(True)

Не помогает
 
N

nvyush

скорее всего крому уишного сейва где-то используется еще и обычный сейв, в перед ним нужно делать лоченье или же добиться только одного сейва
Натыкался на ситуацию, когда при наличии поля SaveOptions = "1" обновление рт-поля вызывало "несанкционированное" сохранение документа.
link removed
Возможно rt.Update также вызывает "несанкционированное" сохранение документа при наличии поля SaveOptions = "1". Проверьте наличие вышеуказанного поля на форме и, если оно присутствует, попробуйте без него.
 

dimat

Well-known member
31.07.2008
508
0
BIT
0
link removed
Возможно rt.Update также вызывает "несанкционированное" сохранение документа при наличии поля SaveOptions = "1". Проверьте наличие вышеуказанного поля на форме и, если оно присутствует, попробуйте без него.
Поля SaveOptions на форме нет

Кстати, что за ерунда с форумом? Постаянно просит вводит логин и пасс
 
H

hosm

офф:
Кстати, что за ерунда с форумом? Постаянно просит вводит логин и пасс
о, еще один поймал ошибку Акупаки? - link removed
Ребята, давайте договоримся так: пишем ошибки в указанную выше тему в раздел Обсуждения сайта и форума, админ vital сейчас пхпшник, лотус-форум почти не смотрит, я тоже не всегда заглядываю во все сообщения и темы, чтоб дать ссылку виталу...
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">и указываем детали - что, где и как. диалог на работе(не мой,слегка отмодерировано:rolleyes:), автор смотрел под ие и фф:</div></div><div class="sp-body"><div class="sp-content">спорю с дизайнером
убрался сдвиг или нет
он дурак
я же точно знаю что убрался)
...
у него хром
...
качаю хром
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Код:
Call doccurr.Close(True)
осторожно, данная команда всегда работает с вылетом лотуса
 
N

nvyush

Код:
Call doccurr.Close(True)
осторожно, данная команда всегда работает с вылетом лотуса
Не заметил, чтобы от этой команды Лотус падал (на 7 и 8, меньше не пробовал). Также не заметил, чтобы она работала, как ожидается, т.е. сразу закрывала uidoc. Потому всегда и везде использую только uidoc.Close.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Не заметил, чтобы от этой команды Лотус падал (на 7 и 8, меньше не пробовал). Также не заметил, чтобы она работала, как ожидается, т.е. сразу закрывала uidoc. Потому всегда и везде использую только uidoc.Close.
без параметра срабатывает по дефоулу с параметром False а так эта команда работает нормально, только документ закрывается после выполнения всего кода
 
N

nvyush

без параметра срабатывает по дефоулу с параметром False а так эта команда работает нормально, только документ закрывается после выполнения всего кода
Я имел ввиду, что в моих опытах вызов Call uidoc.Close(True), не закрывал документ сразу, как можно было бы ожидать, а только после завершения исполнения всего кода, т.е. ничем не отличался от Call uidoc.Close(False) или просто Call uidoc.Close. "А если не видно разницы — зачем писать больше?" :).
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
233
Call uidoc.Close(True) закрывает документ сразу только если это не текущий документ (текущий как раз-таки будет закрываться только после завершения исполнения всего кода).
Пример не текущего документа - регистрация пользователей в цикле. Действия одного цикла: в коде кнопки находим документ Person АК сервера, вносим в него изменения, открываем его с помощью EditDocument, сохраняем в UI (NotesUIDocument.Save), а затем закрываем с помощью uidoc.Close(True) - док закрывается немедленно.
 
N

nvyush

Call uidoc.Close(True) закрывает документ сразу только если это не текущий документ (текущий как раз-таки будет закрываться только после завершения исполнения всего кода).
Вот и я о том же. Мои эксперименты ограничивались только текущим документом, код вызывался из кнопки формы.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Call uidoc.Close(True) закрывает документ сразу только если это не текущий документ (текущий как раз-таки будет закрываться только после завершения исполнения всего кода).
Пример не текущего документа - регистрация пользователей в цикле. Действия одного цикла: в коде кнопки находим документ Person АК сервера, вносим в него изменения, открываем его с помощью EditDocument, сохраняем в UI (NotesUIDocument.Save), а затем закрываем с помощью uidoc.Close(True) - док закрывается немедленно.
и что даже RedBox нету? ;)
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
233
это говорит лишь о моём неумении сделать так, чтобы они были :ithx: , хотя Close(True) используется ещё с 6-ки повсеместно :lovecodeby:

Добавлено:
Только что специально проверил, брал NotesUIDocument и из Source (на QO) и из NotesUIWorkspace - никаких красных окон нет, Лотус не вылетает.
Прим: у себя в проектах NotesUIDocument всегда беру из Source, правда этим обходятся совсем другие баги..
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!