powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / ExtJS в разрезе апекса. за и против.
25 сообщений из 67, страница 1 из 3
ExtJS в разрезе апекса. за и против.
    #36266983
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сабж и использует ли его кто?
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36267087
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36267229
Фотография Ales Protiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тяжеловатый он в плане размера. А так конечно ничего...
Но я бы выбрал JQuery .
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36267255
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для инета может быть тяжеловат... хотя ~700кб тоже не ахти какой вес(для нынешних скоростных провайдеров неговоря уж об локали), и загружается он один раз а потом работать толькро с одной головной страницей. но для клиентской машины он конечно да немного напряжен в зависимости от конфиги компа.
в jq я тоже использую и активно но вот наткнулся на данный фраемворк и он меня заинтересовал. сейчас хочу разрабатывать новое приложение и попробовать его хочу в деле!
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36267430
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasik,

jQuery просто обещаются интегрировать в ApEx 4. Потому его что так, что так браузер будет загружать вместе со страницей.
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36269470
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дак я не про jq, он то вообще легонький... 100кб

вот ссылки может кому нить пригодяться, можете писать свои если найдете...

http://application-express-blog.e-dba.com/
http://oracleinsights.blogspot.com/
http://abrdev.com/
http://apex.oracle.com/pls/otn/f?p=65555
http://apex.oracle.com/pls/otn/f?p=200801
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36271655
old.rubl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если в апексе весь интерфейс делать на ExtJs, то зачем тогда вообще использовать апекс???

если же для расширения апекса, то очень даже хорошо, при этом подключать всю библиотеку к странице и ненужно, достаточно только используемые части ее.
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36271848
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо путать божий дар с яишницей... Апекс это основа, в все остальное дополнения...
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36271874
old.rubl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasikНе надо путать божий дар с яишницей... Апекс это основа, в все остальное дополнения...в приведенных вами двух последних примерах, была попытка реализации всего интерфейса на extjs. Вот это действительно яишница, точнее сказать не рыба не мясо...
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36271982
old.rubl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasik... Апекс это основа, в все остальное дополнения...
Основа у нас это - "PL/SQL Web Toolkit"!
А апекс "фреймворк + билдер в одном стакане"
стандартное приложение на апексе "апекс"<=>"PL/SQL Web Toolkit"
если же весь пользовательский интерфейс делать на extjs мы получим связку "extjs" <=> "апекс"<=>"PL/SQL Web Toolkit", где апекс лишнее звено. Основа работы с сервером у extjs — AJAX, а апекс не лучший выбор для этих целей, без его гораздо проще, не нужно будет Ext.data.DataProxy дорабатывать. Поэтому если есть желание весь интерфейс делать на extjs то связка "extjs" <=> "PL/SQL Web Toolkit" самое то!

При этом как дополнение к апексу, основной интерфейс на апексе и только отдельные элементы на extjs, это очень хороший вариант.

Ales ProtivТяжеловатый он в плане размера. А так конечно ничего...
Но я бы выбрал Jquery .
extjs предлагает нам набор виджетов (widgets). С помощью чего он их строит?
Используя для этого четыре адаптера:
ext
jquery
prototype
yui

поэтому рассуждения о том, что лучше jquery или extjs, это то же самое что выяснения что лучше шариковая ручка или ее чернильный стержень...
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36272036
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примеры я без всякого умысла выложил, просто укак пример исполшьзования данной библиотеки а не пример замещения апекса и не буду я делать все под extjs а только использование некоторых виджетов для придания живости и интреактивности интерфейса, чего в штатных возможностях апекса нет!
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36272069
old.rubl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 kasik
и будешь прав! правильный выбор!

вот пример создания таблици, если кому интересно

