Архив

Архив раздела ‘OA Framework’

OAF: Передача параметра с кириллицей в URL

27 Октябрь 2014 Нет комментариев

Oracle Application Framework: Пример кода для передачи параметра с кириллицей в URL.

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import oracle.apps.fnd.framework.OANLSServices;
import oracle.apps.fnd.framework.server.OAApplicationModuleImpl;
...
OAApplicationModuleImpl am = (OAApplicationModuleImpl)pageContext.getApplicationModule(webBean);  
OANLSServices nls = am.getOADBTransaction().getOANLSServices();
           
try {
         pAssignmentSet = URLEncoder.encode(pAssignmentSet, nls.getJAVAClientEncoding());
     
    } catch (UnsupportedEncodingException e) {
        throw new OAException(e.getMessage());
    }
...

OAF: Поиск страниц с отключенной персонализацией

Запрос для поиска страниц или регионов OEBS OAF с отключенной персонализацией:

select *
from (select att.att_value base_path
            ,jdr_mds_internal.getDocumentName(pat.path_docid) custom_path
            ,regexp_replace(jdr_mds_internal.getDocumentName(pat.path_docid),
                            '.*/customizations/([[:alpha:]]*)/.*',
                            '\1') custom_level
            ,decode(regexp_replace(jdr_mds_internal.getDocumentName(pat.path_docid),
                                   '.*/customizations/([[:alpha:]]*)/.*',
                                   '\1'),
                    'site',
                    'SITE',
                    (regexp_replace(jdr_mds_internal.getDocumentName(pat.path_docid),
                                    '.*/customizations/([[:alpha:]]*)/([0-9A-Za-z_]*)/.*',
                                    '\2'))) custom_level_value
            ,nvl((select 'N'
                 from jdr_attributes cat
                 where cat.att_comp_docid = pat.path_docid
                       and cat.att_name = 'MDSActiveDoc'
                       and cat.att_value = 'false'),
                 'Y') is_active
            ,pat.created_by
            ,pat.creation_date
            ,pat.last_updated_by
            ,pat.last_update_login
            ,pat.LAST_UPDATE_DATE
      from jdr_paths pat
      join jdr_attributes att on (pat.path_docid = att.att_comp_docid)
      where att_comp_seq = 0
            and att_name = 'customizes'
      --and regexp_like( jdr_mds_internal.getDocumentName(path_docid), 'apps/(iby|fnd)' )
      )
where is_active = 'N'

Читать дальше про “OAF: Поиск страниц с отключенной персонализацией” »

OAF: Вывести список VO и значения атрибутов

22 Август 2013 Нет комментариев

Вывести все View Objects (VO) и значения атрибутов для OAApplicationModule

    // Вывод всех значений VO
    public void printALLVO(OAApplicationModule am)
    {
      OADBTransaction tr = am.getOADBTransaction();
      if(tr.isLoggingEnabled(1)) 
      {
        tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " ",1);
        tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " AM "+am.getName(), 1);
      }
      String[] rootViewNames = am.getViewObjectNames();
      if(tr.isLoggingEnabled(1)) 
      {  
        tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " count of VOs from AM = " +rootViewNames.length,1 );
      }
      for (int j =0 ;j < rootViewNames.length ;j++ )
      {
        if(tr.isLoggingEnabled(1)) 
        {  
          tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " ",1);
          tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", "================",1);
          tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " VO "+rootViewNames[j],1 );
        }
     
        oracle.jbo.ViewObject lVO = (oracle.jbo.ViewObject)am.findViewObject(rootViewNames[j]);
        if (lVO!=null && lVO.isExecuted()) {
          oracle.jbo.server.ViewRowImpl lVORow;
          int numRow = 1;
          for(lVORow = (oracle.jbo.server.ViewRowImpl)lVO.first(); lVORow != null;
              lVORow = (oracle.jbo.server.ViewRowImpl)lVO.next())
          {
              if (lVORow!=null) {
                  int attrCount = lVORow.getAttributeCount();
                  if(tr.isLoggingEnabled(1)) 
                  {              
                    tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " ",1);
                    tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " [row "+numRow+"]",1);
                    tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " count of attributes = "+attrCount,1);
                  }
     
                  String[] attributeNames = lVORow.getAttributeNames();
                  for (int i = 0 ;i< attributeNames.length ;i++ )
                  {
                    if(tr.isLoggingEnabled(1)) 
                    {              
                      tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", attributeNames[i]
                      +" = "
                      +lVORow.getAttribute(i),1);
                    }
                  }
              }
              numRow ++;
          }
          if (numRow==1) {
            if(tr.isLoggingEnabled(1)) 
            {          
              tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " not exists rows",1);
            }
          }
        }
        else {
          if(tr.isLoggingEnabled(1)) 
          {                
            tr.writeDiagnostics(this.getClass().getName() + ".printALLVO XX", " not executed",1);
          }
        }
      }              
     
    }

Цикл по вложенным Application Modules (текущий AM не входит во вложенные AM)

String nestedAMArray[]=oapagecontext.getRootApplicationModule().getApplicationModuleNames();
for(int i = 0; i < nestedAMArray.length; i++)
{
    String amName = nestedAMArray[i];
    OAApplicationModule amIter = (OAApplicationModule)am.findApplicationModule(amName);
    oapagecontext.writeDiagnostics(this,"Nested AM Name=>"+amName,1);
}    

