Блокировка документов

Gandliar

Lotus Team
16.02.2004
564
26
BIT
110
Подскажите пожалуйста, как прикрутить штатную блокировку к вновь созданному документу.
1. Пользователь создает документ
2. в какой то момент тиснет ctrl+S сохраняет документ
3. продолжает работать с этим доком

Проблема в том, что на postsave doc.lock() не работает у меня - пишет не найден документ.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
466
Подскажите пожалуйста, как прикрутить штатную блокировку к вновь созданному документу.
1. Пользователь создает документ
2. в какой то момент тиснет ctrl+S сохраняет документ
3. продолжает работать с этим доком

Проблема в том, что на postsave doc.lock() не работает у меня - пишет не найден документ.
а сам doc как получается?
 

Gandliar

Lotus Team
16.02.2004
564
26
BIT
110
беру так
set doc = Source.Document

В общем, отказался от штатной блокировки, написал свою. Пока не вижу изъянов :)
Принцип, 2 самописные функции block_create(doc, raiseError) и block_destroy(doc, raiseError).
Первая берет из документа базу данных, ищет админ сервер и на админ сервере в отдельной базе блокировок ищет/создает док блокировки (меняя унид дока блокировки на унид дока)
если удалось создать - док заблокирован
Вторая соответственно удаляет док - документ разблокирован.
поиск getDocumentByUnid работает быстро
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
466
Последнее редактирование модератором:

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
466
беру так
set doc = Source.Document
не уверен что к-л действия оставят нетронутым этот инстанс, потому - получать по юнид из базы, в PS док уже сохранен и нет ограничений на получение с диска
 

Gandliar

Lotus Team
16.02.2004
564
26
BIT
110
не уверен что к-л действия оставят нетронутым этот инстанс, потому - получать по юнид из базы, в PS док уже сохранен и нет ограничений на получение с диска
Пробовал, но док то остается открытым и при повторном ctrl+s говорит сохранить как конфликт?
 

Gandliar

Lotus Team
16.02.2004
564
26
BIT
110
MQ
По мне, это жестокая жесть :)
Проще записывать блокировку в соседнюю базу. поискал, не нашел, записал - значит заблокировал. Удалил - разблокировал. Если что то зависло - в базу админ зашел, блокировку удалил.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
43
По мне, это жестокая жесть :)
Проще записывать блокировку в соседнюю базу. поискал, не нашел, записал - значит заблокировал. Удалил - разблокировал. Если что то зависло - в базу админ зашел, блокировку удалил.
те так кажецца)
MQ.Message = "чёйта" - пишешь
mes = MQ.Message - читаешь
всё)
пишешь несколько раз в один MQ - сообщения помещаются в стек
прочитанное из стека удаляется автоматом
идентификатором MQ может быть просто UNID, а записывать туда можешь чёхошь, отличное от пробела
 
Последнее редактирование:

alexas1

Green Team
10.04.2014
1 202
225
BIT
43
блокировка: MQ.Message = "1" (например) или юнид блокировщика
блин! ничё не даёт сохранить((
кароч, читаешь MQ по юниду, если пусто - не заблокировано ...
иначе - восстанавливаешь прежнее значение

ЗЫ
Конструктор:
set mq=New NotesMessageQueue("QueueName") - создает или открывает уже существующую очередь, выставляет свойство-флаг isOwner
 
Последнее редактирование:

Domino-Designer

Людям надо поморгать!
Lotus Team
06.12.2011
617
223
BIT
24
Вы зачем над ТС издеваетесь?

@Gandliar, я вижу, что тебе достаточно было перевзять объект по ключу из вьюхи.
 

Gandliar

Lotus Team
16.02.2004
564
26
BIT
110
После перевзятия дока по ключу предлагает сохранять потом как конфликтный документ

Спасибо всем за ответы :)

По итогу, штатную блокировку использовать не удалось.
Написал 2 свои функции, которые в отдельно созданной базе блокировок создают доки блокировок и удаляют их
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
По итогу, штатную блокировку использовать не удалось.
Написал 2 свои функции, которые в отдельно созданной базе блокировок создают доки блокировок и удаляют их
не понимаю я этого, штатная отлично работает, как не удалось её использовать то?
 

Gandliar

Lotus Team
16.02.2004
564
26
BIT
110
не понимаю я этого, штатная отлично работает, как не удалось её использовать то?

1. Пользователь создал документ (новый, не сохраненный)
2. Пользователь не выходя из документа сохранил его (в этот момент надо заблокировать док)
3. пользователь продолжил менять документ, еще раз его сохранил
4. пользователь закрыл документ

Вот в пункт 2 мне не удалось прикрутить штатную.
Запуск в postsave source.document.lock - ошибка не найден документ
Если документ переопределить через getdocumentByUnid, то в пункте 3 ошибка "Вы хотите сохранить конфликтный документ?"

А создавать документ, сразу его сохранять, блокировать и открывать через workspace.editdocument - мне не нравится такое решение
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
466
Написал 2 свои функции, которые в отдельно созданной базе блокировок создают доки блокировок и удаляют их
так с очередями что не срослось? Создаем очередь с именем юнид, производим операции, если ч-л при создании очереди не является владельцем (т.е. очередь существует) - док залочен, при завершении операций - очередь удаляется автоматически (в деструкторе объекта, см. исходники). Все хозяйство запускаем через агент (с контекстом дока) на сервере, кот. в док и возвращает статус залоченности
 

Gandliar

Lotus Team
16.02.2004
564
26
BIT
110
так с очередями что не срослось? Создаем очередь с именем юнид, производим операции, если ч-л при создании очереди не является владельцем (т.е. очередь существует) - док залочен, при завершении операций - очередь удаляется автоматически (в деструкторе объекта, см. исходники). Все хозяйство запускаем через агент (с контекстом дока) на сервере, кот. в док и возвращает статус залоченности

Используется много длл-ек. а если в новой версии какой-то не будет?
Не ясно, как разруливается одновременность попыток залочить
если сервак перезагрузится а у клиента открыт док - блокировка слетит
 
Мы в соцсетях:

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