Код: 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.
Ext.onReady(function(){
	
 
    var store = new Ext.data.Store({
        remoteSort: true,
        sortInfo: {field:'st', direction:'DESC'},
        autoLoad: {params:{start: 0 ,limit: 10 }},
        baseParams:{ApexDemandName:'JSON_GRID',ApexNameItem:'USER_SEARCH_STRING',ApexDataType:'json'},
        proxy: new Ext.data.ApexProxy(),

        reader: new Ext.data.JsonReader({
            root: 'strec',
            totalProperty: 'totalCount',
            idProperty: 'ST',
            fields: ['ST','STATE_NAME']
        })
    });
	
		
    var grid = new Ext.grid.GridPanel({
        renderTo: 'st-grid',
        width: 700 ,
        height: 500 ,
        frame:true,
        loadMask:true,
        title:'STATE',
        trackMouseOver:false,
		    autoExpandColumn: 'ST',
        store: store,

        columns: [new Ext.grid.RowNumberer({width:  30 }),{
            id: 'ST',
            header: "St",
            dataIndex: 'ST',
            width:  10 ,
            sortable:true
        },{
            header: "State name",
            dataIndex: 'STATE_NAME',
            width:  500 ,
            sortable:true
        }],

	    bbar: new Ext.PagingToolbar({
		    store: store,
		    pageSize: 10 ,
		    displayInfo:true
	    })

    });


 
});

Это у нас прокси
Код: 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.
Ext.data.ApexProxy = function(config){
    Ext.data.ApexProxy.superclass.constructor.call(this);
    Ext.apply(this, config);
};

Ext.extend(Ext.data.ApexProxy, Ext.data.DataProxy, {
    load : function(params, reader, callback, scope, arg){
        if(this.fireEvent("beforeload", this, params) !== false){
		        params = params || {};
		        var result;
				if (params.ApexDemandName !== undefined) {
				try {
					var get;
          var response;
					get = new htmldb_Get(null, document.getElementById("pFlowId").value, 'APPLICATION_PROCESS='+params.ApexDemandName,  0 );
          if (params.ApexNameItem !== undefined) {get.add(params.ApexNameItem, Ext.util.JSON.encode(params));}

          if(params.ApexDataType == 'json') {
             response = get.get();
					   result = reader.readRecords(Ext.util.JSON.decode(response));
          }else if(params.ApexDataType == 'xml'){
             response = get.get('XML');
					   result = reader.readRecords(response);
          }else{
             response = get.get();
					   result = reader.readRecords(response);
          }
          get = null;if (params.ShowResponse){alert(response);}
				} 
				catch (e) {
					this.fireEvent("loadexception", this, arg, this.response, e);
					callback.call(scope, null, arg, false);
					return;
				}
				callback.call(scope, result, arg, true);
				
			}else{callback.call(scope, null, arg, false);};
				
        }else{callback.call(scope, null, arg, false);}
    },

    update : function(params, records){
        
    }
});


а это Application Processes
Код: 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.
declare
  obj json:= json(); 
  mylist json_list:=json_list();
  st_obj json;
  kol varchar2( 10 );
  qry VARCHAR2( 1000 ):='select a.ST, a.STATE_NAME from (SELECT rownum rn, b.* from ( select ST, STATE_NAME FROM DEMO_STATES ';
  qry_kol varchar2( 1000 ):= 'begin SELECT to_char(count(*)) into :kol FROM DEMO_STATES; end;';
  start_rows number;
  end_rows number;
  
  TYPE CurTyp  IS REF CURSOR;
  v_dstat_cursor    CurTyp;
  dstat_record      DEMO_STATES%ROWTYPE;
  
  main_param json;
  field VARCHAR2( 100 );
  direction VARCHAR2( 5 );
  start_page NUMBER;
  limit_row NUMBER;
begin

if :USER_SEARCH_STRING  is not null then
        select replace(:USER_SEARCH_STRING,'"','"') into :USER_SEARCH_STRING from dual;
        
        main_param:=json(:USER_SEARCH_STRING);
        field   :=json.to_varchar2(main_param.get('sort'));
        direction :=json.to_varchar2(main_param.get('dir'));
        start_page:=json.to_number(main_param.get('start'));
        limit_row :=json.to_number(main_param.get('limit'));
