1.4.7. Частичная прогрузка древовидного списка¶
Операция GetSQLText, возвращающая курсор для отображения в дереве Пример выборки:
[CURSOR r ]
BEGIN
IF &SelectType = 'Select' THEN
OPEN :r FOR
SELECT * FROM btk_registry WHERE NVL(idParent,0) = NVL(:OpenNodeId,0) &SortOrder;
ELSIF &SelectType = 'RefreshNodes' THEN
OPEN :r FOR
SELECT * FROM btk_registry START WITH NVL(idParent, 0) = NVL(:idRoot, 0) OR id IN( &OpenNodeIdArray ) CONNECT BY id = PRIOR idParent &SortOrder;
END IF;
END;
В выборке должен анализироваться макрос &SelectType. Возможные значения:
- Select – курсор должен вернуть все подузлы текущей записи, идентификатор которой передается в параметре :OpenNodeId, который имеет тип идентификатора. При открытии дерева (самый первый запрос) :OpenNodeId = null;
- RefreshNodes - получить всех родителей до :IdRoot с их подузлами + свои подузлы. Список открытых узлов доступен в параметре :OpenNodeIdArray, который представлять собой строку идентификаторов, разделенный запятыми.
В операции доступен параметр :IdRoot – идентификатор корня (м.б. Null). Одновременно с параметром :OpenNodeId и :OpenNodeIdArray можно использовать макросы &OpenNodeId и &OpenNodeIdArray. Курсор должен возвращать обязательные поля:
- ID – идентификатор записи
- Text – текст, отображаемый в узле
- IDParent – ID родительской записи
- BHasChild – значение 0 или 1 – признак наличия подузлов
- ImageIndex – номер иконки узла (необязательное поле).
Соответствия между реальными именами полей из курсора и теми, которые ожидает дерево, устанавливаеться в закладке «Дополнительные свойства» у выборки (можно воспользоваться мастером). Операция RefreshItem должна возвращать все поля, которые нужно будет редактировать.