УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

помогите с XML


Автор Сообщение
Сообщение создано: 21. 04. 2015 [17:08]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"aleax" wrote:

Оказалось все намного проще чем я нагородил выше.

Кроме того это ещё более просто:
JAVASCRIPT
SYS.cntrReq(req=SYS.XMLNode("set").setAttr("path","/sub_Archive/va_"+aid+"/%2farch%2farch").setAttr("col","proc").setAttr("key_arch",arch).setText("1"));
if(req.attr("rez").toInt()) { rez=false; SYS.messErr(req.attr("path"), req); }
else rez=true;


Learn, learn and learn better than work, work and work.
Сообщение создано: 05. 05. 2015 [21:23]
legend
Oleg N
Зарегистрирован(а) с: 13.04.2012
Сообщения: 63
"roman" wrote:

Кроме того это ещё более просто:
JAVASCRIPT
SYS.cntrReq(req=SYS.XMLNode("set").setAttr("path","/sub_Archive/va_"+aid+"/%2farch%2farch").setAttr("col","proc").setAttr("key_arch",arch).setText("1"));
if(req.attr("rez").toInt()) { rez=false; SYS.messErr(req.attr("path"), req); }
else rez=true;



В моей задаче необходимо установить галочку на архивирование всех параметров по ID (10 шт.) во все архивы (3 шт.) в параметре контроллера в LogicLev.
Пытаюсь установить параметр на архивирование следующим образом:
JAVASCRIPT
req = SYS.XMLNode("set").setAttr("path","/DAQ/LogicLev/TDevice/Device/%2farch%2farch").setAttr("key_atr","pH").setAttr("col","FSArch.1s").setText("1"); 
SYS.cntrReq(req);

Все работает. Галочка архивирования в архив FSArch.1s для параметра pH устанавливается.

Согласно документации изменить ячейку в таблице можно по номеру строки, не зная id параметра: <set path="/fld_teg" user="user" row='3' col='id'>Test</set>
Т.е. в моем случае запрос на установку архивирования параметра должен быть таким:
JAVASCRIPT
req = SYS.XMLNode("set").setAttr("path","/DAQ/LogicLev/TDevice/Device/%2farch%2farch").setAttr("row","5").setAttr("col","FSArch.1s").setText("1"); 
SYS.cntrReq(req);

Но такой способ установки галочки в таблице архивирования не работает.
При обработке данной команды выводится ошибка:
<XMLNodeObj:set col="FSArch.1s" mcat="/Diagnostic system for pool controllers/sub_DAQ/mod_LogicLev/cntr_TDevice/prm_Device/" path="/DAQ/LogicLev/TDevice/Device/%2farch%2farch" rez="2" row="5" user="root">Элемент &apos;&apos; отсутствует или отключен!
</XMLNodeObj:set>

Не совсем понимаю в чем проблема. Можно ли использовать атрибуты row и cow?
Сообщение создано: 05. 05. 2015 [21:52]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"legend" wrote:

Согласно документации изменить ячейку в таблице можно по номеру строки, не зная id параметра: <set path="/fld_teg" user="user" row='3' col='id'>Test</set>

Если нет ключа, что исключает возможность использования "row".

Learn, learn and learn better than work, work and work.
Сообщение создано: 06. 05. 2015 [14:23]
legend
Oleg N
Зарегистрирован(а) с: 13.04.2012
Сообщения: 63
"roman" wrote:

Если нет ключа, что исключает возможность использования "row".

Т.е. в данном случае ключом является key_atr и если он есть в таблице, то использовать функцию "row" нельзя?
Или ключ key это что-то другое и его каким-то образом можно указать?

Нашел только, что " key — ключевые колонки (key=«id,name,per»); " Попытался установить key в запросах к таблице, но ничего толкового не получилось.
Сообщение создано: 26. 05. 2015 [16:55]
legend
Oleg N
Зарегистрирован(а) с: 13.04.2012
Сообщения: 63
Так и не получилось включать архивирование параметров с указанием номера строки и столбца. Решил данную задачу указанием значений атрибутов key_atr и col, как описал выше.

