Author |
Message |
Written on: 21. 04. 2015 [17:08]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"aleax" wrote:
Оказалось все намного проще чем я нагородил выше.
Кроме того это ещё более просто:
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.
|
Written on: 05. 05. 2015 [21:23]
|
legend
Oleg N
registered since: 13.04.2012
Posts: 63
|
"roman" wrote:
Кроме того это ещё более просто:
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.
Пытаюсь установить параметр на архивирование следующим образом:
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>
Т.е. в моем случае запрос на установку архивирования параметра должен быть таким:
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">Элемент '' отсутствует или отключен!
</XMLNodeObj:set>
Не совсем понимаю в чем проблема. Можно ли использовать атрибуты row и cow?
|
Written on: 05. 05. 2015 [21:52]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"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.
|
Written on: 06. 05. 2015 [14:23]
|
legend
Oleg N
registered since: 13.04.2012
Posts: 63
|
"roman" wrote:
Если нет ключа, что исключает возможность использования "row".
Т.е. в данном случае ключом является key_atr и если он есть в таблице, то использовать функцию "row" нельзя?
Или ключ key это что-то другое и его каким-то образом можно указать?
Нашел только, что " key — ключевые колонки (key=«id,name,per»); " Попытался установить key в запросах к таблице, но ничего толкового не получилось.
|
Written on: 26. 05. 2015 [16:55]
|
legend
Oleg N
registered since: 13.04.2012
Posts: 63
|
Так и не получилось включать архивирование параметров с указанием номера строки и столбца. Решил данную задачу указанием значений атрибутов key_atr и col, как описал выше.
Но столкнулся с другой проблемой.
Пробую добавлять параметры для контроллера в LogicLev из визуального интерфейса через скрипт.
req = SYS.XMLNode("set").setAttr("path","/DAQ/LogicLev/TDevice/Device/%2fprm%2fcfg%2fPRM").setAttr("dev."+number);
SYS.cntrReq(req);
При запросах от пользователя root легко создаются параметры контроллера.
Но если запрос производятся другим пользователем, не имеющим прав на доступ к подсистеме DAQ, то сделать ничего не получается. Появляется ошибка доступа:
<XMLNodeObj:set mcat="ContrItfc" path="/DAQ/LogicLev/TDevice/Device/%2fprm%2fcfg%2fPRM" rez="2" user="admin">Ошибка доступа к элементу '/prm/cfg/PRM'!
</XMLNodeObj:set>
Если такому пользователю открыть права на доступ к DAQ, то скрипт работает.
Возможно ли изменить запрос так, что бы он обрабатывался без изменения прав доступа?
Хотел вручную задавать атрибут user="root", но не получилось. Данный атрибут устанавливает источник запроса, в данном случае Vision.
Может быть есть какой-то способ принудительного задания этого атрибута?
|
Written on: 26. 05. 2015 [17:22]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"legend" wrote:
Так и не получилось включать архивирование параметров с указанием номера строки и столбца. Решил данную задачу указанием значений атрибутов key_atr и col, как описал выше.
Я вроде ясно писал, что наличие ключа у элемента исключает использование номера строки.
"legend" wrote:
Возможно ли изменить запрос так, что бы он обрабатывался без изменения прав доступа?
Чем включение в группу "DAQ" не решение?
Кроме того это политика защиты и намёк на то, что такие задачи не нужно делать в интерфейсе визуализации.
Learn, learn and learn better than work, work and work.
|
Written on: 26. 05. 2015 [17:29]
|
legend
Oleg N
registered since: 13.04.2012
Posts: 63
|
"roman" wrote:
Чем включение в группу "DAQ" не решение?
Тогда пользователь "с шаловливыми ручками" сможет открыть конфигуратор и получить доступ на редактирование других модулей DAQ и библиотек, что не желательно.
|
Written on: 01. 06. 2015 [17:07]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"legend" wrote:
Тогда пользователь "с шаловливыми ручками" сможет открыть конфигуратор и получить доступ на редактирование других модулей DAQ и библиотек, что не желательно.
Это один и тот-же механизм, поэтому и правила для них одинаковы, естественно.
Learn, learn and learn better than work, work and work.
|
Written on: 11. 01. 2016 [10:06]
|
coro
Bkmz Bkmz
registered since: 08.10.2014
Posts: 12
|
Доброго времени суток!
Кто нибудь-сталкивался с необходимостью получать не только значение но и имя(id,name) из атрибутов?
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
Сейчас работает через шаблоны и это коряво:
SYS.cntrReq(XMLreq = SYS.XMLNode("get").setAttr("path","/sub_DAQ/tmplb_main/tmpl_map/%2fio%2fio"));
Заранее благодарен.
|
Written on: 11. 01. 2016 [10:43]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"coro" wrote:
Кто нибудь-сталкивался с необходимостью получать не только значение но и имя(id,name) из атрибутов?
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.
|