27 авг. 2008 г.

Обновилась документация по Apex

Обращаю внимание, что на днях обновилась документация по Apex 3.1. Новый список книг находится вот здесь. Страница на otn пока еще старая.

Кроме того, что доку привели к формату как в 11g, так еще изменили немного структуру. Например Apex API теперь находятся не в User Guide, а имеют отдельный API Reference

20 авг. 2008 г.

Apex. Саморегистрация пользователей.

Задача на первый взгляд простая. Сделать на сайте регистрацию пользователей. Делов то: нарисовал public page c нужными полями да кнопкой, которая всё это дело отправит в хранимую процедуру, которая в свою очередь создаст пользователя в базе.

Вот с последним как раз может возникнуть вопрос: как создать пользователя в apex с помощью pl/sql. Начнем с того, что в приложениях апекс могут использоваться разные схемы аутентификации. От используемой схемы как раз и зависит решение.
Например, если используется аутентификация на основе "Database Accounts", то достаточно будет создать пользователя в базе данных

execute immediate 'create user user_name identified by password';


Никаких привилегий при этом давать пользователю не нужно. После того как апекс проверит существование пользователя и соответсвие пароля для этого пользователя в базе данных, сессия будет продолжаться под пользователем APEX_PUBLIC_USER (в общем случае :)) Недостатки способа - почти никаких, за исключением того что владелец схемы , в которой находится процедура создания пользователя, должна иметь привилегию CREATE USER. Ну и обработка ошибок и контроль существующих аккаунтов основаны на внутренних механизмах Oracle.

Если используется схема аутентификации Application Express, то тогда пара пользователь-пароль будет проверяться по внутреннему репозиторию Apex. Чтобы создать в нем пользователя можно использовать API-функцию APEX_UTIL.CREATE_USER
Но тут возникнет проблема с недостаточными привилегиями, потому как выполняться процедура будет под анонимным пользователем apex (страница регистрации то у нас PUBLIC). Обойти это можно, предварительно залогинив пользователя с административными привилегиями с помощью функции APEX_CUSTOM_AUTH.LOGIN. Только после создания пользователя нужно не забыть сделать APEX_CUSTOM_AUTH.LOGOUT.
В этом варианте есть одна неприятность: из-за выполнения LOGIN забивается весь дополнительный вывод htp, который делается для обработки результатов регистрации. Во всяком случае у меня этот глюк обойти не удалось в своё время. Как при этом обрабатывать ошибки регистрации - я без понятия :)

Ну и третий вариант, создать собственную схему аутенификации, над которой можно иметь полный контроль. В этом варианте у вас будет своя таблица с пользователями и паролями (можно зашифрованными), в которую при регистрации новых пользователей можно просто вставлять записи. Этот вариант самый предпочтительный. А как создать свою схему аутентификации напишу позже, там ничего сложного :)

Остальные схемы (SSO, LDAP, DAD..) я не рассматриваю, потому что ни разу не встречал и ничего толком о них пока не знаю.

13 авг. 2008 г.

FlexBuilder на Linux

FlexBuilder 3 на Linux тормозит!
Создал давече на своей рабочей станции виртуальную машину с гигом памяти. Поставил туда xubuntu, дабы ресурсы сэкономить. Установил FlexBuilder. И получил среду, в которой что-то разработать нервов никаких не хватит!
Работает из рук вон медленно. Немного ситуацию подправил параметрами запуска eclipse'а.
В файле <FLEX_HOME>/Adobe_Flex_builder.sh в последней строчке, где запускается эклипс, прописать параметры в соотвествии со следующей рекоммендацией:




Общая память машины Параметры
512MB : -vmargs -Xms256m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=64m
1024MB: -vmargs -Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=128m


Пробовал стартовать всё это добро на fluxbox'е ради экономии ресурсов, но быстро отказался. Сам флуксбокс конечно шустрее работает. Но заметной разницы в работе эклипса-флэксбилдера я не заметил.

