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

dimat

Lotus team
31.07.2008
516
0
#1
Всем привет.
Ситуация:
В БД включена блокировка документов
Пользователь открывает документ на редактирование, после некоторых действий(Собираются данные и рисуется таблица в 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

Чёрный маг
Lotus team
06.11.2007
3 231
17
#2
dimat
скорее всего крому уишного сейва где-то используется еще и обычный сейв, в перед ним нужно делать лоченье или же добиться только одного сейва
 

Medevic

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

dimat

Lotus team
31.07.2008
516
0
#4
скорее всего крому уишного сейва где-то используется еще и обычный сейв, в перед ним нужно делать лоченье или же добиться только одного сейва
Сейвов кроме уишного по кнопке
@Command([FileSave]);
@Command([FileCloseWindow])
Нет
 

nvyush

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

dimat

Lotus team
31.07.2008
516
0
#6
После 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)
Не помогает
 

nvyush

Lotus team
22.04.2009
2 317
0
#7
скорее всего крому уишного сейва где-то используется еще и обычный сейв, в перед ним нужно делать лоченье или же добиться только одного сейва
Натыкался на ситуацию, когда при наличии поля SaveOptions = "1" обновление рт-поля вызывало "несанкционированное" сохранение документа.
http://codeby.net/ipb.html?s=&sh...st&p=171610
Возможно rt.Update также вызывает "несанкционированное" сохранение документа при наличии поля SaveOptions = "1". Проверьте наличие вышеуказанного поля на форме и, если оно присутствует, попробуйте без него.
 

dimat

Lotus team
31.07.2008
516
0
#8
http://codeby.net/ipb.html?s=&sh...st&p=171610
Возможно rt.Update также вызывает "несанкционированное" сохранение документа при наличии поля SaveOptions = "1". Проверьте наличие вышеуказанного поля на форме и, если оно присутствует, попробуйте без него.
Поля SaveOptions на форме нет

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

hosm

* so what *
18.05.2009
2 442
6
#9
офф:
Кстати, что за ерунда с форумом? Постаянно просит вводит логин и пасс
о, еще один поймал ошибку Акупаки? - http://codeby.net/ipb.html?s=&sh...st&p=183601
Ребята, давайте договоримся так: пишем ошибки в указанную выше тему в раздел Обсуждения сайта и форума, админ 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

Чёрный маг
Lotus team
06.11.2007
3 231
17
#10
Код:
Call doccurr.Close(True)
осторожно, данная команда всегда работает с вылетом лотуса
 

nvyush

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

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#12
Не заметил, чтобы от этой команды Лотус падал (на 7 и 8, меньше не пробовал). Также не заметил, чтобы она работала, как ожидается, т.е. сразу закрывала uidoc. Потому всегда и везде использую только uidoc.Close.
без параметра срабатывает по дефоулу с параметром False а так эта команда работает нормально, только документ закрывается после выполнения всего кода
 

nvyush

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

VladSh

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

nvyush

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

ToxaRat

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

VladSh

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

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