Дополнительные XML атрибуты клиентов и групп |
|
В программе предусмотрено хранение дополнительных данных для каждого клиента и группы в виде XML.
Это атрибуты, описанные в консоли, но также дополнительно могут быть размещены произвольные дополнительные данные, отвечающие формату XML. Это может быть очень полезно для хранения различных данных, связанных с клиентом, для других приложений.
Предусматривается, что данные могут иметь большой объем и для облегчения и ускорения доступа к ним для каждого клиента эти данные хранятся ввиде отдельного файла. Эти файлы для клиента находятся в поддиректории UserAttr директории Config, для группы - GroupAttr. Это надо учесть при сохранении и переносе настроек. Имя файла - это уникальный идентификатор (GUID) клиента.
Формат хранения XML данных атрибутов, описанных в программе, следующий. Имена элементов значения не имеют. Атрибуты хранятся в ввиде списка элементов первого уровня, где XML атрибут c именем GUID - идентификатор атрибута, а текстовое заполнение элемента - значение. Все остальное игнорируется, что позволяет разместить любые дополнительные данные.
Пример XML данных клиента -
<?xml version="1.0"?>
<UserAttrList GUID="{FDA6C08F-074D-4497-9192-1EA609C9ACBD}">
<UserAttr GUID="{36C35A98-F94E-4589-A89F-6F6A061F9570}">Вася Пупкин</UserAttr>
<UserAttr GUID="{E34A43D3-8450-4912-8B60-92A087261ACA}">Москва</UserAttr>
<UserAttr GUID="{AB82DFBC-33B8-449F-96D9-D2FDA14A7E75}">001122-334455</UserAttr>
<AnyName AnyAttribute="Data">Любые дополнительные данные</AnyName>
</UserAttrList>
В примере имеется 3 атрибута, описанных в программе. Т.е. атрибуты GUID соответствуют соответствующим атрибутам описаний (пример смотрите ниже). Все другие элементы XML данных считаются дополнительными, они хранятся, но программа с ними не работает.
Для доступа к описаниям атрибутов клиента - имен и GUID, используйте функцию APIGetListXML, List = 17, AttrLevel = 2. Для группы List = 18.
Пример этих данных описаний атрибутов клиента -
<?xml version="1.0"?>
<UserAttrList>
<UserAttrItem GUID="{36C35A98-F94E-4589-A89F-6F6A061F9570}" DisplayName="Имя"/>
<UserAttrItem GUID="{AB82DFBC-33B8-449F-96D9-D2FDA14A7E75}" DisplayName="Счет"/>
<UserAttrItem GUID="{E34A43D3-8450-4912-8B60-92A087261ACA}" DisplayName="Адрес"/>
</UserAttrList>
Для доступа к этим XML данным используются функции APIGetAttr и APISetAttr, атрибуты User_AttrAll и User_AttrPart. Их применение имеет особенности -
APIGetAttr с атрибутом User_AttrAll - считывается точная копия XML данных, в том виде, как они записаны в файле.
APIGetAttr с атрибутом User_AttrPart - считываются XML данные, но элементы с атрибутами, которые определены в программе, дополняются XML атрибутами с именем этого атрибута. Имя этого атрибута - DisplayName. Это сделано для упрощения дальнейшего представления этих данных, иначе для получения имен атрибутов пришлось-бы дополнительно загружать список определений функцией APIGetListXML.
Пример данных, полученных путем этого вызова -
<?xml version="1.0"?>
<UserAttrList GUID="{FDA6C08F-074D-4497-9192-1EA609C9ACBD}">
<UserAttr GUID="{36C35A98-F94E-4589-A89F-6F6A061F9570}" DisplayName="Имя">Вася Пупкин</UserAttr>
<UserAttr GUID="{E34A43D3-8450-4912-8B60-92A087261ACA}" DisplayName="Адрес">Москва</UserAttr>
<UserAttr GUID="{AB82DFBC-33B8-449F-96D9-D2FDA14A7E75}" DisplayName="Счет">001122-334455</UserAttr>
<AnyName AnyAttribute="Data">Любые дополнительные данные</AnyName>
</UserAttrList>
APISetAttr с атрибутом User_AttrAll - запись данных с полной заменой имеющихся. Т.е. копирование XML данных один в один. Должна использоваться, если надо записать произвольные дополнительные данные.
APISetAttr с атрибутом User_AttrPart - запись данных с частичной заменой. Может использоваться только для записи атрибутов клиента, описанных в программе. Обновляются только те атрибуты, которые заданы в XML данных запроса. Этот вызов также может использоваться и для удаления данных, для этого надо задать пустое значение атрибута.
Пример записи данных -
<?xml version="1.0"?>
<UserAttrList GUID="{FDA6C08F-074D-4497-9192-1EA609C9ACBD}">
<UserAttr GUID="{36C35A98-F94E-4589-A89F-6F6A061F9570}">Иванов И.И.</UserAttr>
<UserAttr GUID="{AB82DFBC-33B8-449F-96D9-D2FDA14A7E75}"></UserAttr>
<AnyName AnyAttribute="Data">Любые дополнительные данные</AnyName>
</UserAttrList>
В этом примере меняется имя и удаляются данные атрибута "Счет". Все другое не меняется. Все другие XML данные, кроме описанных атрибутов, игнорируются (в данном примере последний XML элемент).
Если APISetAttr вызывается с пустым параметром, т.е. вместо XML передается пустая строка, то все XML данные клиента удаляются, также удаляется соответствующий XML файл.
Учитывая, что дополнительные данные клиента, введенные другими приложениями в консоли нигде не отображаются, и они могут сильно загромождать XML данные, в программе предусмотрена процедура их удаления.
Для групп все аналогично, для APIGetAttr и APISetAttr следует использовать соответствующие номера атрибутов.
Для того, что-бы изменения данных клиента были зафиксированы в журнале, параметр DoUpdate в вызове APISetAttr надо выставить в true. Для группы история изменений не ведется, поэтому DoUpdate надо выставить в false.
Для вывода XML данных для списков клиентов и групп более удобно использовать функцию APIGetListXML, списки itUserAttrData, itGroupAttrData.
Текущая страница справки: help.smart-soft.ru/index.html?apiadvattr.htm