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

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

Проблема в том, что на postsave doc.lock() не работает у меня - пишет не найден документ.
 
Подскажите пожалуйста, как прикрутить штатную блокировку к вновь созданному документу.
1. Пользователь создает документ
2. в какой то момент тиснет ctrl+S сохраняет документ
3. продолжает работать с этим доком

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

В общем, отказался от штатной блокировки, написал свою. Пока не вижу изъянов :)
Принцип, 2 самописные функции block_create(doc, raiseError) и block_destroy(doc, raiseError).
Первая берет из документа базу данных, ищет админ сервер и на админ сервере в отдельной базе блокировок ищет/создает док блокировки (меняя унид дока блокировки на унид дока)
если удалось создать - док заблокирован
Вторая соответственно удаляет док - документ разблокирован.
поиск getDocumentByUnid работает быстро
 
Последнее редактирование модератором:
беру так
set doc = Source.Document
не уверен что к-л действия оставят нетронутым этот инстанс, потому - получать по юнид из базы, в PS док уже сохранен и нет ограничений на получение с диска
 
не уверен что к-л действия оставят нетронутым этот инстанс, потому - получать по юнид из базы, в PS док уже сохранен и нет ограничений на получение с диска
Пробовал, но док то остается открытым и при повторном ctrl+s говорит сохранить как конфликт?
 
MQ
По мне, это жестокая жесть :)
Проще записывать блокировку в соседнюю базу. поискал, не нашел, записал - значит заблокировал. Удалил - разблокировал. Если что то зависло - в базу админ зашел, блокировку удалил.
 
По мне, это жестокая жесть :)
Проще записывать блокировку в соседнюю базу. поискал, не нашел, записал - значит заблокировал. Удалил - разблокировал. Если что то зависло - в базу админ зашел, блокировку удалил.
те так кажецца)
MQ.Message = "чёйта" - пишешь
mes = MQ.Message - читаешь
всё)
пишешь несколько раз в один MQ - сообщения помещаются в стек
прочитанное из стека удаляется автоматом
идентификатором MQ может быть просто UNID, а записывать туда можешь чёхошь, отличное от пробела
 
Последнее редактирование:
блокировка: MQ.Message = "1" (например) или юнид блокировщика
блин! ничё не даёт сохранить((
кароч, читаешь MQ по юниду, если пусто - не заблокировано ...
иначе - восстанавливаешь прежнее значение

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

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

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

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

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

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

А создавать документ, сразу его сохранять, блокировать и открывать через workspace.editdocument - мне не нравится такое решение
 
Написал 2 свои функции, которые в отдельно созданной базе блокировок создают доки блокировок и удаляют их
так с очередями что не срослось? Создаем очередь с именем юнид, производим операции, если ч-л при создании очереди не является владельцем (т.е. очередь существует) - док залочен, при завершении операций - очередь удаляется автоматически (в деструкторе объекта, см. исходники). Все хозяйство запускаем через агент (с контекстом дока) на сервере, кот. в док и возвращает статус залоченности
 
так с очередями что не срослось? Создаем очередь с именем юнид, производим операции, если ч-л при создании очереди не является владельцем (т.е. очередь существует) - док залочен, при завершении операций - очередь удаляется автоматически (в деструкторе объекта, см. исходники). Все хозяйство запускаем через агент (с контекстом дока) на сервере, кот. в док и возвращает статус залоченности

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

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