MassLockWithWait

From SunFlurry wiki
Jump to: navigation, search
  MassLockWithWait (Блокировка группы объектов)
Объект:Функции общего назначения
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Сервер
Исключения:Невозможно превратить в строку, число
Визуальность:Нет

Функция позволяет установить блокировку на множестве объектов базы данных (или/и семафорах), блокировка происходит по указанным правилам. Текстовые значения списка будут использованы для блокировки семафоров, объекты базы данных, входящие в список, будут заблокированы, как объекты БД. Если какой-нибудь объект уже был заблокирован или семафор уже принадлежит текущему сеансу, элемент пропускается. Для более полной информации по алгоритму блокировки, см. описание аргументов функции.


Синтаксис

MassLockWithWait(<Список с объектами для блокировки (LIST)>,<Режим пропуска (INT)>=0,<Разблокировка при ошибках (INT)>=1,<Период ожидания млс. (INT)>=0,<Объект ошибки>,<Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)>):<0 или 1 (INT)>

Аргументы

  • <Список с объектами для блокировки (LIST)> - Список, содержащий объекты базы данных или/и строки для установки блокировки.
  • <Режим пропуска (INT)>=0 - (необязательный аргумент) Возможные значения 0 и 1. Режим обратки ситуации, когда один из элементов не может быть заблокирован. Режим 0: После истечения периода ожидания (если задан), завершиться с флагом неудачи, заполнить агрументы Объект ошибки, Заблокировано пользователем, Заблокировано на машине и Время блокировки первым из объектов (семафоров), который не может быть заблокирован.
  • <Разблокировка при ошибках (INT)>=1 - (необязательный аргумент) Возможные значения 0 и 1. Режим разблокировки объектов, которые успела заблокировать эта функция, при невозможности блокировки одного из последующих объектов. Режим 0: объекты (семафоры) останутся заблокированы, Режим 1: объекты (семафоры) будут разблокированы. Важно: разблокировка, если происходит, касается только объектов, которые были заблокированы этой функцией, если список, до начала выполнения функции, уже содержал заблокированные объекты, их статус не будет изменен.
  • <Период ожидания млс. (INT)>=0 - (необязательный аргумент) Общий период ожидания блокировки всех объектов в миллисекундах. Если хотя бы один из объектов (семафоров) остается незаблокированным по истечение указанного времени, функция будет завершена с неудачей. Если период ожидания равен 0, функция не ожидает объекты, которые нельзя заблокировать и возращается с неудачей сразу же, как будет найден подобный объект.
  • <Объект ошибки> - (необязательный аргумент)(возможен аргумент-переменная (ByRef)) Переменная для идентификации объекта (семафора), который не может быть заблокирован
  • <Заблокировано пользователем (STRING)> - (необязательный аргумент)(возможен аргумент-переменная (ByRef)) Переменная для получения идентификатора пользователя, который заблокировал <Объект ошибки>
  • <Заблокировано на машине (STRING)> - (необязательный аргумент)(возможен аргумент-переменная (ByRef)) Переменная для получения имени компьютера, на котором был заблокировал <Объект ошибки>
  • <Время блокировки (DATE)> - (необязательный аргумент)(возможен аргумент-переменная (ByRef)) Переменная для получения даты и времени блокировки <Объекта ошибки>

Возвращаемое значение

Возвращает 1, все объекты списка были заблокированы, 0 -- если хотя бы один не был заблокирован.


Примеры

//Внимание: пример нельзя проверить на рабочей базе данных без изменения кодов объектов
a:=List.Create(DB("Ref.Номенклатура","Code","000000003661"),DB("Ref.Номенклатура","Code","000000007561"),"MUTEX01");
//Список содержит два объекта базы данных и одну строку, один из объектов является папкой.
аОбъект:=0;
аПольз:=0;
аМашина:=0;
аВремя:=0;
If MassLockWithWait(a,,,1000,аОбъект,аПольз,аМашина,аВремя) Then
  Message("Блокировка произведена успешно");
Else
  Message("Невозможно произвести блокировку объекта "+аОбъект+", он был заблокирован пользователем "+аПольз+" на машине "+аМашина+" в "+аВремя);
EndIf;