Обновление данных конфигурации и состояния.
C/C++ -
HRESULT _stdcall UpdateList([in] enum APIListType List, [in] VARIANT xml);
HRESULT _stdcall UpdateList2([in] enum APIListType List, [in] VARIANT xml, [in] enum ConfigUpdateOptions UpdateOptions);
Delphi -
procedure UpdateList(List: APIListType; xml: OleVariant); safecall;
procedure UpdateList2(List: APIListType; xml: OleVariant; UpdateOptions: ConfigUpdateOptions); safecall;
Функция UpdateList позволяет обновлять только уже имеющиеся элементы. Если GUID элемента отсутствует, то будет выдана ошибка (исключение).
Функция UpdateList2 позволяет гибко обновлять и добавлять элементы. С ее помощью также доступны операции установки настроек по умолчанию. Для нее задается дополнительный параметр UpdateOptions.
Параметры
List
Тип списка, перечисление APIListType.
XML
XML данные в текстовом виде. Эти данные проверяются на соответствие XML схеме, если что-то не так, то возвращается ошибка (исключение). Для элементов списка требуется обязательный атрибут GUID - уникальный идентификатор.
UpdateOptions
Только для функции UpdateList2. Элементы перечисления ConfigUpdateOptions, могут быть скомбинированы логической операцией OR.
При указании ConfigUpdate_IgnoreNotExistsItems если отсутствуют элементы списка, то это не будет сопровождаться ошибкой, как у функции UpdateList.
При указании ConfigUpdate_LoadDefault параметр XML игнорируется, XML данные берутся из внутренних данных конфигурации по умолчанию.
Замечание
В качестве корневого элемента в XML данных может быть задан элемент всего списка или одиночный элемент. В первом случае одним запросом можно обновлять корневые атрибуты и сразу несколько элементов списка, во втором - обновляется один элемент.
Пример использования
Скрипт добавляет дополнительный атрибут клиента - в случае отсутствия атрибута с заданным GUID. При наличии данного атрибута с другим именем - существующий атрибут переименовывается. Если существует атрибут с заданным именем, но другим GUID - такой атрибут удаляется.
Set Srv = CreateObject("TrafInsp.TrafInspAdmin")
AdmID="TIAdmin" 'Логин администратора Traffic Inspector
AdmPass="123456" 'Пароль администратора TIAdmin
Set Perm = Srv.QueryPermissions()
LogOn = Perm.DoSharedLogon(AdmID, AdmPass, "Script")
'Дополнительный атрибут клиента Сотовый телефон
AttrGUID = "{9B863411-1165-4562-8F98-77F0FC9FC894}"
AttrName = "Сотовый"
AttrNote = "Сотовый телефон"
Set Dom = WScript.CreateObject("Msxml2.DOMDocument.4.0")
Set DomX1 = WScript.CreateObject("Msxml2.DOMDocument.4.0")
Set DomX2 = WScript.CreateObject("Msxml2.DOMDocument.4.0")
'Вытаскиваем в XML список всех дополнительных атрибутов абонентов
itUserAdvAttr = 17
conf_AttrLevelCaption = 2
Dom.LoadXML Srv.GetList(itUserAdvAttr, null, null, conf_AttrLevelCaption)
Set DocEl = Dom.DocumentElement
objPuth = "UserAttrItem[@GUID = '" & AttrGUID & "']"
Set currNode1 = DocEl.SelectSingleNode(objPuth)
'Проверка наличия заданного GUID атрибута
If currNode1 IS Nothing Then
'Проверка наличия заданного имени атрибута
objPuth = "UserAttrItem[@DisplayName = '" & AttrName & "']"
Set currNode2 = DocEl.SelectSingleNode(objPuth)
If currNode2 Is Nothing Then
'Добавление элемента - если не найдено
DomX1.LoadXML "<UserAttrList/>"
Set Root = DomX1.DocumentElement
With Root.AppendChild(DomX1.CreateElement("UserAttrItem"))
.setAttribute "GUID", AttrGUID
.setAttribute "DisplayName", AttrName
.setAttribute "VisInList", -1
.setAttribute "Note", AttrNote
.setAttribute "ChangeLogging", -1
.setAttribute "VisInMonitor", 0
End With
'Добавляем атрибут для клиента
Srv.InsertList itUserAdvAttr, "", DomX1.xml
WScript.Echo "Добавлен атрибут " & AttrName
Else
'Удаление существующего элемента с таким же именем
DomX1.LoadXML "<UserAttrList/>"
Set Root = DomX1.DocumentElement
Root.AppendChild(DomX1.CreateElement("UserAttrItem")).setAttribute "GUID", currNode2.getAttribute("GUID")
Srv.DeleteList itUserAdvAttr, DomX1.xml
WScript.Echo "Неправильный GUID у атрибута " & AttrName & "! Атрибут удален!"
'Добавление элемента
DomX1.LoadXML "<UserAttrList/>"
Set Root = DomX1.DocumentElement
With Root.AppendChild(DomX1.CreateElement("UserAttrItem"))
.setAttribute "GUID", AttrGUID
.setAttribute "DisplayName", AttrName
.setAttribute "VisInList", -1
.setAttribute "Note", AttrNote
.setAttribute "ChangeLogging", -1
.setAttribute "VisInMonitor", 0
End With
'Добавляем атрибут для клиента
Srv.InsertList itUserAdvAttr, "", DomX1.xml
WScript.Echo " Добавлен атрибут " & AttrGUID & " " & AttrName
End If
Else
'Проверка соответствия имени найденного элемента
If currNode1.getAttribute("DisplayName") <> AttrName Then
'Изменение имени существующего элемента
NameTCh = currNode1.getAttribute("DisplayName")
WScript.Echo "Неправильное имя у атрибута " & AttrGUID & "!"
conf_AttrLevelNormal = 0
DomX1.LoadXML Srv.GetList(itUserAdvAttr, null, null, conf_AttrLevelNormal)
Set DocEl = DomX1.DocumentElement
objPuth = "UserAttrItem[@GUID = '" & AttrGUID & "']"
Set currNode2 = DocEl.SelectSingleNode(objPuth)
currNode2.setAttribute "DisplayName", AttrName
DomX2.LoadXML "<UserAttrList/>"
Set DocEl = DomX2.DocumentElement
DocEl.appendChild currNode2
DomX2.Save "tattr2.xml"
'Меняем имя
Srv.UpdateList itUserAdvAttr, DomX2.xml
WScript.Echo " Изменено имя атрибута с " & NameTCh & " на " & AttrName
Else
WScript.Echo "Атрибут " & AttrGUID & " " & AttrName & " уже есть"
End If
End If
Текущая страница справки: http://help.smart-soft.ru/doc20/index.html?sdk_updatelist.htm