Но лихо беде начало! Пробуем запустить лёгкое флэкс приложение в firefox с установленным девятым флэш-плеером, и получаем полную жопу. Холостое движение мышкой в области флэшки вызывает такие судороги системных ресурсов, что становится больно на это смотреть.

Я расстроен. На следующей неделе наверное попытаюсь всё это пустить мимо виртуальной машины, дома на убунте. Если памяти прикуплю конечно.

31 июл. 2008 г.

Flex наступает 2

Неожиданно скорое продолжение получает мой предыдущий пост о перспективах для разработчиков приложений под Oracle и, в частности, о нарастующей роли Flex'а в этой области.
На сколько я понял, вчера Oracle предложили попользовать новую версию сайта своей тех.поддержки, попросту новый Metalink. Я самого письма не видел - если не трудно, поделитесь кто-нить его текстом.

Вообще, я целиком и полностью за RIA приложения. Возможности интерфейсов на самом деле впечатляющие. А если вы пробовали еще и написать что-нибудь на Flex, то тем сильнее понимаете все его преимущества.



Итак, беглый осмотр нового металинка и... С виду неплохой дизайн. SCM работает вполне шустренько.И, о боже :) не работает ни один скролл (правда только в firefox, в IE всё в порядке)! Заметные задержки при открытии выпадающих списков. Ладно - в целом ничего, ничего критичного за исключением скроллов. Идем дальше.

Закладка Knowledge. Видимо реализована отдельным flex модулем, судя по скорости загрузки. Опять же заметные тормоза на прорисовке меню. Дальше переходим к какой-нибудь статье. Опять тормоза. Видимо подгрузка снова отдельного модуля Knowledge Browser? Поиск - тормоза на эффектах выползания результатов. Короче на лицо злоупотребление ненужными эффектами.

Очевидно, что есть попытка использовать deep linking, но опять же работает кое-где и кое-как. Запомнить линк на найденную статью сходу не получилось - запоминает только результат поиска.

На остальные закладки пока вообще можно не ходить - там либо подгружается "старый" html based интерфейс, либо попросту смотреть нечего.

Дальше здесь и здесь в отзывах задается вполне резонный вопрос: зачем flash для сайта тех.поддержки? Это вызывает дополнительные трудности при доступе из-за политик безопасности организаций и т.д.
Опять же привязка к версии flash player'а.
Тем более этов выглядит странно, что Oracle выкладывает заведомо неполноценную версию. Торопятся к Oracle Open World 2008? Так имхо как-то не совсем удачно.

Вообще flex сам по себе позволяет избежать постоянного рендеринга страниц и предоставляет серьезную отзывчивость интерфейсов. Т.е. теоритически, получив немного большие тормоза на первоначальной загрузке, пользователь должен насладиться всем богатсвом и удобством флекс приложения в действии. А весят эти приложения в общем-то не так и много. Так что не знаю, стоит ли заморачиваться по поводу траффика. Не жрут его они много сами по себе.

Еще замечу, что пока еще действующая apex-реализация металинка тоже не выделяется удобством пользования и скоростью работы. Видимо, что-то в "консерватории" не так :)

Вобщем, первые впечатления - легкое недоумение "зачем?" и тихая радость "будущее не за горами" :)

28 июл. 2008 г.

Flash графики в Apex на полную мощность



Речь пойдет о построении графиков и диаграмм в Oracle Apex 3.1. Дело в том, что Apex для построения флэш графиков использует стороннюю компоненту AnyChart. Но для стандартных графиков используется AnyChart версии 3, в то время как intaractive reports строят графики с помощью AnyChart версии 4. Так вот эта самая четвертая версия выгодно отличается своим внешним видом от своей предшественницы.
Для сравнения галлерея AnyChart 3 и галлерея AnyChart 4 (или уже 5?). Замечу еще, что для AnyChart 4 требуется Flash Player версии 9 и выше, в то время как для AnyChart 3 достаточно Flash Player 8.
Итак, что мы имеем: Apex 3.1 с двумя встроенными компонентами для построения графиков и диаграмм. И к этому всему достаточно бедный интерфейс для их создания в самом апексе, да и то для устаревшей версии.

