Протокол UObject предназначен для получения любого объекта системы UMI.CMS по его идентификатору. Протокол UObject дополняет протокол UPage, позволяя вывести информацию об объекте, который не является страницей, например о зарегистрированном пользователе.
Чтобы увидеть результат запроса по этому протоколу, наберем в адресной строке браузера http://ваш_сайт/uobject/ и затем идентификатор объекта, например http://ваш_сайт/uobject/14, где 14 — идентификатор пользователя. Вы увидите страницу, подобную представленной:
<?xml version="1.0" encoding="utf-8" ?>
<udata>
<object
id="14"
guid="system-supervisor"
name="sv"
type-id="4"
type-guid="users-user">
<properties>
<group id="16" name="idetntify_data">
<title>Идентификационные данные</title>
<property id="45" name="login" type="string">
<title>Логин</title>
<value>sv</value>
</property>
<property id="53" name="groups" type="relation">
<title>Группы пользователей</title>
<value>
<item
id="15"
name="Супервайзеры"
type-id="6"
xlink:href="uobject://15" />
</value>
</property>
... другие свойства...
</group>
... другие группы...
</properties>
</object>
</udata>
Как видно из приведенного примера, формат данных UObject отличается от формата данных UPage только тем, что вместо элемента page выводится элемент object
, у которого отсутствуют атрибуты parentId
, link
, is-visible и object-id
и вместо них присутствует атрибут name
— имя объекта.
Замечание
Для версий до 2.8: если на странице http://ваш_сайт/uobject/someId отображается сообщение, что протокол UObject недоступен, создайте в корневой папке сайта пустой файл с именем scheme.uobject.allow
и обновите страницу.
Для версий, начиная с 2.8: необходимо указать параметр uobject.http.allow = "1" в файле config.ini
в секции [streams] (см. Секция [streams]).
Внимание
Из соображений безопасности после окончания этапа разработки файл scheme.uobject.allow
настоятельно рекомендуется удалить. В противном случае некоторые данные, получаемые по этому протоколу через http, могут быть доступны любому посетителю сайта.
Аналогично протоколу UPage, если требуется получить только одно свойство объекта, например login, добавьте к запросу имя этого свойства, например http://ваш_сайт/uobject/14.login:
<?xml version="1.0" encoding="utf-8" ?>
<udata>
<property id="45" name="login" type="string">
<title>Логин</title>
<value>sv</value>
</property>
</udata>
Как и в случае с запросами по протоколам UData и UPage, добавить результат выполнения запроса по протоколу UObject в XSLT-шаблон можно с помощью функции document(): document('uobject://14.login').
Например, следующий код вставит значение поля login
для объекта с id = 14:
<xsl:value-of select="document('uobject://14.login')//value" />
Как и в случае с запросами по протоколам UData и UPage, используйте функцию concat()
для построения динамических запросов.
Аналогично кэшированию результов вызова по протоколу UData (см. «Макросы: протокол UData»).