ОБСУЖДЕНИЕ

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

16 ответов 6,7 тыс.
AI-выжимка обсуждения скоро
Суть проблемы такова. Нужно обновить поля в открытом документе. То есть, я открываю этот документ и одновременно открываю второй документ. во втором делаю изменения и при сохранении его часть полей из него должно пронаследоваться в первый ПРИ ОТКРЫТОМ первом документе.
 
хэлп дизигнера - диалогбокс (NotesUIWorkspace.DialogBox)
 
дело в том, что если первый документ открыт, а функция во втором документе меняет поля первого, то при сохранении первого выпадает предупреждение: "Во время работы с документом была сохранена другая его копия. Сохранить и ваши изменения как конфликтующий документ?" соответственно, мне нужно, чтобы при открытом первом документе, функция из другого в реальном времени могла изменить значения полей. и уже при сохранении первого поля уже были поменяны в нем. как-то так
 
еще раз - диалогбокс
если мы говорим об "однопользовательском" режиме
если говорим о многопользовательской работе и отображении в реальном времени... - нотусня так не умеет (стандартным способом), и не должна уметь
 
ЗЫ. В "однопользовательском" режиме и при использовании Dialogbox не должно быть конфликтов сохранения. Вы часом не сохраняете ли первый док-т в бэкэнде после обновления в нем полей?
 
что вы имеете в виду под backend?
 
а вот такой вопрос еще: в одной БД запускаю агент, который переносит некоторые данные в поля документа другой БД. так вот, мне нужно проверить, если документ во второй БД ,куда я переношу данные открыт, то данные не переношу, в противном случае - переношу. пробовал брать документ второй БД и использовать ф-цию notesDocument.IsUIDocOpen , но она почему-то работает как-то криво(возвращает почему-то false, хотя документ открыт). какие еще могут быть варианты?
 
1. isUIDocOpen работает правильно. notesDocument должен быть получен из notesUIDocument.
2. переносите данные ночью, когда документы открыты быть не могут.
 
1. isUIDocOpen работает правильно. notesDocument должен быть получен из notesUIDocument.
2. переносите данные ночью, когда документы открыты быть не могут.
у меня перенос осуществляется агентом, запущенном на сервере
 
это к первому ответу написал. а ко-второму, данные переносятся много раз в течение дня
 
какие еще могут быть варианты?
Не помню, поможет ли штатная блокировка документов.... В любом случае можно организовать свою.Соответственно, при открытии документ блокируется, и агент может проверить его статус...
 
Не помню, поможет ли штатная блокировка документов.... В любом случае можно организовать свою.Соответственно, при открытии документ блокируется, и агент может проверить его статус...
совет хороший, но, к сожалению, способ со штатной блокировкой не подойдет :) а как организовать свою?
 
а как организовать свою?
При открытии доекумента в специальной базе создаем блокировочный документ с таким же UNID, при попытке повторного создания возникает ошибка - ее и обрабатываем как блокировку. При закрытии документа удаляем блокировочный. Ну и периодически чистим зависшие блокировочные...
 
При открытии доекумента в специальной базе создаем блокировочный документ с таким же UNID, при попытке повторного создания возникает ошибка - ее и обрабатываем как блокировку. При закрытии документа удаляем блокировочный. Ну и периодически чистим зависшие блокировочные...
спасибо! придумал немного по другому. при открытии кидаю документ в общую папку, при закрытии его удаляю из папки. в агенте проверяю, есть ли документ в папке, и, если он там есть - значит он открыт и наоборот. вроде работает
 
Antigo
КМК, не совсем надёжно. Если два пользователя практически одновременно откроют документ, повторное помещение в папку ошибки не вызовет, в отличие от создания документа с тем же unid.
 

Статистика тем

Создано
Antigo,
Последний ответ от
nvyush,
Ответы
16
Просмотры
6 670