вторник, 5 марта 2013 г.

Groovy в JDeveloper

Здравствуйте, в этой статье я хочу вам рассказать о языке Groovy, и его использовании в JDeveloper.
Как говорится в Википедии :
Groovy — объектно-ориентированный язык программирования разработанный для платформы Java как альтернатива языку Java с возможностями Python, Ruby и Smalltalk.
Groovy использует Java-подобный синтаксис с динамической компиляцией в JVM байт-код и напрямую работает с другим Java кодом и библиотеками. Язык может использоваться в любом Java проекте или как скриптовый язык.

Oracle JDeveloper и Oracle ADF 11g ввели поддержку сценариев языка Groovy, позволяющий создавать Groovy выражения, которые можно использовать в свойствах проверки атрибутов и в качестве источника для значений атрибутов .

 Начнем : )
Для демонстрации функциональности Groovy, создайте ADF приложение, соединитесь к тестовой  базе oracle  scott или hr, и создайте entity и view  объекты для таблиц этой схемы.

Oracle ADF предоставляет много мест, где можно использовать Groovy код:

- В значении атрибутов Entity и View объектов.
- В правилах проверки(Validation Rules) атрибутов Entity объектов.
- В выражениях для сообщений об ошибках
- В значениях Bind Variables во View объектах
- В проверке Transient атрибутов во View объектах

Groovy выражения в ADF Business Components объектах

Ссылка на атрибуты в одном объекте.

Простейший пример, работы Groovy, это ссылка на атрибут, во  View объекте.
Создайте Transient атрибут в View  объекте Empview : SumSal(type:number,value type:Expression,value: Sal*Comm)


То есть, используя Groovy мы можем ссылаться в атрибутах на другие атрибуты, и совершать с ними какие либо операции(в данном случае мы создали атрибут которому будет присваиваться произведение зарплаты на коэффициент).
Если запустить AppModule для тестирования, то появится ошибка: "(oracle.jbo.JboException) JBO-29000: Выявлено непредвиденное исключение: java.lang.NullPointerException, сообщ.=Cannot invoke method multiply() on null object". Хоть выражение и правильное, но что бы оно выполнялось,  атрибуты не должны иметь  значения Null. Исправьте  созданное выражение на :
 if ((Comm != null)&&(Sal!= null)){Comm*Sal}  

Использование Groovy выражений в правилах проверки у  entity объектов.
Groovy так же можно использовать для  проверки атрибутов в entity объектах. Для этого в объекте  нужно зайти во вкладку Business rules и создать новый validator.

Появится окно создания правила проверки(validation rule) для нашего entity объекта.  В окне необходимо выбрать тип правила(Type:Script expression),  и заполнить три вкладки:Rule Definition(Groovy выражение определяющее правило),Validation Execution(определение условия запуска правила),Failure Handling(текст сообщения при не выполнении правила).
Сделаем проверку: если зарплата у сотрудника больше 1000 рублей, то вывести сообщение: "У {имя сотрудника} зарплата должна быть меньше 1000 руб".
Для этого в Rule Definition введите следующий код и кнопкой Test  проверьте его на ошибки:
Мы написали условие вывода сообщения, теперь нам надо написать само сообщение.Для этого зайдите во вкладку Failure Handling, и нажмите "+"  и в Message string  введите :"У {x} зарплата должна быть меньше 1000 руб".  {x} означает параметр, который вводится снизу. Напротив x в Token Message Expressions введите Ename(имя сотрудника). Вкладку Validation Execution трогать не будем, так как это правило выполняется для всех.

Запустим Oracle Component Browser  для проверки. И у объекта Empview1 в Sal введем 1001. Появится следующее сообщение:

Использование встроенных функций

Также в атрибутах и  проверках можно использовать следующие встроенные функции:
adf.currentDate -  текущая дата;
adf.currentDateTime - текущая дата и время;
adf.error.raise("") -вывод сообщения об ошибке;
adf.error.warn("") -вывод сообщения.

Более детально, но увы на английском языке о Groovy в Jdeveloper можно прочитать по этой ссылке : http://www.oracle.com/technetwork/developer-tools/jdev/introduction-to-groovy-128837.pdf