Будем исправлять ситуацию.
Для начала создадим Application Process типа OnDemand с именем GETDATA следующего содержания:

begin
htp.p('<anychart>
<settings>
<animation enabled="True"/>
</settings>
<charts>
<chart plot_type="CategorizedVertical">
<data_plot_settings default_series_type="Bar" enable_3d_mode="true" z_padding="0.2" z_aspect="0.8">
<bar_series point_padding="0" group_padding="0.2">
<tooltip_settings enabled="True"/>
</bar_series>
</data_plot_settings>
<chart_settings>
<title enabled="true">
<text>Multi-Series: Columns Clustered by Z-Axis</text>
</title>
<axes>
<y_axis>
<scale mode="Overlay"/>
<labels>
<format>{%Value}{numDecimals:0}</format>
</labels>
</y_axis>
</axes>
</chart_settings>
<data>
<series name="Series 1">
<point name="P1" y="22"/>
<point name="P2" y="34"/>
<point name="P3" y="16"/>
<point name="P4" y="32"/>
<point name="P5" y="68"/>
</series>

<series name="Series 2">
<point name="P1" y="23"/>
<point name="P2" y="45"/>
<point name="P3" y="46"/>
<point name="P4" y="86"/>
<point name="P5" y="45"/>
</series>

<series name="Series 3">
<point name="P1" y="25"/>
<point name="P2" y="56"/>
<point name="P3" y="67"/>
<point name="P4" y="32"/>
<point name="P5" y="27"/>
</series>

<series name="Series 4">
<point name="P1" y="33"/>
<point name="P2" y="29"/>
<point name="P3" y="56"/>
<point name="P4" y="49"/>
<point name="P5" y="77"/>
</series>
</data>
</chart>
</charts>
</anychart>
');
end;


Этот процесс всего лишь возвращает данные в виде xml, сформатированном для компоненты AnyChart. Формат xml можно подсмотреть в документации. Я для простоты взял готовый xml оттуда же. А в принципе, как раз на этом шаге можно моделировать график, исходя из своей фантазии и возможностей AnyChart, пользуясь исключительно знакомым pl/sql.

Дальше на странице, где будем "рисовать" график в поле HTML Header добавим:

<script type="text/javascript" src="/i/flashchart/js/AnyChart.js"></script>


И последнее. Создадим на странице HTML Region, в источнике которого пропишем:

<div id="chart1">
<script type="text/javascript" language="javascript">
var chart = new AnyChart('/i/flashchart/swf/AnyChart.swf');
var get = new htmldb_Get(null,$x('pFlowId').value,'APPLICATION_PROCESS=GETDATA',1);
gRet = get.get(null);
get = null;
chart.setData(gRet);
chart.write(chart1);
</script>
</div>


Вуаля! Посмотреть результат проделанного можно здесь - должно быть примерно то же самое что и на картинке в самом начале поста.

PS
Буду очень рад любым комментариям и поправкам к статье.

24 июл. 2008 г.

Очередной хостинг с Apex

Я уже упоминал о двух хостингах с апексом. Вот еще один. Имхо он даже повыгоднее revion'а получается. Здесь допустим за 50$ в месяц получается 250 метров тэйблспэйсов против 100 на ревионе.

22 июл. 2008 г.

Apex internal

Редко пользуюсь, поэтому всё время вылетает из головы следующая вещь. Если вы пользуетесь Oracle XE и сделали апгрэйд апекса до версии 3.1, то в форме логина, для того чтобы войти как администратор апекса, в поле Workspace нужно ввести INTERNAL. Пользователь соответсвенно ADMIN. Пароль тот, который задавали при установке Apex.

Кстати, недавно в блогах проскакивала новость, что вовсю идет работа над Apex 4.0. Что там будет "эдакого" пока неизвестно.