LockForWrite method (Layer)

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

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

Layer

Синтаксис:

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 Sub

Python:

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())