Обновление полей

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

  1. Antigo

    Antigo Active Member

    Регистрация:
    16 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    Суть проблемы такова. Нужно обновить поля в открытом документе. То есть, я открываю этот документ и одновременно открываю второй документ. во втором делаю изменения и при сохранении его часть полей из него должно пронаследоваться в первый ПРИ ОТКРЫТОМ первом документе.
     
  2. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    хэлп дизигнера - диалогбокс (NotesUIWorkspace.DialogBox)
     
  3. Antigo

    Antigo Active Member

    Регистрация:
    16 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    дело в том, что если первый документ открыт, а функция во втором документе меняет поля первого, то при сохранении первого выпадает предупреждение: "Во время работы с документом была сохранена другая его копия. Сохранить и ваши изменения как конфликтующий документ?" соответственно, мне нужно, чтобы при открытом первом документе, функция из другого в реальном времени могла изменить значения полей. и уже при сохранении первого поля уже были поменяны в нем. как-то так
     
  4. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    еще раз - диалогбокс
    если мы говорим об "однопользовательском" режиме
    если говорим о многопользовательской работе и отображении в реальном времени... - нотусня так не умеет (стандартным способом), и не должна уметь
     
  5. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    ЗЫ. В "однопользовательском" режиме и при использовании Dialogbox не должно быть конфликтов сохранения. Вы часом не сохраняете ли первый док-т в бэкэнде после обновления в нем полей?
     
  6. Antigo

    Antigo Active Member

    Регистрация:
    16 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    что вы имеете в виду под backend?
     
  7. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    Использование метода Save класса NotesDocument.
     
  8. Antigo

    Antigo Active Member

    Регистрация:
    16 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    а вот такой вопрос еще: в одной БД запускаю агент, который переносит некоторые данные в поля документа другой БД. так вот, мне нужно проверить, если документ во второй БД ,куда я переношу данные открыт, то данные не переношу, в противном случае - переношу. пробовал брать документ второй БД и использовать ф-цию notesDocument.IsUIDocOpen , но она почему-то работает как-то криво(возвращает почему-то false, хотя документ открыт). какие еще могут быть варианты?
     
  9. oshmianski

    oshmianski Достойный программист
    Lotus team

    Регистрация:
    25 апр 2012
    Сообщения:
    521
    Симпатии:
    13
    1. isUIDocOpen работает правильно. notesDocument должен быть получен из notesUIDocument.
    2. переносите данные ночью, когда документы открыты быть не могут.
     
  10. Antigo

    Antigo Active Member

    Регистрация:
    16 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    у меня перенос осуществляется агентом, запущенном на сервере
     
  11. VladSh

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

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    И как оно противоречит этому ответу:
    ?
     
  12. Antigo

    Antigo Active Member

    Регистрация:
    16 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    это к первому ответу написал. а ко-второму, данные переносятся много раз в течение дня
     
  13. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    Не помню, поможет ли штатная блокировка документов.... В любом случае можно организовать свою.Соответственно, при открытии документ блокируется, и агент может проверить его статус...
     
  14. Antigo

    Antigo Active Member

    Регистрация:
    16 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    совет хороший, но, к сожалению, способ со штатной блокировкой не подойдет :) а как организовать свою?
     
  15. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    При открытии доекумента в специальной базе создаем блокировочный документ с таким же UNID, при попытке повторного создания возникает ошибка - ее и обрабатываем как блокировку. При закрытии документа удаляем блокировочный. Ну и периодически чистим зависшие блокировочные...
     
  16. Antigo

    Antigo Active Member

    Регистрация:
    16 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    спасибо! придумал немного по другому. при открытии кидаю документ в общую папку, при закрытии его удаляю из папки. в агенте проверяю, есть ли документ в папке, и, если он там есть - значит он открыт и наоборот. вроде работает
     
  17. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Antigo
    КМК, не совсем надёжно. Если два пользователя практически одновременно откроют документ, повторное помещение в папку ошибки не вызовет, в отличие от создания документа с тем же unid.
     
Загрузка...

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