Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Checkbox в Tree Region (Apex 4) / 9 сообщений из 9, страница 1 из 1
24.09.2010, 15:04
    #36865108
lokift
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Checkbox в Tree Region (Apex 4)
В финальном релизе Apex 4 отсутствует checkbox tree template (а в Early Adopter был). Видимо решили его в релиз не включать.

В Apex 3 можно было решить эту проблему примерно так: APEX_ITEM.CHECKBOX(...) as name

Кто знает как checkbox вставить в дерево в Apex 4?
...
Рейтинг: 0 / 0
27.09.2010, 15:24
    #36868164
noname11111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Checkbox в Tree Region (Apex 4)
lokift,

Реализовать как плагин с использованием JQuery плагина.
...
Рейтинг: 0 / 0
01.10.2010, 18:29
    #36877832
sanya_88
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Checkbox в Tree Region (Apex 4)
можно уточнить , как это сделать?
...
Рейтинг: 0 / 0
01.10.2010, 18:34
    #36877840
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Checkbox в Tree Region (Apex 4)
sanya_88,

STWF .
...
Рейтинг: 0 / 0
04.10.2010, 11:02
    #36879750
lokift
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Checkbox в Tree Region (Apex 4)
Вот реализация такого плагина для моей ситуации (вариант пока что ток тестовый, писалось на коленке и под мою задачу, надеюсь кому-нибудь поможет):
Я решил для такого дерева использовать родную библиотеку jstree .

Создаем плагин с типом Region.
Render Function Name: apexplugin_render
Attributes: Region Source is SQL Statement
Source плагина:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
FUNCTION apexplugin_render (
    p_region              IN apex_plugin.t_region,
    p_plugin              IN apex_plugin.t_plugin,
    p_is_printer_friendly IN BOOLEAN )
  RETURN apex_plugin.t_region_render_result
IS
  l_sourceSQL       apex_application_page_regions.region_source%type    := p_region.source;
  sqlHandler APEX_PLUGIN_UTIL.t_sql_handler;
  RowSet APEX_PLUGIN_UTIL.t_column_value_list;
  l_onload_code LONG;
  lvl NUMBER;
  i NUMBER;
