WriteData method (Layer)

Запись в слой дополнительных пользовательских данных.

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

Layer

Синтаксис:

Visual Basic:

Function WriteData(Name As String, Stream As Unknown, Code As Long) As Boolean

Name - строковый идентификатор набора данных.

Stream - интерфейс IStream, передаваемый как IUnknown.

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

Описание:

Записываемый блок данных из указанного потока регистрируется в коллекции дополнительных данных слоя под указанным именем. Дальнейший доступ к данным может осуществлятся методом ReadData или через объект CustomData.

Действие метода равносильно обращению к пользовательским данным слоя через CustomData: добавить набор методом PutItemData и зафиксировать изменения методом Commit.

При успехе метод возвращает True. Набор появляется в CustomData рядом со служебными записями слоя, и записей становится на одну больше. Запись под уже занятым именем не добавляет второй набор, а заменяет содержимое прежнего - число наборов остается тем же, а ReadData отдает новый текст. Значение Code на результат не влияет.

В качестве потока в макросе на VBScript годится ADODB.Stream: записанные им байты читаются обратно тем же объектом.

В макросах на python метод недоступен: объект-поток создать нечем - ни win32com, ни comtypes в поставке нет.

Пример:

Пример кладет в слой свой набор данных и показывает, что он появился в наборах слоя.

Visual Basic:

Sub Layer_WriteData
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
S = "Наборов в слое было: " & L.CustomData.Count
'Готовим поток с текстом
Set S1 = CreateObject("ADODB.Stream")
S1.Type = 2
S1.Charset = "utf-8"
S1.Open
S1.WriteText "проба пера 123"
S1.Position = 0
'Пишем набор в слой
Ok = L.WriteData("МойНабор", S1, 1)
Set CD = L.CustomData
S = S & vbCrLf & "записано: " & Ok & ", наборов стало: " & CD.Count
S = S & vbCrLf & "номер набора: " & CD.GetIndexByName("МойНабор")
'Читаем набор обратно в чистый поток
Set S2 = CreateObject("ADODB.Stream")
S2.Type = 2
S2.Charset = "utf-8"
S2.Open
L.ReadData "МойНабор", S2, 1
S2.Position = 0
S = S & vbCrLf & "прочитано: " & S2.ReadText
MsgBox S
End Sub