воскресенье, 24 мая 2015 г.

Использование MetaDataServices (MDS) в ADF (Using MetaDataServices in ADF)

Давным давно, я писал о ADF Security(Использование ADF Security в Oracle JDeveloper 12c ). 
После той статьи, я хотел рассказать о кастомизации приложения для пользователей, но забыл)
Исправляюсь : )
В этой статье я расскажу как кастомизировать и персонализировать наше приложение.  То есть сделаю так, что бы каждый отдельный пользователь приложения мог настроить форму под себя. Для этого нужно выполнить несколько  пунктов:
  1. Создать кастомизационные классы
  2. Включить кастомизацию в приложении
  3. Прописать кастомизационные файлы в  adf-config.xml  и при необходимости установить ограничения для кастомизации
Для кастомизации в ADF используется MetaDataServices (MDS). MDS  -  это хранилище, в котором можно хранить множество  метаданных. Например :
  • Взаимодействие с пользвователем (наш случай это кастомизация компонентов)
  • Управление бизнесс процесами (данные связанные с BPEL и BPM)
  • Конфигурационные файлы 
  • Веб сервисы (WSDL файлы, XML схемы, трансформации)

Более подробно о MDS можно прочитать здесь: http://www.oracle.com/technetwork/developer-tools/jdev/metadataservices-fmw-11gr1-130345.pdf

Приступим.

1.Создайте  кастомизационный файл (Java Class).


Расшарьте его классом oracle.mds.cust.CustomizationClass






Замените данные внутри класса на:

package by.perevertkin.mds.cc;
import oracle.adf.share.ADFContext;
import oracle.adf.share.security.SecurityContext;
import oracle.mds.core.MetadataObject;
import oracle.mds.core.RestrictedSession;
import oracle.mds.cust.CacheHint;
import oracle.mds.cust.CustomizationClass;
public class Customization extends CustomizationClass {
private String mLayerName;
public Customization() {
super();
}
@Override
public CacheHint getCacheHint() {
return CacheHint.ALL_USERS;
}
@Override
public String getName() {
return mLayerName;
}
@Override
public String[] getValue(RestrictedSession restrictedSession, MetadataObject metadataObject) {
ADFContext adfCtx = ADFContext.getCurrent();
SecurityContext secCntx = adfCtx.getSecurityContext();
String user = secCntx.getUserName();
return new String[] { user };
}
}




У этого класса 2 основные функции:
  • getName() - возвращает название папки в которой хранятся все пользовательские изменения.
  • getValue() - возвращает название папки для вошедшего пользователя. Название папки должно быть уникальное и будет сохранено в getName() папке

2. Включите кастомизацию в свойствах вашего ViewController проекта. Для этого нужно поставить галочку Enabled seeded customizations и Enable User Customizations( выбрать Across Sessions using MDS) в ADF view:



3. Теперь  нужно прописать кастомизационный файл, и выбрать компоненты которые вы хотите кастомизировать





Для тестирования локально  нужно не запускать приложение, а запустить Integrated Server и задеплоить туда приложение. При удачной настройке, при деплое появится окно в котором нужно указать  раздел в который вы деплоите MDS и название репозитория.


Кастомизация работает. И если зайти в EM, то можно заметить, что создан необходимый раздел.


После того как вы кастомизировали приложение, часто возникает необходимость редактирования или удаления кастомизации. В далеких 2012-х  Andrejus Baranovskis создал task-flow который с легкостью можно добавить в любой ADF и Webcenter Portal проект



Рабочее прилажение на GitHub: https://github.com/JealousyM/mds-adf

Описание работы с MDS в ADF на сайте Oracle: https://docs.oracle.commmiddleware/1212/adf/ADFFD/customize.htm#ADFFD2079

Так же можно почитать о использовании mds в Oracle SOA Suite у сурового челябинского программиста: http://samolisov.blogspot.com.by/2011/11/oracle-mds.html