20.05.2013

Колонки с однотипными флагами в hGrid

На пути отображения структуры вида <Attribute, AttributeValue> в транспонированном виде с помощью hGrid возникла определенная сложность. Ниже описана методика её преодоления.
Итак, есть структура:
SQL>       select 1 pk, 'Answer1' answr, 'Y' flag from dual
  2        union
  3        select 1, 'Answer2', 'Y' from dual
  4        union
  5        select 1, 'Answer3', 'N' from dual
  6        union
  7        select 1, 'Answer4', 'N' from dual
  8  /
        PK ANSWR   FLAG
---------- ------- ----
         1 Answer1 Y
         1 Answer2 Y
         1 Answer3 N
         1 Answer4 N
Эту структуру требуется отобразить в hGrid следующим образом:

Поехали.
1. Транспонируем структуру:
with a as (
      select 1 pk, 'Answer1' answr, 'Y' flag from dual
      union
      select 1, 'Answer2', 'Y' from dual
      union
      select 1, 'Answer3', 'N' from dual
      union
      select 1, 'Answer4', 'N' from dual
    )
    select * from a
     pivot (max(flag) ans FOR answr IN ('Answer1',
                                        'Answer2',
                                        'Answer3',
                                        'Answer4'
                                       ));
        PK 'Answer1'_ANS 'Answer2'_ANS 'Answer3'_ANS 'Answer4'_ANS
---------- ------------- ------------- ------------- -------------
         1 Y             Y             N             N
Чтобы отображать графические элементы, нам необходимо создавать в каждой колонке switcher с кейсами Y и N, а в них прописывать пути к соответствующим пиктограммам. Однако, OA Framework не допускает наличия на одной странице двух элементов с одинаковыми ID. Выход - присвоить флагу каждой колонки уникальный псевдоним. Модифицируем наш запрос:
with a as (
      select 1 pk, 'Answer1' answr, 'Y' flag from dual
      union
      select 1, 'Answer2', 'Y' from dual
      union
      select 1, 'Answer3', 'N' from dual
      union
      select 1, 'Answer4', 'N' from dual
    )
    select pk,
           "'Answer1'_ANS" ||
             decode("'Answer1'_ANS", null, null, 1) Answer1_VO,
           "'Answer2'_ANS" ||
             decode("'Answer1'_ANS", null, null, 2) Answer2_VO,
           "'Answer3'_ANS" ||
             decode("'Answer1'_ANS", null, null, 3) Answer3_VO,
           "'Answer4'_ANS" ||
             decode("'Answer1'_ANS", null, null, 4) Answer4_VO
    from (
    select * from a
     pivot (max(flag) ans FOR answr IN ('Answer1',
                                        'Answer2',
                                        'Answer3',
                                        'Answer4'
                                       ))
     );
        PK ANSWER1_VO ANSWER2_VO ANSWER3_VO ANSWER4_VO
---------- ---------- ---------- ---------- ----------
         1 Y1         Y2         N3         N4
Теперь запрос можно использовать во View Object. С описанием структуры колонок hGrid нет никаких затруднений: используем пары {Y1, N1}; {Y2, N2} в качестве кейсов в элементах типа switcher.


Комментариев нет :