14. Èíòåðôåéñ óïðàâëåíèÿ ñèñòåìîé è äèíàìè÷åñêîå äåðåâî îáúåêòîâ ñèñòåìû (TCntrNode)
Äëÿ ïîëíîãî ïîêðûòèÿ êëþ÷åâûõ êîìïîíåíòîâ ñèñòåìû ñåòüþ îáúåêòîâ åäèíîé ñòðóêòóðû ïðåäíàçíà÷åí îáúåêò óçëà äèíàìè÷åñêîãî äåðåâà TCntrNode. Íà ýòîò îáúåêò âîçëàãàþòñÿ ñëåäóþùèå ôóíêöèè:
- åäèíîîáðàçíîãî äîñòóïà ê êîìïîíåíòàì ñèñòåìû, âêëþ÷àÿ áëîêèðîâêè äèíàìè÷åñêîãî äîñòóïà;
- ïîñòðîåíèå ðàñïðåäåë¸ííîãî èíòåðôåéñà óïðàâëåíèÿ.
Ëþáîé îáúåêò, èìåþùèé ïîòðåáíîñòü â ïðåäîñòàâëåíèè äèíàìè÷åñêîãî äîñòóïà ê ñåáå èëè ñâîèì êîìïîíåíòàì äîëæåí íàñëåäîâàòüñÿ îò îáúåêòà óçëà äèíàìè÷åñêîãî äåðåâà TCntrNode. Äàííîå ðîäñòâî àâòîìàòè÷åñêè âêëþ÷àåò óçåë â äèíàìè÷åñêîå äåðåâî îáúåêòîâ, îõâà÷åííîå êàê ïðÿìîé, òàê è îáðàòíîé ñâÿçüþ, à òàêæå ïðåäîñòàâëÿåò âîçìîæíîñòü ñîçäàíèÿ êîíòåéíåðîâ ïîä ñîáñòâåííûå äî÷åðíèå óçëû.  äîïîëíåíèè ê ýòîìó óçåë ïîëó÷àåò âîçìîæíîñòü óïðåæäåíèÿ ïðî âêëþ÷åíèå è èñêëþ÷åíèå/óäàëåíèå óçëà èç äåðåâà ñ âîçìîæíîñòüþ îòêàçà îò èñêëþ÷åíèÿ/óäàëåíèÿ.
Èíòåðôåéñ óïðàâëåíèÿ ñèñòåìû âêëþ÷¸í â ñîñòàâ îáúåêòà TCntrNode è, ñîîòâåòñòâåííî, îõâàòûâàåò âñå óçëû äèíàìè÷åñêîãî äåðåâà ñèñòåìû, ïîçâîëÿÿ åäèíîîáðàçíî óïðàâëÿòü ñèñòåìîé âíå çàâèñèìîñòè îò èñïîëüçóåìîãî êëèåíòñêîãî èíñòðóìåíòà. Èíòåðôåéñ óïðàâëåíèÿ ñèñòåìîé âûïîëíåí íà îñíîâå ÿçûêà ðàçìåòêè XML. Ìîæíî ïðèäóìàòü ìíîæåñòâî ñïîñîáîâ èñïîëüçîâàíèÿ èíòåðôåéñà óïðàâëåíèÿ ñèñòåìîé, â êà÷åñòâå ïðèìåðà îòìåòèì ñëåäóþùèå íàèáîëåå ÿðêèå ðåøåíèÿ:
- Web èíòåðôåéñ êîíôèãóðàöèè;
- GUI èíòåðôåéñ êîíôèãóðàöèè (QT, GTK+, ...);
- îòðàæåíèå êîíôèãóðàöèè â ñåòü äëÿ ðàñïðåäåë¸ííîãî óïðàâëåíèÿ ìíîæåñòâîì OpenSCADA-ñòàíöèé èç åäèíîé ñðåäû àäìèíèñòðèðîâàíèÿ;
- èñïîëüçîâàíèå â ðîëè ïðîòîêîëà äëÿ äîñòóïà ê äàííûì îáúåêòîâ èç ñåòè;
- ïðåäîñòàâëåíèå ñåðâèñíûõ ôóíêöèé äëÿ äîñòóïà òðåòüèõ ïðèëîæåíèé è îòäåëüíûõ êîìïîíåíòîâ OpenSCADA ê âíóòðåííèì äàííûì.
Èíòåðôåéñ óïðàâëåíèÿ ñèñòåìîé ðåàëèçîâàí ïîñðåäñòâîì ñîñòàâëÿþùèõ:
- èíôîðìàöèîííîé ñòðóêòóðû êîíôèãóðàöèîííîé ïîëüçîâàòåëüñêîé ñòðàíèöû;
- äèíàìè÷åñêîé ÷àñòè â âèäå çàïðîñîâ íà ïîëó÷åíèå, ìîäèôèêàöèþ äàííûõ è ñåðâèñíûõ çàïðîñîâ;
- êîíòåéíåðà èëè ãðóïïû âûøåóêàçàííûõ ýëåìåíòîâ.
Èíôîðìàöèîííàÿ èåðàðõè÷åñêàÿ ñòðóêòóðà ñîäåðæèò èíôîðìàöèþ î ïóáëè÷íûõ ýëåìåíòàõ óïðàâëåíèÿ è ìîæåò áûòü èñïîëüçîâàíà äëÿ ïîñòðîåíèÿ ïîëüçîâàòåëüñêèõ äèàëîãîâ óïðàâëåíèÿ óçëàìè ñèñòåìû.
Äèíàìè÷åñêàÿ ÷àñòü ñîäåðæèò ñöåíàðèè îáñëóæèâàíèÿ çàïðîñîâ ê ýëåìåíòàì óïðàâëåíèÿ, îïèñàííûì â èíôîðìàöèîííîé ñòðóêòóðå, à òàêæå ñêðûòûå ýëåìåíòû óïðàâëåíèÿ â âèäå ñåðâèñíûõ ôóíêöèé, èñïîëüçóåìûå äëÿ óíèôèöèðîâàííîãî äîñòóïà ê óçëó.
Êîíòåéíåð ïîçâîëÿåò ñîáðàòü â îäèí çàïðîñ íåñêîëüêî èíôîðìàöèîííûõ ñòðóêòóð è äèíàìè÷åñêèõ ÷àñòåé, îïòèìèçèðóÿ òåì ñàìûì âðåìÿ çàïðîñà îñîáåííî íà ñåòåâûõ âûñîêîëàòåíòíûõ èíòåðôåéñàõ.
Îáùèé èíòåðôåéñ óïðàâëåíèÿ ñòðîèòñÿ èç îòäåëüíûõ óçëîâ äèíàìè÷åñêîãî äåðåâà. Èåðàðõè÷åñêîå íàñëåäîâàíèå îò îáúåêòà TCntrNode ïîçâîëÿåò ðåàëèçîâûâàòü ìíîãîóðîâíåâîå äîïîëíåíèå êîíôèãóðàöèè èíòåðôåéñà óïðàâëåíèÿ. Îáùèé âèä äèíàìè÷åñêîãî äåðåâà óçëîâ ïðåäñòàâëåí íà ðèñ. 8.

