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

Тема в разделе "Lotus - Программирование", создана пользователем dimat, 11 окт 2010.

  1. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Всем привет.
    Ситуация:
    В БД включена блокировка документов
    Пользователь открывает документ на редактирование, после некоторых действий(Собираются данные и рисуется таблица в Rich Text Field) документ рефрешится
    Код (Text):
    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? Да Нет.
    Жмем Да - создается конфликтный документ, жмем Нет - данные не сохраняются вобще.
    Что сделать чтобы данные сохранялись в том же документе?
     
  2. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    dimat
    скорее всего крому уишного сейва где-то используется еще и обычный сейв, в перед ним нужно делать лоченье или же добиться только одного сейва
     
  3. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    После doccurr.Close(True) происходит разблокировка документа и изменяются поля в документе на диске. Но перед этим ты уже открыл заблокированный документ. Отсюда и конфликт. Значит, нужно делать принудительную разблокировку перед ws.EditDocument(True, doccurr.Document).
     
  4. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Сейвов кроме уишного по кнопке
    @Command([FileSave]);
    @Command([FileCloseWindow])
    Нет
     
  5. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Натыкался на ситуацию, когда при наличии поля SaveOptions = "1" обновление рт-поля вызывало "несанкционированное" сохранение документа.
     
  6. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Код (Text):
            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)
    Не помогает
     
  7. nvyush

    nvyush Lotus team
    Lotus team

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

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Поля SaveOptions на форме нет

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    офф:
    о, еще один поймал ошибку Акупаки? - 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">спорю с дизайнером
    убрался сдвиг или нет
    он дурак
    я же точно знаю что убрался)
    ...
    у него хром
    ...
    качаю хром
     
  10. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    Код (LotusScript):
    Call doccurr.Close(True)
    осторожно, данная команда всегда работает с вылетом лотуса
     
  11. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Не заметил, чтобы от этой команды Лотус падал (на 7 и 8, меньше не пробовал). Также не заметил, чтобы она работала, как ожидается, т.е. сразу закрывала uidoc. Потому всегда и везде использую только uidoc.Close.
     
  12. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    без параметра срабатывает по дефоулу с параметром False а так эта команда работает нормально, только документ закрывается после выполнения всего кода
     
  13. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Я имел ввиду, что в моих опытах вызов Call uidoc.Close(True), не закрывал документ сразу, как можно было бы ожидать, а только после завершения исполнения всего кода, т.е. ничем не отличался от Call uidoc.Close(False) или просто Call uidoc.Close. "А если не видно разницы — зачем писать больше?" :).
     
  14. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    не верю!
     
  15. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Call uidoc.Close(True) закрывает документ сразу только если это не текущий документ (текущий как раз-таки будет закрываться только после завершения исполнения всего кода).
    Пример не текущего документа - регистрация пользователей в цикле. Действия одного цикла: в коде кнопки находим документ Person АК сервера, вносим в него изменения, открываем его с помощью EditDocument, сохраняем в UI (NotesUIDocument.Save), а затем закрываем с помощью uidoc.Close(True) - док закрывается немедленно.
     
  16. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Вот и я о том же. Мои эксперименты ограничивались только текущим документом, код вызывался из кнопки формы.
     
  17. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    и что даже RedBox нету? ;)
     
  18. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    ;) нету
     
  19. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    а у меня есть :lovecodeby:
     
  20. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    это говорит лишь о моём неумении сделать так, чтобы они были :ithx: , хотя Close(True) используется ещё с 6-ки повсеместно :lovecodeby:

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

Поделиться этой страницей