Oracle DB, Oracle APEX, Linux etc.

среда, 23 июня 2010 г.

APEX 4.0: В печать!

Здесь! :)
Читать далее

пятница, 18 июня 2010 г.

Oracle APEX Link Dump #2: APEX 4.0

Небольшой набор полезных ссылок для тех, кто решил начать переходить на Oracle APEX 4.0 с более ранних версий или только начинает знакомство с этим продуктом:
  • Learn Application Express - обучающий материал по APEX 4.0 в виде приложения, созданного на APEX 4.0. Много полезной вводной информации, ссылки на демонстрации возможностей, блоги, форум.
  • New Features in Release 4.0 - перечисление нововведений в 4.0, описание основных из них.
  • Oracle Application Express Documentation - документация по APEX 4.0.
  • Oracle By Examples (OBE) for APEX 4.0 - обучающие примеры работы с новой версией.
  • Посты из Dimitri Gielis Blog с тегом apex 4.0 - рекомендую к прочтению, Димитрий (надеюсь, что транскрипция верна) отлично и подробно описывает возможности новой версии APEX.
  • Oracle APEX 4.0 Early Adopter Blog Coverage by Patrick Wolf: pt. 1, pt. 2, pt. 3 - подборки ссылок от Патрика Вольфа на заметки в блогах, описывающие различные аспекты и возможности новой версии.

Для освоения APEX 4.0 информации более чем достаточно. Успеха!
Читать далее

вторник, 8 июня 2010 г.

APEX: Неочевидное сообщение об ошибке при импорте страницы

This page was exported from a different application or from an application in different workspace. Page cannot be installed in this application.

Такое вот сообщение, знакомое тем, кто разрабатывает приложение одновременно в двух разных рабочих пространствах / БД. APEX показывает его при импорте страницы из приложения рабочего пространства W1 в приложение рабочего пространства W2, таким образом заботясь о целостности приложения. Мало ли, что там на этой странице есть, чего - ещё, уже или вообще - нет в приложении.

Если разработчик уверен, что всё будет в порядке, то достаточно изменить рабочее пространство в файле экспорта:
begin
 
  -- Assumes you are running the script connected to SQL*Plus as the Oracle user APEX_030200 or as the owner (parsing schema) of the application.
  wwv_flow_api.set_security_group_id(p_security_group_id=>2694915948162823);
 
end;
/
В выделенной строке укажите id целевого рабочего пространства, который можно получить следующим запросом (W2 - целевое рабочее пространство):
select workspace_id from apex_workspaces where workspace = 'W2';
Но это всё ещё не гарантирует, что Вы не получите вышеупомянутое сообщение. Почему? Потому что, как было в моём случае, могут не совпасть по формату версии приложений, или версия целевого приложения может быть меньше необходимой для импорта страницы. Глянуть версию в файле экспорта можно здесь:
begin
 
-- This date identifies the minimum version required to import this file.
wwv_flow_api.set_version(p_version_yyyy_mm_dd=>'2009.01.12');
 
end;
/
А вот как её менять - зависит от приложения. Проще всего передать в качестве параметра NULL (страницу можно будет устанавливать в любую версию приложения).
Читать далее

четверг, 13 мая 2010 г.

Небольшая реклама :)

Вам скучно? И Вы считаете, что знаете PL/SQL? Тогда рекомендую в этом удостовериться: попробуйте свои силы, отвечая на вопросы в PL/SQL Challenge! Действительно интересный конкурс, заставляет задуматься.

Играйте честно!
Читать далее

вторник, 11 мая 2010 г.

Запятые точками в FF

Столкнулся с довольно простой проблемой, которую, тем не менее, было интересно решать. В основном, из-за отсутствия знаний о механизме обработки событий клавиатуры (keydown, keypress, keyup) и доступе к их атрибутам в Gecko.

Суть проблемы: при вводе пользователем запятой в input определённого класса заменять её на точку. Решение необходимо было исключительно для движка Gecko.
Путь решения: полазив по Сети, я нашёл несколько реализаций. Самое простое - использовать replace(/\,/g, "."), но при этом курсор пользователя постоянно будет смещаться в конец ввода, кроме того, будет заметна процедура подмены символа. Посложнее - подавлять событие при помощи event.preventDefault() и при помощи манипуляций с obj.selectionStart вставлять на нужное место символ, оставляя курсор там же. Но, как по мне, это слишком сложный вариант.

Потому я решил сделать это через event.preventDefault() и эмуляцию нажатия клавиши, создав и запустив цепочку событий keydown-keypress-keyup. Почитав необходимую документацию и таблицу символов Unicode, я написал следующий код, использующий jQuery:

/* Comma-to-period keypress handler */
/* This code uses jQuery framework */
$(document).ready(function(){
  $("input.decimal").keypress(function(e){
    var pntUniCode = 0x2E, comUniCode = 0x2C; /* Unicode FULL STOP (aka PERIOD) and COMMA hex codes */ 
    
    if (e.which == comUniCode) {
        e.preventDefault();
        var newEvent = document.createEvent("KeyboardEvent");
        newEvent.initKeyEvent('keydown', true, true, null, false, false, false, false, 0, pntUniCode);
        e.target.dispatchEvent(newEvent);
        newEvent.initKeyEvent('keypress', true, true, null, false, false, false, false, 0, pntUniCode);
        e.target.dispatchEvent(newEvent);
        newEvent.initKeyEvent('keyup', true, true, null, false, false, false, false, 0, pntUniCode);
        e.target.dispatchEvent(newEvent);
    }
  });
});

Его можно сохранить в файл и подключить к странице, на которой есть элементы с классом decimal, тогда при вводе запятые будут заменяться на точки. Вуаля!

PS: Поскольку я не считаю себя особым спецом в JavaScript, то любая конструктивная критика только приветствуется.

Читать далее

среда, 28 апреля 2010 г.

Dude, what's with my EPG?

Временами что-то происходит, и Вы не можете соединиться с БД из APEX, картинки не отображаются, постоянно появляется окошко с сообщением "XDB", требующее логин и пароль. В этот случае, если Вы используете Embedded PL/SQL Gateway, стоит проверить, всё ли на месте. В Oracle 11g для этого есть скрипт epgstat.sql, который находится по пути $ORACLE_HOME/rdbms/admin. Вот пример его использования:

$ cd $ORACLE_HOME/rdbms/admin; sqlplus
SQL> conn system
Enter password: 
Connected.
SQL> @epgstat
+--------------------------------------+
| XDB protocol ports:                  |
|  XDB is listening for the protocol   |
|  when the protocol port is non-zero. |
+--------------------------------------+

HTTP Port FTP Port
--------- --------
     8080     2100

1 row selected.

+---------------------------+
| DAD virtual-path mappings |
+---------------------------+

Virtual Path                     DAD Name
-------------------------------- --------------------------------
/apex/*                          APEX

1 row selected.

+----------------+
| DAD attributes |
+----------------+

DAD Name     DAD Param                DAD Value
------------ ------------------------ ----------------------------------------
APEX         database-username        ANONYMOUS
             default-page             apex
             document-table-name      wwv_flow_file_objects$
             request-validation-funct wwv_flow_epg_include_modules.authorize
             ion

             document-procedure       wwv_flow_file_mgr.process_download
             nls-language             american_america.al32utf8
             document-path            docs

7 rows selected.

+---------------------------------------------------+
| DAD authorization:                                |
|  To use static authentication of a user in a DAD, |
|  the DAD must be authorized for the user.         |
+---------------------------------------------------+

no rows selected

+----------------------------+
| DAD authentication schemes |
+----------------------------+

DAD Name             User Name                        Auth Scheme
-------------------- -------------------------------- ------------------
APEX                 ANONYMOUS                        Anonymous

1 row selected.

+--------------------------------------------------------+
| ANONYMOUS user status:                                 |
|  To use static or anonymous authentication in any DAD, |
|  the ANONYMOUS account must be unlocked.               |
+--------------------------------------------------------+

Database User   Status
--------------- --------------------
ANONYMOUS       OPEN

1 row selected.

+-------------------------------------------------------------------+
| ANONYMOUS access to XDB repository:                               |
|  To allow public access to XDB repository without authentication, |
|  ANONYMOUS access to the repository must be allowed.              |
+-------------------------------------------------------------------+

Allow repository anonymous access?
----------------------------------
true

1 row selected.

Этот скрипт показывает массу полезной информации: HTTP- и FTP-порты, которые слушает XDB; настройки DAD; состояние пользователя ANONYMOUS; разрешение анонимного доступа к репозиторию XDB. Проанализировав вывод, существующую проблему будет решать намного проще.

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

среда, 7 апреля 2010 г.

APEX: Clear Cache и псевдонимы страниц

Псевдонимы страниц - довольно полезная вещь, если Вы не хотите, чтобы Ваше приложение зависело от конкретных номеров страниц. Их можно использовать вместо номеров страниц в списках (Lists), переходах (Branches), кнопках, столбцах-ссылках и т.п. Чтобы заменить одну страницу на другую, достаточно заменить псевдонимы у них.

Но есть как минимум один недочёт: псевдонимы страниц не распознаются в поле Clear Cache. Как в APEX версии 3.2, так и в 4.0. Хотя, возможно, до релиза последней что-то изменится, по крайней мере, Enhancement Request я отправил. :)

PS: Не стесняйтесь отправлять отзывы на tryapexnow.com, ведь, основываясь на них, и будет идти исправление багов и добавление возможностей в APEX 4.0.
Читать далее