OAF: Как получить дочерний Application Module

22 Август 2013 Нет комментариев

Пример получения дочернего Application Module (AM) из контроллера

// Возвращает дочерний AM по его названию
public static OAApplicationModule getRequestedAM(OAPageContext oapagecontext,
                                                 String requestedAMName
                                                )  
{  
  OAApplicationModule rootAM    = oapagecontext.getRootApplicationModule();
  OAApplicationModule currentAM = null;  
  oapagecontext.writeDiagnostics(oapagecontext, "XX find applicationModule = "
                                                +requestedAMName,1);  
  String amName = "";  
  String nestedAMArray[] = rootAM.getApplicationModuleNames();  
  oapagecontext.writeDiagnostics(oapagecontext,"XX Root AM = "
                                 + rootAM.getName()
                                 + "; count child AMs = "
                                 + nestedAMArray.length,1);  
  for(int i = 0; i < nestedAMArray.length; i++)  
  {  
      amName = nestedAMArray[i];  
      currentAM = (OAApplicationModule)rootAM.findApplicationModule(amName); 
      String originalAmName = currentAM.getDefName();
      oapagecontext.writeDiagnostics(oapagecontext,"XX nested AM name = "
                                     +originalAmName,1);  
      if (originalAmName.equals(requestedAMName)) {
        oapagecontext.writeDiagnostics(oapagecontext,"XX found nested AM " 
                                       + originalAmName ,1);  
        break;  
      }  
  }  
  return currentAM;  
}  

OAF R12 Developer’s guide

4 Декабрь 2012 1 комментарий

Весьма полезные гайды по Oracle Application Framework (OAF)

Ноты на металинке:
Oracle Application Framework Developer’s Guide Release 12.1.3 [ID 1107973.1]
Oracle Application Framework Developer’s Guide Release 12.1.2 [ID 972774.1]
Oracle Application Framework Developer’s Guide Release 12.1.1 [ID 744832.1]

У кого нет доступа, тот может взять
Oracle Application Framework Developer’s Guide Release 12.1.3 по ссылкам:
Depositfiles
Google Docs

Ant при разработке с использованием OAF

24 Апрель 2012 3 comments

При разработке проектов с использованием OAF и JDeveloper возникла необходимость частого переноса (или развертывания — deploy) приложений с одного экземпляра системы на другой.

Операция переноса состоит из пяти шагов:

  1. Компиляция java классов
  2. Перенос java классов на сервер приложений (в каталог $JAVA_TOP)
  3. Перенос xml файлов Entity Objects, View Objects, Application Modules ($JAVA_TOP)
  4. Импорт xml файлов Pages, Regions с помощью утилиты import
  5. Импорт xliff файлов

Проделав эту операцию пару раз вручную, решил все это дело автоматизировать.
Вся автоматизация построена на известном продукте Apache Ant.

Состоит из четырех файлов

  1. <project>.bat
  2. <project>.xml
  3. build.xml
  4. <project>.properties

, где <project> имя Вашего проекта.

Читать дальше про “Ant при разработке с использованием OAF” »

JBO-25009: Невозможно создать объект типа:oracle.jbo.domain.Number

14 Сентябрь 2011 Нет комментариев

Если вы столкнулись с ошибкой JBO-25009, то вот вариант как ее быстро и успешно победить.

Получил ошибку на странице OAF:
US: JBO-25009: Cannot create an object of type:oracle.jbo.domain.Number
RU: JBO-25009: Невозможно создать объект типа:oracle.jbo.domain.Number

Решение:
На странице присутствовало поле xBean (тип messageChoice);
связанное с атрибутом ViewObject типа NUMBER.

Тип поля xBean был VARCHAR2, заменил его на NUMBER и все заработало успешно.

Создание страницы с таблицей данных

8 Август 2011 6 comments

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

Подготовка

1) Создаем новый проект или открываем существующий
Создание OAF проекта в JDeveloper


2) Создаем новый View Object (VO) или используем существующий
Создание View Object (VO) – только для просмотра данных



Читать дальше про “Создание страницы с таблицей данных” »

Создание View Object (VO) — только для просмотра данных

31 Май 2011 4 comments

Создадим View Object для следующего запроса

select empno,
       ename,
       job,
       mgr,
       hiredate,
       sal,
       comm,
       deptno
from scott.emp t
where t.deptno = 10;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7782 CLARK      MANAGER    7839 09.06.1981    2450.00               10
 7839 KING       PRESIDENT       17.11.1981    5000.00               10
 7934 MILLER     CLERK      7782 23.01.1982    1300.00               10

Номер департамента будем передавать в качестве параметра. VO будет только для просмотра данных, т.е. Entity Object создавать не будем.

Читать дальше про “Создание View Object (VO) — только для просмотра данных” »

OEBS Проблема с несколькими сессиями в IE8

25 Май 2011 5 comments

Для Internet Explorer 8 существует проблема с открытием нескольких форм OEBS под разными пользователями.
По умолчанию в IE8 включено свойство Session Merging, именно из-за этого и происходит скидывание пользователя.

Как включить поддержку нескольких сессий (2 способа):

1) Открываем новое окно через меню «File -> New Session» в существующем окне браузера



2) Добавляем опцию «-nomerge» для запуска IE8. С данной опцией можно запускать IE8 через командную строку или изменив свойства ярлыка.