Получает пользовательские данные.
Синтаксис
ПолучитьПользовательскиеДанные(<Ключ>)Полное описание, параметры и ограничения
ЭлементDOM.ПолучитьПользовательскиеДанные (DOMElement.GetUserData)
ЭлементDOM (DOMElement)
ПолучитьПользовательскиеДанные (GetUserData)
Доступен, начиная с версии 8.1.
Синтаксис:
ПолучитьПользовательскиеДанные(<Ключ>)
Параметры:
<Ключ> (обязательный)
Тип: Строка.
Ключ пользовательских данных.
Возвращаемое значение:
Тип: Произвольный.
Неопределено, если указанному ключу не соответствовали никакие пользовательские данные.
Описание:
Получает пользовательские данные.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Вставить, заменить и удалить товар в DOM
Изменяем порядок дочерних узлов и различаем копию узла и тот же самый узел. Пользовательские данные служат локальной пометкой, не XML-атрибутом.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Выполняйте на сервере. Текст названия записывается непосредственно в product для компактности учебного документа.
Вставляемые и заменяемые узлы созданы одним документом; перенос между документами требует ИмпортироватьУзел.
Документ = Новый ДокументDOM("", "products");
Корень = Документ.ЭлементДокумента;
Первый = Документ.СоздатьЭлемент("product");
Первый.УстановитьАтрибут("code", "A-01");
Первый.ТекстовоеСодержимое = "Книга";
Корень.ДобавитьДочерний(Первый);
Последний = Документ.СоздатьЭлемент("product");
Последний.ТекстовоеСодержимое = "Ручка";
Корень.ДобавитьДочерний(Последний);
Вставленный = Документ.СоздатьЭлемент("product");
Вставленный.ТекстовоеСодержимое = "Тетрадь";
Корень.ВставитьПеред(Вставленный, Последний);
Копия = Первый.КлонироватьУзел(Истина);
Сообщить(Первый.УзелРавен(Копия));
Сообщить(Первый.УзелИдентичен(Копия));
Копия.ТекстовоеСодержимое = "Новая книга";
Удалённый = Корень.ЗаменитьДочерний(Копия, Первый);
Сообщить(Удалённый.РодительскийУзел = Неопределено);
Корень.УдалитьДочерний(Последний);
Вставленный.УстановитьПользовательскиеДанные("Проверено", Истина);
Сообщить(Вставленный.ПолучитьПользовательскиеДанные("Проверено"));
Сообщить(Корень.ПервыйДочерний.ТекстовоеСодержимое);
Сообщить(Корень.ПоследнийДочерний.ТекстовоеСодержимое);
Сообщить(Копия.СледующийСоседний.УзелИдентичен(Вставленный));
Сообщить(Вставленный.ПредыдущийСоседний.УзелИдентичен(Копия));
Сообщить(Вставленный.ДокументВладелец = Документ);
Узлы = Корень.ДочерниеУзлы;
Сообщить(Узлы.Количество());
Для Номер = 0 По Узлы.Количество() - 1 Цикл
Узел = Узлы.Элемент(Номер);
Сообщить(Узел.ИмяУзла + ": " + Узел.ТекстовоеСодержимое);
КонецЦикла;Разбор по шагам
Добавляем книгу и ручку, вставляем тетрадь перед ручкой.
Глубокая копия книги имеет одинаковое содержимое, но является другим узлом.
ЗаменитьДочерний возвращает удалённый старый узел; затем отдельно удаляем ручку.
Проверяем связи соседей и обходим оставшийся СписокУзловDOM по индексам.
Как проверить результат
Перед изменением копии УзелРавен даёт Истина, УзелИдентичен — Ложь.
После изменений остаются 2 узла: Новая книга, Тетрадь; у удалённой книги нет родителя.
Проверки соседей, владельца и пользовательской пометки дают Истина.
Ожидаемый результат
Дерево изменено осмысленно, различие между равенством содержимого и идентичностью узла показано явно.
На что обратить внимание
Список дочерних узлов отражает изменения дерева: при удалении во время обхода индексы смещаются.
УстановитьПользовательскиеДанные не создаёт атрибут и не является способом сохранить пометку в XML-файле.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Импортировать товар в другой DOM-документ без изменения оригинала
Узел связан с документом-владельцем. Глубокий импорт создаёт узел для другого документа; сравниваем содержимое и идентичность.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.
Сначала оставьте учебные имена и значения неизменёнными. После контрольного запуска меняйте по одному условию.
Источник = Новый ДокументDOM("", "products");
Товар = Источник.СоздатьЭлемент("product");
Товар.УстановитьАтрибут("code", "A-01");
Товар.ДобавитьДочерний(Источник.СоздатьТекстовыйУзел("Книга"));
Источник.ЭлементДокумента.ДобавитьДочерний(Товар);
Товар.УстановитьПользовательскиеДанные("source", "Учебный импорт");
Приёмник = Новый ДокументDOM("", "export");
Копия = Приёмник.ИмпортироватьУзел(Товар, Истина);
Сообщить(Копия.ДокументВладелец = Приёмник);
Сообщить(Копия.РодительскийУзел = Неопределено);
Сообщить(Копия.УзелРавен(Товар));
Сообщить(Не Копия.УзелИдентичен(Товар));
Сообщить(Товар.ПолучитьПользовательскиеДанные("source"));
Сообщить(Копия.ПолучитьПользовательскиеДанные("source") = Неопределено);
Приёмник.ЭлементДокумента.ДобавитьДочерний(Копия);
Копия.ТекстовоеСодержимое = "Учебная копия";
Сообщить(Товар.ТекстовоеСодержимое = "Книга");
Сообщить(Копия.ТекстовоеСодержимое = "Учебная копия");
Сообщить(Не Копия.УзелРавен(Товар));
Сообщить(Товар.РодительскийУзел = Источник.ЭлементДокумента);Разбор по шагам
Создаём товар в документе Источник и прикрепляем его к исходному корню.
ИмпортироватьУзел с Истина копирует дочерние узлы в документ Приёмник, но ещё не прикрепляет результат к его корню.
УзелРавен сравнивает содержимое, УзелИдентичен — является ли это тем же узлом. Равная копия не идентична оригиналу.
Пользовательские данные DOM не переносятся импортом. После изменения текста копии исходный товар остаётся неизменным.
Как проверить результат
Копия до вставки принадлежит Приёмнику и не имеет родителя.
Содержимое до изменения равно, идентичность различна; после изменения содержимое уже не равно.
Оригинал сохраняет Книга и прежнего родителя; source у копии отсутствует.
Ожидаемый результат
Товар перенесён в другой документ через независимую копию с явной проверкой владельца и данных.
На что обратить внимание
Нельзя просто добавить исходный узел другого документа как свой: используйте импорт.
ТекстовоеСодержимое заменяет содержимое элемента, а не только визуальную подпись; вложенная структура при этом меняется.
Пользовательские данные — не XML-атрибуты и не часть сериализованного контракта.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.