end if;

        start_rows:=nvl(start_page, 0 );
        end_rows:=nvl(start_rows+limit_row, 10 );

        if field is not null then   qry:=qry||' order by '||field;
          if direction is not null then  qry:=qry||' '||direction; end if;
        end if;
        qry:=qry||') b ) a where a.rn>:start_rows and a.rn<=:end_rows';
        
        EXECUTE IMMEDIATE qry_kol USING OUT kol;
        obj.put('totalCount',kol);

    BEGIN
        OPEN v_dstat_cursor FOR qry USING start_rows, end_rows;
        LOOP
          FETCH v_dstat_cursor INTO dstat_record;
          EXIT WHEN v_dstat_cursor%NOTFOUND;
          
           st_obj:= json();
           st_obj.put('ST',dstat_record.ST);
           st_obj.put('STATE_NAME',dstat_record.STATE_NAME);
           mylist.add_elem(st_obj.to_anydata);
           
        END LOOP;
    CLOSE v_dstat_cursor;
    EXCEPTION  WHEN OTHERS THEN 
               CLOSE v_dstat_cursor; 
    END;
     
    obj.put('strec',mylist);
    htp.p(obj.to_char());

end;

работа с json под ораклом взята отсюда http://json.org/
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36272096
old.rubl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select replace(:USER_SEARCH_STRING,'& quot;','"') into :USER_SEARCH_STRING from dual;

в '& quot;' пробела быть недолжно
просто если в оригинале запостить заменяет на ковычки
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36272103
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
old.rublЭто у нас прокси
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
				try {
					var get;
          var response;
					get = new htmldb_Get(null, document.getElementById("pFlowId").value, 'APPLICATION_PROCESS='+params.ApexDemandName,  0 );
          if (params.ApexNameItem !== undefined) {get.add(params.ApexNameItem, Ext.util.JSON.encode(params));}
...

Если уж используете ApEx в качестве основы, то не document.getElementById("pFlowId").value, а $v("pFlowId"). И вообще гляньте на apex.ajax.ondemand... :)
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36272109
old.rubl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 suPPLer
в версии 2?
:-)
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36272125
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
old.rubl,

я говорю про 3.1+, с учётом того, что "ApEx 4.0 - Coming Soon...", и там обещаются jQuery, больше красивостей с AJAX и перламутровые пуговицы. Про ApEx 2 я думаю только в плане "Download new version from Oracle site and read Upgrade Guide", поскольку обновление мне никаких неудобств не доставило.
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36272140
old.rubl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чуть не забыл ...

Header and Footer
Код: plaintext
1.
2.
3.
4.
5.
<link rel="stylesheet" type="text/css"href="/extjs/resources/css/ext-all.css" />
<script type="text/javascript" src="/extjs/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="/extjs/ext-all.js"></script>
<script type="text/javascript" src="&APP_IMAGES.ApexProxy.js"></script>
<script type="text/javascript" src="&APP_IMAGES.json-grid.js"></script>

Region Source
Код: plaintext
1.
<div id="st-grid"></div>
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36272161
old.rubl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 suPPLer
я примеры сначала на XE делал, поэтому можно иногда в коде что угодно увидеть.

Что касается версии 4 неплохо если на осное jQuery сделают расширение UI
если только jQuery UI предложат использовать, то будет очень скромно по сравнению с extjs

поживем увидим...
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36272180
old.rubl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таблица с использованием XML

xml-grid.js
Код: 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.
Ext.onReady(function(){

    var store = new Ext.data.Store({
        baseParams:{ApexDemandName:'XML_GRID',ApexDataType:'xml'},
        proxy: new Ext.data.ApexProxy(),

        reader: new Ext.data.XmlReader({
               record: 'Item',
               id: 'PRODUCT_ID',
               totalRecords: '@total'
           }, [
               'PRODUCT_NAME'
           ])
    });

    var grid = new Ext.grid.GridPanel({
        store: store,
        columns: [
            {header: "PRODUCT", width:  500 , dataIndex: 'PRODUCT_NAME', sortable: true}
        ],
        renderTo:'example-grid',
        loadMask:true,
        width: 540 ,
        height: 200 
    });

    store.load();
});

Application Processes
Код: 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.
owa_util.mime_header('text/xml', FALSE );
htp.p('Cache-Control: no-cache');
htp.p('Pragma: no-cache');
owa_util.http_header_close;

htp.p(' <DEMO_PRODUCT_INFO>');
htp.p('<Items>');

