Метод блокирует изменения данных серверного слоя другими пользователями.
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 SubPython:
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())