Ðèñ. 8. Ïðèìåð äèíàìè÷åñêîãî äåðåâà óçëîâ ñèñòåìû OpenSCADA.
Óçëû ñèñòåìû, ñîäåðæàùèå äàííûå äëÿ èíòåðôåéñà óïðàâëåíèÿ ñèñòåìîé òàêæå äîëæíû ïîäêëþ÷àòüñÿ â äèíàìè÷åñêîå äåðåâî îáúåêòîâ.
Ïîäêëþ÷åíèå óçëà â äèíàìè÷åñêîå äåðåâî ïðîèçâîäèòñÿ ñëåäóþùèì îáðàçîì:
- íàñëåäîâàíèå îáúåêòà TCntrNode èëè åãî ïîòîìêà;
- ôîðìèðîâàíèå èíôîðìàöèîííîé ñòðóêòóðû;
- îáñëóæèâàíèå çàïðîñîâ ê äèíàìè÷åñêèì äàííûì.
14.1. Ñèíòàêñèñ çàïðîñà è îòâåòà èíòåðôåéñà óïðàâëåíèÿ
Âåñü îáìåí ñ èíòåðôåéñîì óïðàâëåíèÿ ïðîèçâîäèòñÿ ïîñðåäñòâîì ÿçûêà XML. Ïðè ýòîì âíóòðåííèé îáìåí âûïîëíÿåòñÿ ðàçîáðàííîé ñòðóêòóðîé ÿçûêà XML (DOM), à âíåøíèé — ïîñðåäñòâîì ïðåîáðàçîâàíèÿ â ïîòîê ñèìâîëîâ ñïëîøíîãî XML-ôàéëà è îáðàòíî.
Çàïðîñ âûïîëíÿåòñÿ ïîñðåäñòâîì îòïðàâêè îäíîãî êîíòåéíåðà ñ íåêîòîðûìè ïàðàìåòðàìè â àòðèáóòàõ. Ðåçóëüòàò ïîìåùàåòñÿ â ïîëó÷åííûé êîíòåéíåð ñ èçìåíåíèåì íåêîòîðûõ àòðèáóòîâ êîðíåâîãî êîíòåéíåðà.  îáùåì âèäå êîíòåéíåð çàïðîñà ìîæíî çàïèñàòü ñëåäóþùèì îáðàçîì:
<cmd path="/TreePath" user="user" force="1"/>
Ãäå:
cmd — êîìàíäà çàïðîñà;
path — ïóòü ê óçëó èëè âåòâè óçëà;
user — ïîëüçîâàòåëü ñèñòåìû îò èìåíè êîòîðîãî íàïðàâëåí çàïðîñ;
force — ïðèçíàê âûïîëíèòü çàïðîñ áåç ïðåäóïðåæäåíèÿ.
 ïîäòâåðæäåíèå ðåçóëüòàòà çàïðîñà óñòàíàâëèâàåòñÿ àòðèáóò ðåçóëüòàòà rez â çíà÷åíèÿ: 0-çàïðîñ ïðîøåë, 1-ïðåäóïðåæäåíèå (ñ âîçìîæíîñòüþ âûïîëíåíèÿ), 2-îøèáêà.  ñëó÷àå îøèáêè è ïðåäóïðåæäåíèÿ ñîîáùåíèÿ çàïèñûâàþòñÿ â òåêñò êîíòåéíåðà è àòðèáóò mcat (êàòåãîðèÿ ñîîáùåíèÿ): <cmd path="/TreePath" user="user" force="1" rez="2" mcat="sub_DAQ/mod_BlockCalc>Íåâîçìîæíî óäàëèòü óçåë</cmd>.
Ãðóïïèðóþùèé çàïðîñ "CntrReqs" îáðàáàòûâàþòñÿ íà óðîâíå API óçëà è íå òðåáóþò îòäåëüíîé îáðàáîòêè â ïîëüçîâàòåëüñêîì êîäå. Ôàêòè÷åñêè â òåã "CntrReqs" ìîãóò ïîìåùàòüñÿ ëþáûå äðóãèå çàïðîñû ñ âîçìîæíîñòüþ èåðàðõè÷åñêîé ãðóïïèðîâêè ïóò¸ì âêëþ÷åíèÿ âíóòðåííèõ òåãîâ "CntrReqs". Åäèíñòâåííûì àòðèáóòîì ýòîãî òåãà ÿâëÿåòñÿ àòðèáóò path, êîòîðûé óêàçûâàåò ïóòü ê óçëó è ÿâëÿåòñÿ îñíîâîé äëÿ âíóòðåííèõ çàïðîñîâ.
<CntrReqs path="/sub_DAQ/cntr_gate">
<get path="/%2fprm%2fcfg%2fNAME"/>
<get path="/%2fprm%2fcfg%2fDESCR"/>
<list path="/%2fserv%2fattr"/>
</CntrReqs>
14.2. Òåã èíôîðìàöèîííîé ñòðóêòóðû äëÿ îïèñàíèÿ ãðóïï äî÷åðíèõ âåòîê ñòðàíèöû
Êàæäàÿ ñòðàíèöà ìîæåò ñîäåðæàòü ãðóïïû äî÷åðíèõ âåòâåé. Äëÿ îïèñàíèÿ ãðóïï âåòâåé ïðåäóñìîòðåí òåã branches. Òåã ñîäåðæèò îïèñàíèå ãðóïï âåòâåé ïîñðåäñòâîì âëîæåííûõ òåãîâ grp. Ê òåãó ãðóïïû âîçìîæåí äîñòóï êàê íà "÷òåíèå" (âèäèìîñòü) òàê è íà ìîäèôèêàöèþ (âûïîëíåíèå êîìàíä äîáàâëåíèÿ è óäàëåíèÿ ýëåìåíòîâ ãðóïïû), ñëåäîâàòåëüíî ýëåìåíò òðèàäû äîñòóïà ìîæåò ïðèíèìàòü çíà÷åíèÿ:
00 — äîñòóï âîîáùå îòñóòñòâóåò;
04 — ïðèñóòñòâóåò äîñòóï òîëüêî íà ÷òåíèå;
02 — ïðèñóòñòâóåò äîñòóï òîëüêî íà çàïèñü, îáû÷íî òàêîå çíà÷åíèå íå èìååò ñìûñëà ïîñêîëüêó äîñòóï íà çàïèñü ïîäðàçóìåâàåò è äîñòóï íà ÷òåíèå;
06 — ïðèñóòñòâóåò äîñòóï è íà ÷òåíèå, è íà çàïèñü.
Äåéñòâèÿ íàä ãðóïïîé ýëåìåíòîâ ïîëíîñòüþ ñîâïàäàþò ñ äåéñòâèÿìè íàä ñïèñêîì âèçóàëüíûõ ýëåìåíòîâ "list", î êîòîðîì íàïèñàíî íèæå.
14.3. Òåãè îïèñàíèÿ èíôîðìàöèîííîé ñòðóêòóðû èíòåðôåéñà óïðàâëåíèÿ
Èíôîðìàöèîííûå òåãè äëÿ ÿçûêà XML ñîñòàâëÿþò àëôàâèò ôîðìèðîâàíèÿ îïèñàíèÿ êîíôèãóðàöèîííûõ äèàëîãîâ. Êîìàíäà çàïðîñà èíôîðìàöèîííîé ÷àñòè èìååò âèä: <info path="/TreePath" user="user"/>
 ðåçóëüòàòå çàïðîñà áóäåò ïîëó÷åíà èíôîðìàöèîííàÿ ñòðóêòóðà ñòðàíèöû â ñîîòâåòñòâèè ñ ïðèâèëåãèÿìè óêàçàííîãî ïîëüçîâàòåëÿ.