BEGIN
  IF apex_application.g_debug THEN
    apex_plugin_util.debug_region ( p_plugin => p_plugin, 
                                    p_region => p_region, 
                                    p_is_printer_friendly => p_is_printer_friendly );
  END IF;
  sqlHandler := APEX_PLUGIN_UTIL.GET_SQL_HANDLER ( p_sql_statement => l_sourceSQL, 
                                                   p_min_columns =>  2 , 
                                                   p_max_columns =>  100 , 
                                                   p_component_name => NULL );
  APEX_PLUGIN_UTIL.PREPARE_QUERY ( sqlHandler );
  RowSet := APEX_PLUGIN_UTIL.GET_DATA ( sqlHandler );

  lvl :=  0 ;
  i :=  1 ;
  l_onload_code := l_onload_code || '<div id="tree"><ul>';

  FOR row IN  1 ..RowSet( 1 ).count  -- Number of rows
  LOOP
    IF lvl <>  0  THEN
    IF lvl < RowSet( 2 )(row) THEN
      l_onload_code := l_onload_code || '<ul>';
    ELSIF lvl = RowSet( 2 )(row) THEN
      l_onload_code := l_onload_code || '</li>';       
    ELSIF lvl > RowSet( 2 )(row) THEN
      l_onload_code := l_onload_code || '</ul>';
    END IF;
    END IF;

    IF RowSet( 6 )(row) =  1  THEN
      l_onload_code := l_onload_code || '<li id="' || RowSet( 4 )(row)  || '" class="' || RowSet( 5 )(row) || '" rel="project">';
    ELSE
      l_onload_code := l_onload_code || '<li id="' || RowSet( 4 )(row)  || '" class="' || RowSet( 5 )(row) || '" rel="root">';
    END IF;

    l_onload_code := l_onload_code || '<a href="#">' || RowSet( 3 )(row) || '</a>';
    lvl := RowSet( 2 )(row);
    i := i +  1 ;
  END LOOP;

  l_onload_code := l_onload_code || '</ul<>></div>';

  sys.htp.p(l_onload_code);

  apex_css.add_file( p_name       => 'style',
                     p_directory  => apex_application.g_image_prefix || 'libraries/jquery-jstree/1.0rc2/themes/default/',
                     p_version    => null);

  apex_javascript.add_library ( p_name       => 'jquery.jstree', 
                                p_directory  => apex_application.g_image_prefix || 'libraries/jquery-jstree/1.0rc2/',
                                p_version    => null);

  sys.htp.p('<script type="text/javascript">
        $(function () {
            $("#tree").jstree({
                "types" : {
                    "valid_children" : [ "root" ],
                    "types" : {
                        "root" : {
                            "icon" : {
                                "image" : "#IMAGE_PREFIX#libraries/jquery-jstree/1.0rc2/_demo/folder.png"
                            },                        
                            "valid_children" : [ "default" ],
                            "max_depth" : 2,
                            "hover_node" : false,
                            "select_node" : function () {return false;}
                        },
                        "project" : {
                            "icon" : {
                                "image" : "#IMAGE_PREFIX#libraries/jquery-jstree/1.0rc2/_demo/file.png"
                            },                        
                            "valid_children" : [ "default" ],
                            "max_depth" : 2,
                            "hover_node" : false,
                            "select_node" : function () {return false;}
                        },                        
                        "default" : {
                            "valid_children" : [ "default" ]
                        }
                    }
                },
                "themes" : { "theme" : "default" },
                "plugins" : [ "themes", "html_data", "checkbox" , "ui", "types"]
            });
        });
         </script>');
  RETURN NULL;
END;

Запрос для отчета:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT CASE WHEN connect_by_isleaf =  1  THEN  0 
            WHEN LEVEL =  1              THEN  1 
            ELSE                           - 1 
       END AS status, 
       LEVEL,
       P.PRO_NAME AS title,
       P.PRO_ID AS VALUE,
       (SELECT 'jstree-checked' FROM PROJECTS_WORKERS PW, WORKERS W WHERE PW.PRO_ID = P.PRO_ID AND PW.WORKER_ID = W.WORKER_ID AND UPPER(W.WORKER_LOGIN) = UPPER(:APP_USER)),
       P.PRO_TYPE,
       NULL AS icon,
       NULL AS tooltip, 
       NULL AS LINK
FROM PROJECTS P
WHERE P.PRO_ENABLE =  1 
START WITH P.PRO_PARENT_ID IS NULL
CONNECT BY PRIOR P.PRO_ID = P.PRO_PARENT_ID
ORDER SIBLINGS BY P.PRO_NAME

Как видно из кода input в виде checkbox не создаем, используем расширение jstree.

Нужно засунуть нужные данные в post:

На странице создаем кнопку, на нее вешаем динамическое действие по клику, выполняем следующий javascript:

Код: plaintext
1.
2.
3.
4.
5.
$("#tree").jstree("get_checked", false, true).each(function () {
		var checkedId = this.id;
		$("<input>").attr("type", "hidden").attr("name", "f01").val(checkedId).appendTo("#tree");
});

$("#wwvFlowForm").submit();

Ну и создаем процесс After Submit:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DECLARE 

  userId NUMBER;
BEGIN
  SELECT WORKER_ID INTO userId FROM WORKERS WHERE UPPER(WORKER_LOGIN) = UPPER(:APP_USER);

  DELETE FROM PROJECTS_WORKERS WHERE WORKER_ID = userId;

  FOR i in  1 ..APEX_APPLICATION.G_F01.COUNT LOOP
      INSERT INTO PROJECTS_WORKERS (PRO_ID,WORKER_ID) VALUES (APEX_APPLICATION.G_F01(i),userId);
  END LOOP;
  
  COMMIT;

END;
...
Рейтинг: 0 / 0
04.10.2010, 11:11
    #36879775
lokift
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Checkbox в Tree Region (Apex 4)
И еще... Был обноружен баг =) Хотя мож я просто не разобрался до конца... Или сам где то накосячил... В общем не сабмитились те элементы которые были выделены по средством выделения родительского, сабмителся только родительский, т.е. только тот по которому кликнули.

Решил так:

В библиотеке jstree ищем функцию get_checked и исправляем:

Код: plaintext
1.
2.
3.
4.
get_checked : function (obj) {
				obj = !obj || obj === - 1  ? this.get_container() : this._get_node(obj);
 				
				return obj.find("ul li.jstree-checked"); // return obj.find("> ul > .jstree-checked, .jstree-undetermined > ul > .jstree-checked");
			}
...
Рейтинг: 0 / 0
08.01.2011, 14:26
    #37049086
vetKa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Checkbox в Tree Region (Apex 4)
может кому и пригодиться, в плагине от lokift

ELSIF lvl > RowSet(2)(row) THEN
l_onload_code := l_onload_code || '</ul>';
END IF;

надо заменить на

ELSIF lvl > RowSet(2) (row) THEN

for ii in 1 .. lvl - RowSet(2) (row) loop
l_onload_code := l_onload_code || '</ul>';
end loop;

END IF;

где RowSet(2) (row) = level.
...
Рейтинг: 0 / 0
06.05.2011, 16:57
    #37250068
ArtMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Checkbox в Tree Region (Apex 4)
Поковырялся в стандартном дереве. Нашел ф-цию при помощи которой apex создает дерево (apex_builder_4_0.js). там используется только один плагин contextmenu. Никто не знает, как после создания дерева добавить плагин checkbox для использования?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
26.08.2013, 17:30
    #38377706
haXbat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Checkbox в Tree Region (Apex 4)
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Checkbox в Tree Region (Apex 4) / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]