LockForRead method (Layer)

Метод блокирует изменения данных серверного слоя другими пользователями.

Применяется к:

Layer

Синтаксис:

Visual Basic:

Function LockForRead(Options As Long, Timeout As Long) As Long

Options - зарезервировано, должно быть 0.

Timeout - зарезервировано, должно быть 0.

Каждый вызов метода увеличивает счетчик блокировки слоя на единицу. Метод возвращает текущее значение счетчика.

Примечание:

Это бывает необходимо, когда со слоем нужно выполнить последовательность операций (транзакцию), во время выполнения которых изменение данных слоя другими пользователями недопустимо.

После завершения транзакции обязательно следует вызвать метод UnlockForRead столько раз, сколько был вызван метод LockForRead.

На локальном слое (IsRemote = False) метод отрабатывает без ошибки, но счетчик не растет: и первый, и второй вызов вернули 1, а каждый UnlockForRead - 0, в том числе лишний, сделанный без блокировки.

Пример:

Visual Basic:

Sub Layer_LockForRead
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
'Закрываем слой от изменений другими пользователями на время чтения
n = L.LockForRead(0, 0)
S = "Счетчик блокировки: " & n
S = S & vbCrLf & "объектов в слое: " & L.ElementKeys.Count
S = S & vbCrLf & "после снятия: " & L.UnlockForRead
MsgBox S
End Sub

Python:

import zulu

def Macro_Layer_LockForRead():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    # Закрываем слой от изменений другими пользователями на время чтения
    n = L.LockForRead(0, 0)
    print("Счетчик блокировки:", n)
    print("объектов в слое:", L.ElementKeys.Count)
    print("после снятия:", L.UnlockForRead())