14.3.1. Òåã îáëàñòè "area"
Îáëàñòè îïèñûâàþòñÿ òåãîì area è ïðåäíàçíà÷åíû äëÿ ãðóïïèðîâêè ýëåìåíòîâ ïî ðàçëè÷íûì ïðèçíàêàì. Îáëàñòü ìîæåò âêëþ÷àòü äðóãèå ýëåìåíòû è îáëàñòè. Êîðíåâûå îáëàñòè ôîðìèðóþò çàêëàäêè â ïðåäñòàâëåíèè ïîëüçîâàòåëüñêîãî èíòåðôåéñà. Ê òåãó âîçìîæåí äîñòóï òîëüêî íà "÷òåíèå" èëè "âèäèìîñòü", ñëåäîâàòåëüíî ýëåìåíò òðèàäû äîñòóïà ìîæåò ïðèíèìàòü çíà÷åíèå 00, åñëè äîñòóï îòñóòñòâóåò, èëè 04, åñëè ïðèñóòñòâóåò.
<area id='base' dscr='Base information'>
<fld id='host' dscr='Host name' tp='str'/>
<fld id='user' dscr='Operated user' tp='str'/>
<fld id='sys' dscr='Station system' tp='str'/>
<area id='other' dscr='Other options'>
<fld id='val' dscr='Value' tp='real'/>
</area>
</area>
14.3.2. Òåãè äàííûõ
Òåãè, îïèñûâàþùèå äàííûå, ñâåäåíû â òàáëèöå 1.
Òàáëèöà 1. Òåãè, îïèñûâàþùèå äàííûå
Òåã | Îïèñàíèå |
<fld> | Ïðîñòåéøèå äàííûå ñòðîêîâîãî, öåëîãî, âåùåñòâåííîãî è ëîãè÷åñêîãî òèïîâ. |
<list> | Ñïèñêè ñ äàííûìè ñòðîêîâîãî, öåëîãî, âåùåñòâåííîãî è ëîãè÷åñêîãî òèïîâ. |
<table> | Òàáëèöû ñ äàííûìè â ÿ÷åéêàõ ñòðîêîâîãî, öåëîãî, âåùåñòâåííîãî è ëîãè÷åñêîãî òèïîâ. |
<img> | Èçîáðàæåíèÿ. |
a) Òåã "fld"
<fld id='host' dscr='Host name' tp='str'/>
<fld id='user' dscr='Operated user' tp='str'/>
<fld id='sys' dscr='Station system' tp='str'/>
Ê òåãó âîçìîæåí äîñòóï êàê íà "÷òåíèå", òàê è íà "çàïèñü", ñëåäîâàòåëüíî ýëåìåíò òðèàäû äîñòóïà ìîæåò ïðèíèìàòü çíà÷åíèÿ:
00 — äîñòóï âîîáùå îòñóòñòâóåò;
04 — ïðèñóòñòâóåò äîñòóï òîëüêî íà ÷òåíèå;
02 — ïðèñóòñòâóåò äîñòóï òîëüêî íà çàïèñü, îáû÷íî òàêîå çíà÷åíèå íå èìååò ñìûñëà ïîñêîëüêó äîñòóï íà çàïèñü ïîäðàçóìåâàåò è äîñòóï íà ÷òåíèå;
06 — ïðèñóòñòâóåò äîñòóï è íà ÷òåíèå è íà çàïèñü.
Òèï ýëåìåíòà, îïèñûâàåìîãî òåãîì "fld", óêàçûâàåòñÿ àòðèáóòîì tp (òàáëèöà 2).
Òàáëèöà 2. Çíà÷åíèÿ àòðèáóòà tp òåãà "fld".
Òåã tp | Îïèñàíèå |
str | Ñòðîêîâûé òèï.
<fld id='host' dscr='Host name' tp='str'/> |
dec | Öåëîå ÷èñëî â äåñÿòè÷íîì ïðåäñòàâëåíèè.
<fld id='debug' dscr='Debug level' tp='dec'/> |
oct | Öåëîå ÷èñëî â âîñüìåðè÷íîì ïðåäñòàâëåíèè.
<fld id='cr_file_perm' dscr='Make files permissions(default 0644)' tp='oct' len='3'/> |
hex | Öåëîå ÷èñëî â øåñòíàäöàòåðè÷íîì ïðåäñòàâëåíèè. |
real | Âåùåñòâåííîå ÷èñëî. |
bool | Ëîãè÷åñêèé ïðèçíàê ("false"|"true").
<fld id='log_sysl' dscr='Direct messages to syslog' tp='bool'/> |
time | Âðåìÿ â ñåêóíäàõ (îò 01/01/1970).
<fld id='v_beg' dscr='Start time' tp='time'/> |
Òàáëèöà 3. Äåéñòâèÿ íàä ýëåìåíòîì, îïèñàííûì òåãîì "fld".
Îïåðàöèÿ | Äåéñòâèå |
Îïðîñ | Çàïðîñ: êîìàíäà «get»: <get path="/fld_teg" user="user"/>.
Ðåçóëüòàò: ïîäòâåðæäåíèå ñî çíà÷åíèåì â òåêñòå òåãà èëè ñîîáùåíèå îá îøèáêå. |
Ìîäèôèêàöèÿ | Çàïðîñ: êîìàíäà "set": <set path="/fld_teg" user="user">value</set>
Ðåçóëüòàò: ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå. |
Çàïðîñ ïðàâèë ïîäñâåòêè ñèíòàêñèñà, äëÿ òåêñòîâûõ ïîëåé (îïðåäåë¸í àòðèáóò "rows"). | Çàïðîñ: êîìàíäà "SnthHgl": <SnthHgl path="/fld_teg" user="user"/>
Ðåçóëüòàò: ïîäòâåðæäåíèå ñî ñïèñêîì ïðàâèë ïîäñâåòêè ñèíòàêñèñà:
<rule expr="\b(if|else|for|while|in|using|new|var|break|continue|return|Array|Object)\b" color="darkblue" font_weight="1"/> <rule expr="(\?|\:)" color="darkblue" font_weight="1"/> <rule expr="(\b0[xX][0-9a-fA-F]*\b|\b[+-]?[0-9]*\.?[0-9]+[eE]?[-+]?[0-9]*\b|\btrue\b|\bfalse\b)" color="blue"/> <rule expr=""[^"]*"" color="darkgreen"/> <rule expr="//[^\n]*" color="gray" font_italic="1"/> <blk beg="/\\*" end="\\*/" color="gray" font_italic="1"/>
|
b) Òåã "list"
<list id='mod_auto' dscr='List of shared libs(modules)' tp='str' dest='file'/>
Ê òåãó âîçìîæåí äîñòóï êàê íà "÷òåíèå", òàê è íà "çàïèñü"(ìîäèôèêàöèþ), ñëåäîâàòåëüíî ýëåìåíò òðèàäû äîñòóïà ìîæåò ïðèíèìàòü çíà÷åíèÿ:
00 — äîñòóï âîîáùå îòñóòñòâóåò;
04 — ïðèñóòñòâóåò äîñòóï òîëüêî íà ÷òåíèå;
02 — ïðèñóòñòâóåò äîñòóï òîëüêî íà çàïèñü, îáû÷íî òàêîå çíà÷åíèå íå èìååò ñìûñëà ïîñêîëüêó äîñòóï íà çàïèñü ïîäðàçóìåâàåò è äîñòóï íà ÷òåíèå;
06 — ïðèñóòñòâóåò äîñòóï è íà ÷òåíèå è íà çàïèñü.
Òèï ýëåìåíòîâ â ñïèñêå óêàçûâàåòñÿ àòðèáóòîì tp. Çíà÷åíèÿ àòðèáóòà tp ïðèâåäåíû â òàáëèöå 1.
Òàáëèöà 4. Äåéñòâèÿ íàä ñïèñêîì.
Îïåðàöèÿ | Äåéñòâèå |
Îïðîñ | Çàïðîñ: êîìàíäà «get»: <get path="/fld_teg" user="user"/>
Ðåçóëüòàò: ïîäòâåðæäåíèå ñ ðåçóëüòàòîì â òåêñòå òåãà èëè ñîîáùåíèå îá îøèáêå. Ðåçóëüòàò ôîðìèðóåòñÿ â âèäå: <get path="/fld_teg" user="user" rez="0"> <el id='0'>./MODULES/arh_base.o</el>
<el id='1'>./MODULES/cntr_sys.o</el>
</get> |
Äîáàâëåíèå ñòðîêè | Çàïðîñ: êîìàíäà "add": <add path="/fld_teg" user="user" id="tst">Test</add> ×èòàåòñÿ, êàê äîáàâèòü ñòðîêó ñ èäåíòèôèêàòîðîì «tst» è çíà÷åíèåì «Test». Åñëè ñïèñîê íå èíäåêñèðîâàííûé, òî àòðèáóò id îòñóòñòâóåò.
Ðåçóëüòàò: ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå. |
Âñòàâêà ñòðîêè | Çàïðîñ: êîìàíäà "ins": <ins path="/fld_teg" user="user" pos="3" p_id="tst1" id="tst">Test</ins> ×èòàåòñÿ, êàê âñòàâèòü ñòðîêó ñ èäåíòèôèêàòîðîì «tst» è çíà÷åíèåì «Test» â ïîçèöèþ 3 ñî ñòðîêîé «tst1».  ñëó÷àå èíäåêñíîãî ñïèñêà àòðèáóò p_id ñîäåðæèò èäåíòèôèêàòîð, èíà÷å — òåêñò ñòðîêè. Åñëè ñïèñîê íå èíäåêñèðîâàí, òî àòðèáóò id îòñóòñòâóåò.
Ðåçóëüòàò: ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå. |
Óäàëåíèå ñòðîêè | Çàïðîñ: êîìàíäà "del": <del path="/fld_teg" user="user" pos='3' id='tst'>Test</del> ×èòàåòñÿ, êàê óäàëèòü ñòðîêó ñ èäåíòèôèêàòîðîì «tst» è çíà÷åíèåì «Test» â ïîçèöèè 3. Åñëè ñïèñîê íå èíäåêñèðîâàí, òî àòðèáóò id îòñóòñòâóåò.
Ðåçóëüòàò: ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå. |
Èçìåíåíèå ñòðîêè | Çàïðîñ: êîìàíäà "edit": <edit path="/fld_teg" user="user" pos='3' p_id='tst1' id='tst' >Test</edit> ×èòàåòñÿ, êàê çàìåíèòü ñòðîêó â ïîçèöèè 3 ñ èäåíòèôèêàòîðîì "tst1" íà ñòðîêó ñ èäåíòèôèêàòîðîì «tst» è çíà÷åíèåì «Test».  ñëó÷àå èíäåêñèðîâàííîãî ñïèñêà àòðèáóò p_id ñîäåðæèò èäåíòèôèêàòîð, èíà÷å — òåêñò ñòðîêè. Åñëè ñïèñîê íå èíäåêñèðîâàí, òî àòðèáóò id îòñóòñòâóåò.
Ðåçóëüòàò: ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå. |
Ïåðåìåùåíèå ñòðîêè | Çàïðîñ: êîìàíäà "move": <move path="/fld_teg" user="user" pos='3' to='5'/> ×èòàåòñÿ, êàê ïåðåìåñòèòü ñòðîêó ñ ïîçèöèè 3 â ïîçèöèþ 5.
Ðåçóëüòàò: ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå. |
c) Òåã "table"
<table id='a_mess' key='0' col_lst="0;1;2">
<list id='0' dscr='Id' acs='4' tp='str'/>
<list id='1' dscr='Name' acs='4' tp='str'/>
<list id='2' dscr='Type' acs='4' tp='str'/>
<list id='3' dscr='Hide' acs='4' tp='bool'/>
</table>
Ê òåãó òàáëèöû è êîëîíêàì îòäåëüíî âîçìîæåí äîñòóï êàê íà "÷òåíèå", òàê è íà "çàïèñü"(ìîäèôèêàöèþ), ñëåäîâàòåëüíî ýëåìåíò òðèàäû äîñòóïà ìîæåò ïðèíèìàòü çíà÷åíèÿ:
00 — äîñòóï âîîáùå îòñóòñòâóåò;
04 — ïðèñóòñòâóåò äîñòóï òîëüêî íà ÷òåíèå;
02 — ïðèñóòñòâóåò äîñòóï òîëüêî íà çàïèñü, îáû÷íî òàêîå çíà÷åíèå íå èìååò ñìûñëà ïîñêîëüêó äîñòóï íà çàïèñü ïîäðàçóìåâàåò è äîñòóï íà ÷òåíèå;
06 — ïðèñóòñòâóåò äîñòóï è íà ÷òåíèå è íà çàïèñü.
Åñëè óêàçàí àòðèáóò key è â í¸ì ïåðå÷èñëåíû êëþ÷åâûå êîëîíêè, òî ðàáîòà ñ òàáëèöåé ïåðåõîäèò â ðåæèì àäðåñàöèè ïî èäåíòèôèêàòîðàì êîëîíîê è êëþ÷àì.
Òàáëèöà 5. Äåéñòâèÿ íàä òàáëèöåé.
Îïåðàöèÿ | Äåéñòâèå |
Îïðîñ | Çàïðîñ: êîìàíäà "get": <get path="/fld_teg" user="user" cols="0;2" rows="100;1000"/> ×èòàåòñÿ, êàê ïîëó÷èòü êîëîíêè 0-2 è ñòðîêè â íèõ ñ 100 ïî 1000 òàáëèöû.
Ðåçóëüòàò: Ïîäòâåðæäåíèå ñ äàííûìè òàáëèöû èëè ñîîáùåíèå îá îøèáêå. Ðåçóëüòàò ôîðìèðóåòñÿ â âèäå: <get path="/fld_teg" user="user" cols="0;2" rows="100;1000" rez="0"> <list id='0' tp='str'> <el id='100'>Sat Feb 21 18:04:16 2004</el>
</list>
<list id='1' tp='str'> <el id='100'>SYS</el>
</list>
<list id='2' tp='str'> <el id='100'>*:(TSYS)Broken PIPE signal allow!</el>
</list>
</get> |
Äîáàâëåíèå ñòðîêè | Çàïðîñ: êîìàíäà "add": <add path="/fld_teg" user="user"/>
Ðåçóëüòàò: ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå. |
Âñòàâêà ñòðîêè | Çàïðîñ: êîìàíäà "ins": <ins path="/fld_teg" user="user" row='3'/> ×èòàåòñÿ, êàê âñòàâèòü ñòðîêó â ïîçèöèþ 3. Êîìàíäà íå ðàáîòàåò ïðè óñòàíîâëåííîì àòðèáóòå key!
Ðåçóëüòàò: ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå. |
Óäàëåíèå ñòðîêè |
Çàïðîñ: êîìàíäà "del": <del path="/fld_teg" user="user" row='3'/> èëè <del path="/fld_teg" user="user" key_id='Test'/> äëÿ êëþ÷åâîãî ðåæèìà ×èòàåòñÿ, êàê óäàëèòü ñòðîêó â ïîçèöèè 3 èëè ñòðîêó â ïîçèöèè, ãäå çíà÷åíèå êîëîíêè id ðàâíî 'Test'.
Ðåçóëüòàò: ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå. |
Ïåðåìåùåíèå ñòðîêè | Çàïðîñ: êîìàíäà "move": <move path="/fld_teg" user="user" row='3' to='5'/> ×èòàåòñÿ, êàê ïåðåìåñòèòü ñòðîêó ñ ïîçèöèè 3 â ïîçèöèþ 5. Äàííàÿ êîìàíäà íå ðàáîòàåò ïðè óñòàíîâëåííîì àòðèáóòå key!
Ðåçóëüòàò: ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå. |
Èçìåíèòü ÿ÷åéêó | Çàïðîñ: êîìàíäà "set": <set path="/fld_teg" user="user" row='3' col='id'>Test</set> èëè <set path="/fld_teg" user="user" key_id='Test' col='id'>Test1</set> äëÿ êëþ÷åâîãî ðåæèìà ×èòàåòñÿ êàê — óñòàíîâèòü çíà÷åíèå ÿ÷åéêè â ñòðîêå 3 è êîëîíêå 'id' â «Test» èëè óñòàíîâêà êîëîíêè ñ èìåíåì 'id' ñòðîêè â ïîçèöèè ãäå çíà÷åíèå êîëîíêè id ðàâíî 'Test' â çíà÷åíèå 'Test1'. Ïðàêòè÷åñêè äàííàÿ êîìàíäà ïåðåèìåíîâûâàåò êëþ÷åâîé ýëåìåíò óêàçàííîé ñòðîêè.
Ðåçóëüòàò: ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå. |
d) Òåã "img"
<img id='ico' descr='Èêîíêà ñòðàíèöû'/>
Ê òåãó âîçìîæåí äîñòóï êàê íà "÷òåíèå", òàê è íà "çàïèñü", ñëåäîâàòåëüíî ýëåìåíò òðèàäû äîñòóïà ìîæåò ïðèíèìàòü çíà÷åíèÿ:
00 — äîñòóï âîîáùå îòñóòñòâóåò;
04 — ïðèñóòñòâóåò äîñòóï òîëüêî íà ÷òåíèå;
02 — ïðèñóòñòâóåò äîñòóï òîëüêî íà çàïèñü, îáû÷íî òàêîå çíà÷åíèå íå èìååò ñìûñëà ïîñêîëüêó äîñòóï íà çàïèñü ïîäðàçóìåâàåò è äîñòóï íà ÷òåíèå;
06 — ïðèñóòñòâóåò äîñòóï è íà ÷òåíèå è íà çàïèñü.
Òåã ïðåäíàçíà÷åí äëÿ ïåðåäà÷è èçîáðàæåíèé êëèåíòàì èíòåðôåéñà óïðàâëåíèÿ. Ïîä èçîáðàæåíèåì ìîãóò âûñòóïàòü: èêîíêè ñòðàíèö, ãðàôèêè ìàññèâîâ çíà÷åíèé è äðóãèå äàííûå, êîòîðûå ìîæíî ïðåäñòàâèòü â ãðàôè÷åñêîì âèäå.
Ïîääåðæèâàþòñÿ êîìàíäû çàïðîñîâ:
- <get path="/fld_teg" user="user"/> — çàïðîñ èçîáðàæåíèÿ;
Ðåçóëüòàòîì ÿâëÿåòñÿ ïîäòâåðæäåíèå ñ äàííûìè èçîáðàæåíèÿ èëè ñîîáùåíèå îá îøèáêå.
- <set path="/fld_teg" user="user">img</set> — çàãðóçêà èçîáðàæåíèÿ.
Ðåçóëüòàòîì ÿâëÿåòñÿ ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå.
e) Êîìàíäû ñ ïàðàìåòðàìè. Òåã "comm"
<comm id='add'>
<fld id='tm' tp='time'/>
<fld id='cat' tp='str'/>
<fld id='lvl' tp='dec' min='0' max='7'/>
<fld id='mess' tp='str'/>
</comm>
Ê òåãó âîçìîæåí äîñòóï êàê íà "÷òåíèå" èëè âèäèìîñòü+îáñëóæèâàíèå çàïðîñîâ, òàê è íà ìîäèôèêàöèþ èëè âûïîëíåíèå êîìàíäû, ñëåäîâàòåëüíî ýëåìåíò òðèàäû äîñòóïà ìîæåò ïðèíèìàòü çíà÷åíèå 00, åñëè äîñòóï îòñóòñòâóåò âîîáùå; 04, åñëè êîìàíäó ìîæíî óâèäåòü; è 06, åñëè êîìàíäó ìîæíî èíèöèèðîâàòü.
Ïðåäíàçíà÷åí äëÿ ïåðåäà÷è êîìàíä è äåéñòâèé óçëó, à òàêæå ìîæåò èñïîëüçîâàòüñÿ äëÿ ñîçäàíèÿ ññûëîê íà äðóãèå ñòðàíèöû. Êîìàíäû ìîãóò âêëþ÷àòü ïàðàìåòðû. Ïàðàìåòðû îïèñûâàþòñÿ òåãîì "fld".
Ïîääåðæèâàþòñÿ êîìàíäû çàïðîñîâ:
<set path="/fld_teg" user="user"/>
<fld id='tm'>1023456244</fld>
<fld id='cat'>*</fld>
<fld id='lvl'>2</fld>
<fld id='mess'>Test mess</fld>
</set>
- Çàãðóçêà ññûëêè íà äðóãóþ ñòðàíèöó:
<get path="/fld_teg" user="user" tp="lnk"/>"
Ðåçóëüòàòîì ÿâëÿåòñÿ ïîäòâåðæäåíèå èëè ñîîáùåíèå îá îøèáêå.
f) Âåòêè (äî÷åðíèå óçëû)
<list id='k_br' dscr='Kernel branches' tp='br'/>
Âåòêè îïèñûâàþòñÿ îáû÷íûì ñïèñêîì "list" ñî ñïåöèàëüíûìè àòðèáóòàìè tp='br'. Ìåòîäèêà çàïðîñà è ìîäèôèêàöèè âåòîê ïîëíîñòüþ ñîâïàäàåò ñ ìåòîäèêîé ðàáîòû ñî ñïèñêîì "list".
14.4 Èåðàðõè÷åñêèå çàâèñèìîñòè èíôîðìàöèîííûõ ýëåìåíòîâ ÿçûêà óïðàâëåíèÿ
Ïðèìåð ñòðàíèöû óçëà ÿçûêà óïðàâëåíèÿ:
<oscada_cntr>
<area id='a_gen' dscr='Generic control'>
<fld id='config' dscr='Config file' tp='str' dest='file'/>
<fld id='cr_file_perm' dscr='Files' tp='oct' len='3'/>
<fld id='cr_dir_perm' dscr='Directories' tp='oct' len='3'/>
<comm id='upd_opt' dscr='Update options(from config)'/>
<comm id='quit' dscr='Quit'/>
</area>
<area id='a_kern' dscr='Kernels'>
<list id='k_br' dscr='Kernels' tp='br'/>
</area>
</oscada_cntr>
Òàáëèöà 6. Èåðàðõè÷åñêèå çàâèñèìîñòè èíôîðìàöèîííûõ ýëåìåíòîâ ÿçûêà:
Òåã | Îïèñàíèå | Àòðèáóòû | Ñîäåðæèìîå |
oscada_cntr | Êîðíåâîé ýëåìåíò ñòðàíèöû. ßâëÿåòñÿ åäèíñòâåííûì è ñëóæèò äëÿ èäåíòèôèêàöèè ïðèíàäëåæíîñòè ê ÿçûêó èíòåðôåéñà óïðàâëåíèÿ. | id — èäåíòèôèêàòîð;
dscr — îïèñàíèå. | area, img, branches |
branches | Êîíòåéíåð ãðóïï äî÷åðíèõ âåòîê óçëà. | id — èäåíòèôèêàòîð êîíòåéíåðà. Ðàâåí: br. | grp |
grp | Ãðóïïà äî÷åðíèõ óçëîâ. | id — ïðåôèêñ ãðóïïû äî÷åðíèõ óçëîâ â ñèñòåìå;
dscr — îïèñàíèå ãðóïïû âåòîê;
acs — îïöèè äîñòóïà. | |
area | Ãðóïïèðîâêà ñòàíäàðòíûõ òåãîâ. | id — èäåíòèôèêàòîð;
dscr — îïèñàíèå;
acs — îïöèè äîñòóïà. | area, fld, list, table, comm, img |
comm | Êîìàíäû óçëó. | id — èäåíòèôèêàòîð;
dscr — îïèñàíèå;
help — ïîìîùü ïî êîìàíäå;
tp — òèï êîìàíäû (lnk — ññûëêà);
acs — îïöèè äîñòóïà. | fld |
fld | Îïèñàíèå äàííûõ ñòàíäàðòíûõ òèïîâ. | id — èäåíòèôèêàòîð;
dscr — îïèñàíèå;
help — ïîìîùü;
acs — îïöèè äîñòóïà.
tp — òèï ýëåìåíòà: str(len, dest, cols, rows(SnthHgl)) — ñòðîêîâûé ýëåìåíò;
dec(len, max, min, dest) — öåëîå ÷èñëî â äåñÿòè÷íîì ïðåäñòàâëåíèè;
oct(len, max, min, dest) — öåëîå ÷èñëî â âîñüìåðè÷íîì ïðåäñòàâëåíèè;
hex(len, max, min, dest) — öåëîå ÷èñëî â øåñòíàäöàòåðè÷íîì;
real(len, max, min, dest) — âåùåñòâåííîå ÷èñëî;
bool — ëîãè÷åñêèé ïðèçíàê;
time — âðåìÿ/äàòà â ñåêóíäàõ (îò 01/01/1970).
Ñâÿçíûå:
len — äëèíà çíà÷åíèÿ (ñèìâ.);
min — ìèíèìóì çíà÷åíèÿ;
max — ìàêñèìóì çíà÷åíèÿ;
cols — êîëè÷åñòâî êîëîíîê;
rows — êîëè÷åñòâî ñòðîê;
dest — ñïîñîá ââîäà: data — èñòî÷íèê áèíàðíûõ äàííûõ (base64).
select(select) — âûáîðíûé òèï;
sel_ed(select) — âûáîðíûé òèï ñ âîçìîæíîñòüþ ðåäàêòèðîâàíèÿ.
select — ïóòü ê ñêðûòîìó ñïèñêó;
sel_list — ñòàòè÷åñêèé ñïèñîê (ðàçäåëèòåëü ';');
sel_id — ñòàòè÷åñêèé ñïèñîê èäåíòèôèêàòîðîâ (ðàçäåëèòåëü ';'). | |
list | Ñïèñîê äàííûõ ñòàíäàðòíûõ òèïîâ. | id — èäåíòèôèêàòîð;
dscr — îïèñàíèå;
help — ïîìîùü ïî ñïèñêó;
acs — îïöèè äîñòóïà.
tp — êàê â fld êðîìå: br(br_pref) — äî÷åðíèå óçëû.
idm — èíäåêñèðîâàííûé ñïèñîê (0|1);
s_com — ñïîñîáû ìîäèôèêàöèè ñïèñêà [add][,ins][,edit][,del]: add — äîáàâëÿòü ñòðîêè;
ins — âñòàâëÿòü ñòðîêè;
edit — ìîäèôèöèðîâàòü ñòðîêè;
del — óäàëÿòü ñòðîêè.
Ñâÿçíûå:
br_pref — ïðåôèêñ äî÷åðíèõ óçëîâ;
dest — êàê â fld. | |
table | Òàáëèöà äàííûõ ñòàíäàðòíûõ òèïîâ. | id — èäåíòèôèêàòîð;
dscr — îïèñàíèå;
help — ïîìîùü ïî òàáëèöå;
acs — îïöèè äîñòóïà;
key — êëþ÷åâûå êîëîíêè (key=«id,name,per»);
cols — ïåðå÷åíü êîëîíîê â àòðèáóòå çàïðîñà;
rows — äèàïàçîí ñòðîê â àòðèáóòå çàïðîñà;
s_com — ñïîñîáû ìîäèôèêàöèè òàáëèöû [add][,del][,ins][,move]:add — äîáàâëÿòü ñòðîêè;
ins — âñòàâëÿòü ñòðîêè;
del — óäàëÿòü ñòðîêè;
move — ïåðåìåùàòü ñòðîêè. | list |
img | Èçîáðàæåíèå. | id — èäåíòèôèêàòîð;
dscr — îïèñàíèå;
help — ïîìîùü ïî èçîáðàæåíèþ;
acs — îïöèè äîñòóïà;
h_sz — ãîðèçîíòàëüíîå îãðàíè÷åíèå;
v_sz — âåðòèêàëüíîå îãðàíè÷åíèå. | |
14.5. Îáúåêò óçëà äèíàìè÷åñêîãî äåðåâà (TCntrNode)
Íàñëåäóåòñÿ: | Âñåìè äèíàìè÷åñêèìè è óïðàâëÿåìûìè îáúåêòàìè ïðÿìî èëè ÷åðåç ïîòîìêîâ. |
Äàííûå:
Èìåíîâàííûå ïðàâà äîñòóïà ê ýëåìåíòàì óïðàâëåíèÿ (define):
- R_R_R_ (0444) — äîñòóï âñåì òîëüêî íà ÷òåíèå;
- R_R___ (0440) — äîñòóï íà ÷òåíèå òîëüêî âëàäåëüöó è ãðóïïå;
- R_____ (0400) — äîñòóï íà ÷òåíèå òîëüêî âëàäåëüöó;
- RWRWRW (0666) — ïîëíûé äîñòóï äëÿ âñåõ;
- RWRWR_ (0664) — ïîëíûé äîñòóï âëàäåëüöó è ãðóïïå, à âñåì îñòàëüíûì òîëüêî íà ÷òåíèå;
- RWR_R_ (0644) — ïîëíûé äîñòóï âëàäåëüöó, à ãðóïïå è âñåì îñòàëüíûì òîëüêî íà ÷òåíèå;
- RWR___ (0640) — ïîëíûé äîñòóï âëàäåëüöó, òîëüêî íà ÷òåíèå - ãðóïïå è çàêðûò âñåì îñòàëüíûì;
- RW____ (0600) — ïîëíûé äîñòóï âëàäåëüöó, à ãðóïïå è âñåì îñòàëüíûì çàêðûò.
Ôëàãè äèíàìè÷åñêîãî óçëà (enum TCntrNode::Flag):
- TCntrNode::MkDisable — îòêëþ÷åíèå (0);
- TCntrNode::Disable — îòêëþ÷åí (1);
- TCntrNode::MkEnable — âêëþ÷åíèå (2);
- TCntrNode::Enable — âêëþ÷åí (3);
- TCntrNode::SelfModify — ïðèçíàê ìîäèôèêàöèè óçëà (0x04);
- TCntrNode::SelfModifyS — ïðèçíàê ñîõðàíåíèÿ ìîäèôèêàöèè óçëà â "load_()" (0x08);
- TCntrNode::SelfSaveForceOnChild — ïðèíóäèòåëüíî ñîõðàíÿòü, âûçûâàòü "save_()", åñëè èçìåíåíû-ñîõðàíÿþòñÿ äî÷åðíèå óçëû (0x10).
Ôëàãè ðåæèìîâ âêëþ÷åíèÿ/îòêëþ÷åíèÿ óçëà (enum TCntrNode::Flag):
- TCntrNode::NodeConnect — ïîäêëþ÷åíèå óçëà;
- TCntrNode::NodeRestore — âîññòàíîâëåíèå ïîäêëþ÷åíèÿ óçëà;
- TCntrNode::NodeShiftDel — ïðèçíàê óäàëåíèÿ óçëà îòëîæåíî.
Ôëàãè ìîäèôèêàöèè óçëà (enum TCntrNode::ModifFlag):
- TCntrNode::Self — äàííûé óçåë ìîäèôèöèðîâàí;
- TCntrNode::Child — ìîäèôèöèðîâàíû äî÷åðíèå óçëû;
- TCntrNode::All — ìîäèôèöèðîâàí äàííûé óçåë è äî÷åðíèå.
Ïóáëè÷íûå ìåòîäû:
- TCntrNode( TCntrNode *prev = NULL ); — Èíèöèàëèçàöèÿ ñ óêàçàíèåì ðîäèòåëüñêîãî óçëà prev.
- virtual string objName( ); — Èìÿ îáúåêòà. Îáúåêò-íàñëåäíèê äîëæåí äîîïðåäåëèòü ñóììàðíîå èìÿ îáúåêòà.
- virtual TCntrNode &operator=( TCntrNode &node ); — Âèðòóàëüíàÿ ôóíêöèÿ êîïèðîâàíèÿ óçëîâ äèíàìè÷åñêîãî äåðåâà.
- void cntrCmd( XMLNode *opt, int lev = 0, const string &path = "", int off = 0 ); — Êîìàíäà ðàáîòû ñ èíòåðôåéñîì óïðàâëåíèÿ ñèñòåìû. Ïîääåðæèâàþòñÿ òðàíñïîðòíûå ïåðåõîäû ïî ïîëíîìó ïóòè âèäà: ãäå %2fgen çàêîäèðîâàííûé âëîæåííûé ïóòü ê êîíêðåòíîìó ïîëþ ñòðàíèöû (/gen).
- static XMLNode *ctrId( XMLNode *inf, const string &n_id, bool noex = false ); — Ïîëó÷åíèå óçëà XML ïî çíà÷åíèþ àòðèáóòà 'id' n_id. Ïîääåðæèâàþòñÿ çàïðîñû XML óçëà ïî ïîëíîìó ïóòè ê íåìó âèäà (node1/node2/node3).
- static XMLNode *ctrMkNode( const char *n_nd, XMLNode *nd, int pos, const char *req, const string &dscr int perm=0777, const char *user="root", const char *grp="root", int n_attr=0, ... ); — Äîáàâëåíèå ýëåìåíòà óïðàâëåíèÿ íà ñòðàíèöó. Âîçìîæíî óêàçàíèå ìíîæåñòâà äîïîëíèòåëüíûõ àòðèáóòîâ â êîëè÷åñòâå n_attr â âèäå: "{àòðèáóò1},{çíà÷åíèé1},{àòðèáóò2},{çíà÷åíèé2},...".
- bool ctrRemoveNode( XMLNode *nd, const char *path ); — Óäàëåíèå ýëåìåíòà óïðàâëåíèÿ path íà ñòðàíèöå nd.
- static bool ctrChkNode( XMLNode *nd, const char *cmd="get", int perm=0444, const char *user="root", const char *grp="root", char mode=04, const char *warn = NULL ); — Ïðîâåðêà íà ïîëó÷åíèå äèíàìè÷åñêîé êîìàíäû cmd è íàëè÷èå ïðàâ íà å¸ èñïîëíåíèå.
- static void ctrListFS( XMLNode *nd, const string &fsBase, const string &fileExt = "" ); — Ñïèñîê îáçîðà ýëåìåíòîâ ôàéëîâîé ñèñòåìû îòíîñèòåëüíî áàçû fsBase, äëÿ ôàéëîâ c ðàñøèðåíèÿìè fileExt â âèäå ñïèñêà "png;jpeg;gif;".
- virtual Res &nodeRes( ); — Ðåñóðñ èñïîëüçîâàíèÿ óçëà.
- virtual const char *nodeName( ); — Èìÿ óçëà.
- string nodePath( char sep = 0, bool from_root = false ); — Ïîëó÷åíèå ïîëíîãî ïóòè ê óçëó, íà÷èíàÿ ñ êîðíÿ from_root, è èñïîëüçóÿ ðàçäåëèòåëü sep èëè îáû÷íóþ çàïèñü ïóòè.
- void nodeList( vector<string> &list, const string& gid = "" ); — Ñïèñîê äî÷åðíèõ óçëîâ list â óêàçàííîé ãðóïïå gid.
- AutoHD<TCntrNode> nodeAt( const string &path, int lev = 0, char sep = 0, int off = 0, bool noex = false ); — Ïîäêëþ÷åíèå ê äî÷åðíåìó óçëó.
- void nodeDel( const string &path, char sep = 0, int flag = 0 ); — Óäàëåíèå óçëà ïî åãî ïîëíîìó ïóòè.
- static void nodeCopy( const string &src, const string &dst, const string &user = "root" ); — Êîïèðîâàíèå óçëîâ äèíàìè÷åñêîãî äåðåâà.
- TCntrNode *nodePrev( bool noex = false ); — Àäðåñ ðîäèòåëüñêîãî óçëà.
- char nodeFlg( ); — Ôëàãè óçëà.
- void setNodeFlg( char flg ); — Óñòàíîâêà ôëàãîâ TCntrNode::SelfModify, TCntrNode::SelfModifyS è TCntrNode::SelfSaveForceOnChild.
- char nodeMode( ); — Ñîñòîÿíèå óçëà.
- unsigned nodeUse( bool selfOnly ); — Êîëè÷åñòâî ïîäêëþ÷åíèé ê óçëó. selfOnly — òîëüêî ñîáñòâåííûõ ïîäêëþ÷åíèé, áåç äî÷åðíèõ.
- unsigned nodePos( ); — Ïîëîæåíèå äàííîãî óçëà â êîíòåéíåðå óçëà-âëàäåëüöà. Äîñòîâåðíî òîëüêî äëÿ óïîðÿäî÷åííûõ êîíòåéíåðîâ.
- int isModify( int mflg = TCntrNode::All ); — Ïðîâåðêà ôàêòà ìîäèôèêàöèè óçëà èëè âåòâè óçëîâ.
- void modif( bool save = false ); — Óñòàíîâêà ïðèçíàêà ìîäèôèöèðîâàííîñòè óçëà, ñ ïðèçíàêîì ñîõðàíåíèÿ save.
- void modifG( ); — Óñòàíîâêà ïðèçíàêà ìîäèôèöèðîâàííîñòè âåòâè óçëîâ.
- void modifClr( bool save = false ); — Î÷èñòêà ïðèçíàêà ìîäèôèöèðîâàííîñòè óçëà èëè ïðèçíàêà ñîõðàíåíèÿ save.
- void modifGClr( ); — Î÷èñòêà ïðèçíàêà ìîäèôèöèðîâàííîñòè âåòâè óçëîâ.
- void load( bool force = false ); — Çàãðóçêà óçëà äèíàìè÷åñêîãî äåðåâà.
- void save( unsigned lev = 0 ); — Ñîõðàíåíèå óçëà äèíàìè÷åñêîãî äåðåâà, íà óðîâíå âëîæåíîñòè lev (ñëóæåáíûé).
- virtual void AHDConnect( ); — Ïîäêëþ÷åíèå ê óçëó (çàõâàò ðåñóðñà).
- virtual bool AHDDisConnect( ); — Îòêëþ÷åíèå îò óçëà (îñâîáîæäåíèå ðåñóðñà). Óäàëåíèå ïðè íóëåâîì ðåçóëüòàòå.
- virtual TVariant objPropGet( const string &id ); — Çàïðîñ ñâîéñòâà óçëà êàê ïîëüçîâàòåëüñêîãî îáúåêòà.
- virtual void objPropSet( const string &id, TVariant val ); — Óñòàíîâêà ñâîéñòâà óçëà êàê ïîëüçîâàòåëüñêîãî îáúåêòà.
- virtual TVariant objFuncCall( const string &id, vector<TVariant> &prms ); — Âûçîâ ôóíêöèè óçëà êàê ïîëüçîâàòåëüñêîãî îáúåêòà.
- virtual AutoHD<TCntrNode> chldAt( int8_t igr, const string &name, const string &user = "" ); — Ïîäêëþ÷åíèå ê äî÷åðíåìó óçëó name êîíòåéíåðà gr ïîëüçîâàòåëÿ user.
- void chldList( int8_t igr, vector<string> &list ); — Ñïèñîê äî÷åðíèõ óçëîâ list â óêàçàííîì êîíòåéíåðå gr.
- bool chldPresent( int8_t igr, const string &name ); — Ïðîâåðêà íà ïðèñóòñòâèå óêàçàííîãî äî÷åðíåãî óçëà name â êîíòåéíåðå gr.
Çàùèù¸ííûå ìåòîäû:
- virtual void cntrCmdProc( XMLNode *req ); — Ôóíêöèÿ îáñëóæèâàíèÿ çàïðîñîâ èíòåðôåéñà óïðàâëåíèÿ. Äîëæíà ïåðåîïðåäåëÿòüñÿ ó ïîòîìêà.
- void nodeEn( int flag = 0 ); — Âêëþ÷åíèå óçëà.
- void nodeDis( long tm = 0, int flag = 0 ); — Îòêëþ÷åíèå óçëà ñ ïåðåäà÷åé ôëàãà.
- void nodeDelAll( ); — Î÷èñòêà âñåõ êîíòåéíåðîâ ñ äî÷åðíèìè óçëàìè.
- void setNodePrev( TCntrNode *node ); — Óñòàíîâêà ðîäèòåëüñêîãî óçëà â node.
- void setNodeMode( char mode ); — Óñòàíîâêà ñîñòîÿíèÿ óçëà.
- virtual void chldAdd( int8_t igr, TCntrNode *node, int pos = -1 ); — Äîáàâëåíèå äî÷åðíåãî óçëà node â êîíòåéíåð gr è ïîçèöèþ pos.
- void chldDel( int8_t igr, const string &name, long tm = -1, int flag = 0, bool shDel = false ); — Óäàëåíèå äî÷åðíåãî óçëà name èç êîíòåéíåðà gr ñ ôëàãîì flag.
- int8_t grpSize( ); — Êîëè÷åñòâî êîíòåéíåðîâ ñ äî÷åðíèìè óçëàìè.
- int8_t grpId( const string &sid ); — Ïîëó÷åíèå èíäåêñà ãðóïïû ïî å¸ èäåíòèôèêàòîðó.
- GrpEl &grpAt( int8_t id ); — Äîñòóï ê ñòðóêòóðå ãðóïïû.
- unsigned grpAdd( const string &id, bool ordered = false ); — Äîáàâëåíèå êîíòåéíåðà äî÷åðíèõ óçëîâ ñ ïðåôèêñîì id è âîçìîæíîñòüþ óïîðÿäî÷åííîãî õðàíåíèÿ ordered. Âîçâðàùàåò èäåíòèôèêàòîð íîâîãî êîíòåéíåðà.
- virtual void preEnable( int flag ); — Óïðåæäåíèå î ïîäêëþ÷åíèè. Âûçûâàåòñÿ ïåðåä ðåàëüíûì ïîäêëþ÷åíèåì.
- virtual void postEnable( int flag ); — Óïðåæäåíèå î ïîäêëþ÷åíèè. Âûçûâàåòñÿ ïîñëå ðåàëüíîãî ïîäêëþ÷åíèÿ.
- virtual void preDisable( int flag ); — Óïðåæäåíèå î îòêëþ÷åíèè. Âûçûâàåòñÿ ïåðåä ðåàëüíûì îòêëþ÷åíèåì.
- virtual void postDisable( int flag ); — Óïðåæäåíèå î îòêëþ÷åíèè. Âûçûâàåòñÿ ïîñëå ðåàëüíîãî îòêëþ÷åíèÿ (ïåðåä óäàëåíèåì).
- virtual void load_( ); — Ôóíêöèÿ âûçîâà çàãðóçêè óçëà ó ïîòîìêà.
- virtual void save_( ); — Ôóíêöèÿ âûçîâà ñîõðàíåíèÿ óçëà ó ïîòîìêà.