Но столкнулся с другой проблемой.
Пробую добавлять параметры для контроллера в LogicLev из визуального интерфейса через скрипт.
JAVASCRIPT
req = SYS.XMLNode("set").setAttr("path","/DAQ/LogicLev/TDevice/Device/%2fprm%2fcfg%2fPRM").setAttr("dev."+number); 
SYS.cntrReq(req);

При запросах от пользователя root легко создаются параметры контроллера.
Но если запрос производятся другим пользователем, не имеющим прав на доступ к подсистеме DAQ, то сделать ничего не получается. Появляется ошибка доступа:
JAVASCRIPT
<XMLNodeObj:set mcat="ContrItfc" path="/DAQ/LogicLev/TDevice/Device/%2fprm%2fcfg%2fPRM" rez="2" user="admin">Ошибка доступа к элементу &apos;/prm/cfg/PRM&apos;!
</XMLNodeObj:set>

Если такому пользователю открыть права на доступ к DAQ, то скрипт работает.
Возможно ли изменить запрос так, что бы он обрабатывался без изменения прав доступа?

Хотел вручную задавать атрибут user="root", но не получилось. Данный атрибут устанавливает источник запроса, в данном случае Vision.
Может быть есть какой-то способ принудительного задания этого атрибута?
Сообщение создано: 26. 05. 2015 [17:22]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"legend" wrote:

Так и не получилось включать архивирование параметров с указанием номера строки и столбца. Решил данную задачу указанием значений атрибутов key_atr и col, как описал выше.

Я вроде ясно писал, что наличие ключа у элемента исключает использование номера строки.

"legend" wrote:

Возможно ли изменить запрос так, что бы он обрабатывался без изменения прав доступа?

Чем включение в группу "DAQ" не решение?
Кроме того это политика защиты и намёк на то, что такие задачи не нужно делать в интерфейсе визуализации.

Learn, learn and learn better than work, work and work.
Сообщение создано: 26. 05. 2015 [17:29]
legend
Oleg N
Зарегистрирован(а) с: 13.04.2012
Сообщения: 63
"roman" wrote:

Чем включение в группу "DAQ" не решение?

Тогда пользователь "с шаловливыми ручками" сможет открыть конфигуратор и получить доступ на редактирование других модулей DAQ и библиотек, что не желательно.
Сообщение создано: 01. 06. 2015 [17:07]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"legend" wrote:

Тогда пользователь "с шаловливыми ручками" сможет открыть конфигуратор и получить доступ на редактирование других модулей DAQ и библиотек, что не желательно.

Это один и тот-же механизм, поэтому и правила для них одинаковы, естественно.

Learn, learn and learn better than work, work and work.
Сообщение создано: 11. 01. 2016 [10:06]
coro
Bkmz Bkmz
Зарегистрирован(а) с: 08.10.2014
Сообщения: 12
Доброго времени суток!
Кто нибудь-сталкивался с необходимостью получать не только значение но и имя(id,name) из атрибутов?
JAVASCRIPT
SYS.cntrReq(tmppValTnar = SYS.XMLNode("get").setAttr("path","/sub_DAQ/mod_LogicLev/cntr_"+ctrlName+"/prm_cur/%2fval%2fAinTnar"));


Курево:
http://wiki.oscada.org/Doc/API#h154-1

Сейчас работает через шаблоны и это коряво:
JAVASCRIPT
SYS.cntrReq(XMLreq = SYS.XMLNode("get").setAttr("path","/sub_DAQ/tmplb_main/tmpl_map/%2fio%2fio"));


Заранее благодарен.
Сообщение создано: 11. 01. 2016 [10:43]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"coro" wrote:

Кто нибудь-сталкивался с необходимостью получать не только значение но и имя(id,name) из атрибутов?
JAVASCRIPT
SYS.cntrReq(tmppValTnar = SYS.XMLNode("get").setAttr("path","/sub_DAQ/mod_LogicLev/cntr_"+ctrlName+"/prm_cur/%2fval%2fAinTnar"));


Курево:
http://wiki.oscada.org/Doc/API#h154-1

Чем прямо не устроило? Курим это: http://wiki.oscada.org/Doc/OpisanieProgrammy#h920-10

Learn, learn and learn better than work, work and work.



4749