for ll in (
SELECT
'<Item>'||
'<PRODUCT_ID>'||to_char(PRODUCT_ID)||'</PRODUCT_ID>'||
'<PRODUCT_NAME>'||PRODUCT_NAME||'</PRODUCT_NAME>'||
'<PRODUCT_DESCRIPTION>'|| PRODUCT_DESCRIPTION||'</PRODUCT_DESCRIPTION>'||
'<CATEGORY>'|| CATEGORY||'</CATEGORY>'||
'<PRODUCT_AVAIL>'||PRODUCT_AVAIL||'</PRODUCT_AVAIL>'||
'<LIST_PRICE>'|| to_char(LIST_PRICE)||'</LIST_PRICE>'||
'<IMAGE_ID>'|| to_char(IMAGE_ID)||'</IMAGE_ID>'||
'</Item>' str
FROM DEMO_PRODUCT_INFO
)
loop
   htp.p(ll.str);
end loop;

htp.p('</Items>');
htp.p('</DEMO_PRODUCT_INFO>');


Header and Footer
Код: plaintext
1.
2.
3.
4.
5.
<link rel="stylesheet" type="text/css"href="/extjs/resources/css/ext-all.css" />
<script type="text/javascript" src="/extjs/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="/extjs/ext-all.js"></script>
<script type="text/javascript" src="&APP_IMAGES.ApexProxy.js"></script>
<script type="text/javascript" src="&APP_IMAGES.xml-grid.js"></script>
Region Source
Код: plaintext
1.
<div id="example-grid"></div>
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36272213
old.rubl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как дистрибутив extjs поместить в Oracle XE (Oracle XMLDB) описано здесь http://daust.blogspot.com/2006/03/where-are-images-of-application.html

база данных в примерах использовалась из демок апекса "Sample Application"
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #36272300
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
old.rubl2 suPPLer
я примеры сначала на XE делал, поэтому можно иногда в коде что угодно увидеть.

XE тоже прекрасно апгрейдится.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ExtJS в разрезе апекса. за и против.
    #37368027
Fus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
old.rubl,
Пытались ли переделать прокси под EXTJS4?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ExtJS в разрезе апекса. за и против.
    #38654757
bankir1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если вдруг кому интересно.
Сделали связку
ExtJs <->nginx<->apex (PL/SQL Gateway)<->БД

Все файлы типа js,html,css, картинки хостятся на nginx. Запросы к апексу проксируются на Apex.
extjs-all.js nginx отдает в gzip. Интерфейс грузится пару секунд при первой загрузке. При настроенных на nginx хедерах на кэширование, повторное отркрытие моментально происходит.

Почему пришли именно к такому решению - При незначительном количестве работающих с Веб приложением (приложения то достаточно простые - по сути просто отражение таблиц и пара форм для добавления записей) на Apex стали возникать жуткие тормоза при открытии страниц. Сам Апекс живет на том же сервере что и БД с исходными данными, с которой еще работает и основная автоматизированная система с одновременным количеством пользователей порядка 350-400 человек.

Ну в обчем. Переписал эти web приложения на ExtJs c Ajax по demand процессам и всё летает, все довольны :)
Судя по тому, что demand процессы отдают данные практически мгновенно, видимо тормоза возникают именно в построении апексом html страницы.

Можно конечно работать напрямую со своими процедурами доступными через PL/SQL Gateway без Apex, но там надо заморачиваться тогда с аутентификацией, сессиями и тд и тп. Если кому нужно чисто выцепить данные из БД в web клиент без заморочек, то apex и не нужен совсем.

Использую. ExtJs 4.2.1
Делаю перезагрузку метода doRequest в классе Ext.data.proxy.Ajax, чтобы таблички нормально работали.
Формат обмена JSON.
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #38654876
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно конечно работать напрямую со своими процедурами доступными через PL/SQL Gateway без Apex, но там надо заморачиваться тогда с аутентификацией, сессиями и тд и тп. Если кому нужно чисто выцепить данные из БД в web клиент без заморочек, то apex и не нужен совсем.

По подробней, как мне получить данные с БД без апекса?

Спасибо
...
Рейтинг: 0 / 0
ExtJS в разрезе апекса. за и против.
    #38654903
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bankir1980Переписал эти web приложения на ExtJs c Ajax по demand процессам и всё летает, все довольны :)

А чем не угодил встроенный Jquery? EPG (embedded pl/sql gateway) почему не заменили на Apex Listener?
...
Рейтинг: 0 / 0
25 сообщений из 67, страница 1 из 3
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / ExtJS в разрезе апекса. за и против.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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