Метод блокирует изменение и чтение данных серверного слоя другими пользователями.
Visual Basic:
Function LockForWrite(Options As Long, Timeout As Long) As Long
Options - зарезервировано, должно быть 0.
Timeout - зарезервировано, должно быть 0.
Каждый вызов метода увеличивает счетчик блокировки слоя на единицу. Метод возвращает текущее значение счетчика.
Это бывает необходимо, когда со слоем нужно выполнить последовательность операций (транзакцию), которая наряду с чтением данных содержит и их изменение. В этом случае как изменение так и чтение данных слоя другими пользователями недопустимо.
После завершения транзакции обязательно следует вызвать метод UnlockForWrite столько раз, сколько был вызван метод LockForWrite.
На локальном слое (IsRemote = False) метод отрабатывает без ошибки, но счетчик не растет: и первый, и второй вызов вернули 1, а каждый UnlockForWrite - 0. Собственным правкам блокировка не мешает: объект в слой под ней добавляется, как обычно.
Пример добавляет в слой свой объект под блокировкой и убирает его за собой.
Visual Basic:
Sub Layer_LockForWrite 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active Set R = L.GetBoundsRectangle 'Закрываем слой от других пользователей на время правки n = L.LockForWrite(0, 0) Key = L.AddSymbol(R.Xmax + 100, R.Ymin, 2, 1) S = "Счетчик блокировки: " & n S = S & vbCrLf & "добавлен объект: " & Key 'Убираем за собой и снимаем блокировку L.DeleteElement Key S = S & vbCrLf & "после снятия: " & L.UnlockForWrite MsgBox S End SubPython:
import zulu def Macro_Layer_LockForWrite(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active R = L.GetBoundsRectangle() # Закрываем слой от других пользователей на время правки n = L.LockForWrite(0, 0) key = L.AddSymbol(R.Xmax + 100, R.Ymin, 2, 1) print("Счетчик блокировки:", n) print("добавлен объект:", key) # Убираем за собой и снимаем блокировку L.DeleteElement(key) print("после снятия:", L.UnlockForWrite())