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 должна возвращать все поля, которые нужно будет редактировать.