Архив

Архив раздела ‘Oracle e-Business Suite’

Список значений профиля для всех уровней использования

18 Май 2011 3 comments

Получаем список значений профиля на разных уровнях используя скрипт SQLPlus.

set long 10000
set pagesize 500
set linesize 160
column SHORT_NAME format a30
column NAME format a40
column LEVEL_SET format a15
column CONTEXT format a30
column VALUE format a40

select p.profile_option_name short_name,
       n.user_profile_option_name NAME,
       decode(v.level_id,
              10001,
              'Site',
              10002,
              'Application',
              10003,
              'Responsibility',
              10004,
              'User',
              10005,
              'Server',
              10006,
              'Org',
              10007,
              decode(to_char(v.level_value2),
                     '-1',
                     'Responsibility',
                     decode(to_char(v.level_value),
                            '-1',
                            'Server',
                            'Server+Resp')),
              'UnDef') level_set,
       decode(to_char(v.level_id),
              '10001',
              '',
              '10002',
              app.application_short_name,
              '10003',
              rsp.responsibility_key,
              '10004',
              usr.user_name,
              '10005',
              svr.node_name,
              '10006',
              org.name,
              '10007',
              decode(to_char(v.level_value2),
                     '-1',
                     rsp.responsibility_key,
                     decode(to_char(v.level_value),
                            '-1',
                            (select node_name
                               from fnd_nodes
                              where node_id = v.level_value2),
                            (select node_name
                               from fnd_nodes
                              where node_id = v.level_value2) || '-' ||
                            rsp.responsibility_key)),
              'UnDef') "CONTEXT",
       v.profile_option_value VALUE
  from fnd_profile_options       p,
       fnd_profile_option_values v,
       fnd_profile_options_tl    n,
       fnd_user                  usr,
       fnd_application           app,
       fnd_responsibility        rsp,
       fnd_nodes                 svr,
       hr_operating_units        org
 where p.profile_option_id = v.profile_option_id(+)
   and p.profile_option_name = n.profile_option_name
   and upper(p.profile_option_name) in
       (select profile_option_name
          from fnd_profile_options_tl
         where upper(user_profile_option_name) like upper('%&user_profile_name%'))
   and usr.user_id(+) = v.level_value
   and rsp.application_id(+) = v.level_value_application_id
   and rsp.responsibility_id(+) = v.level_value
   and app.application_id(+) = v.level_value
   and svr.node_id(+) = v.level_value
   and org.organization_id(+) = v.level_value
 order by short_name, user_profile_option_name, level_id, level_set;

-- пример вывода данных
SQL> 

SHORT_NAME       NAME                            LEVEL_SET       CONTEXT         VALUE
---------------- ------------------------------- --------------- --------------- -------
AFLOG_LEVEL      FND: Debug Log Level            Site                            6
AFLOG_LEVEL      FND: Debug Log Level            User            USERNAME1       6
AFLOG_LEVEL      FND: Debug Log Level            User            USERNAME2       1
AFLOG_LEVEL      БОП: уровень журнала отладки    Site                            6
AFLOG_LEVEL      БОП: уровень журнала отладки    User            USERNAME1       6
AFLOG_LEVEL      БОП: уровень журнала отладки    User            USERNAME2       1

6 rows selected
Categories: Oracle e-Business Suite, SQL Tags:

Workflow: Установка параметров для процедуры

Для установки нужных параметров при  вызове процедуры из workflow, используем следующий метод.

1) Перетягиваем нужный атрибут на функцию





2) Заходим в свойства функции, вкладка Node Attributes, и устанавливаем значение

3) Доступ к значению атрибута получаем следующим образом

...
    l_val := WF_ENGINE.GetActivityAttrText(itemtype => p_itemtype,
                                           itemkey  => p_itemkey,
                                           actid    => p_actid,
                                           aname    => 'XX_VAL1');
...

Регистрация таблицы в OEBS

26 Февраль 2011 Нет комментариев

Для регистрации таблицы в OEBS, используем следующий скрипт.

DECLARE
  x_appl_short_name VARCHAR2(30) := 'APPL_NAME';
  x_appl_table_name VARCHAR2(30) := 'TABLE_NAME';
BEGIN
  --ad_dd.delete_table(x_appl_short_name, x_appl_table_name);
  ad_dd.register_table(x_appl_short_name, x_appl_table_name, 'T');
  FOR cur_sh IN ( SELECT * FROM dba_tab_columns t
                  WHERE t.OWNER = x_appl_short_name
                        AND t.TABLE_NAME = x_appl_table_name
                ) LOOP
      AD_DD.delete_column(x_appl_short_name, x_appl_table_name, cur_sh.column_name);
      AD_DD.REGISTER_COLUMN ( x_appl_short_name,
                              x_appl_table_name,
                              cur_sh.column_name,
                              cur_sh.column_id,
                              cur_sh.data_type,
                              cur_sh.data_length,
                              cur_sh.nullable,
                              'N' );
  END LOOP;
END;
/
Справка. Просмотреть таблицу в OEBS мы можем через полномочия Application Developer.
Меню «Application — Database — Table«

Query Region в OA Framework

25 Январь 2011 Нет комментариев


Используя Query Region (OAQueryBean) мы можем использовать различные виды поиска для таблицы.

Когда мы добавляем query region на страницу, OA Framework автоматически создает OAQueryBean связанный с дочерними Table, Advanced table или HGrid используя различные комбинации simple search, advanced search и view панелей.

Читать дальше про “Query Region в OA Framework” »

Personalization in Oracle Apps Framework

21 Январь 2011 Нет комментариев

Персонализация Oracle Application Framework (OAF) позволяет гибко настраивать любую OA Framework страницу.

Справка:Следует помнить, что страницы которые создаются динамически или элементы страницы добавленные программно и не описаны  в метаданных OA Extension, не могут быть персонализированы.

Первоначально страница строится на основе базовых метаданных. Это означает, что перед применением наших настроек, сначала применяются базовые настройки, и только после этого применяются наши. Базовые настройки страницы мы не можем менять или удалять, благодаря этому как бы мы не напортачили с нашими настройками, мы всегда можем их удалить и страница примет первоначальный вид.

Кастомную персонализацию мы можем выгружать в отдельный файл (или загружать из файла). Данный файл содержит не всю структуру метаданных страницы, а только отличия от базовых метаданных. Так же нашу персонализацию мы может отключать/включать при необходимости.

Читать дальше про “Personalization in Oracle Apps Framework” »

Список установленных патчей Oracle (OEBS)

14 Январь 2011 Нет комментариев

Для просмотра патчей Oracle E-Business Suite applications (OEBS) используем следующие 2 таблицы:

  • AD_APPLIED_PATCHES — список патчей, которые были применены напрямую
  • AD_BUGS — список всех патчей которые были применены напрямую или из набора



Пример запроса:

SELECT *
  FROM ad_bugs
 WHERE bug_number = 'patch_number';

SELECT *
  FROM ad_applied_patches
 WHERE patch_name = 'patch_number';

Генерация DDL для объектов БД

11 Январь 2011 Нет комментариев

Начиная с Oracle 9i появился пакет DBMS_METADATA, который позволяет пользователям получать метаданные о любых объектах (таблицах, индексах, процедурах и т.д.) всего лишь за одно обращение.

1) GET_DDL — возвращает метаданные объъекта как DDL

SELECT object_type,
       object_name,
       dbms_metadata.get_ddl(object_type, object_name, owner) as ddl_code
  FROM dba_objects t
 WHERE t.object_type = 'TABLE'
   and rownum <= 10;

Читать дальше про “Генерация DDL для объектов БД” »

Просмотр количества открытых курсоров для сессий

23 Декабрь 2010 Нет комментариев

Узнать кто активно грузит базу большим количеством курсоров, можно следующим запросом

select a.value,
       s.program,
       s.username,
       s.sid,
       s.serial#,
       s.client_identifier
from v$sesstat  a, 
     v$statname b, 
     v$session  s
where a.statistic# = b.statistic#
      and s.sid = a.sid
      and b.name = 'opened cursors current'
order by 1 desc;

OAF: Правила разработки

No Правило/Причина
1 Всегда пытайтесь создать новый элемент декларативно (через персонализацию страницы). Определяйте программно, Только если невозможно создать декларативно.
Программно созданный элемент невозможно персонализировать, сложнее расширять и использовать.
2 Если вы создаёте новый элемент программно, Никогда не использовать конструктор

new OA*Bean(). Всегда использовать createWebBean.

Не все свойства элемента инициализируются корректно, когда используется конструктор new
3 Никогда не искать элемент по индексу, для изменения его свойств.
Индекс элемента может изменяться в процессе работы.
4 Никогда не изменять свойства элемента в processFormRequest(). Всегда изменять свойства в processRequest(). Любая информация, которая влияет на отображение элемента, должна быть добавлена в URL в виде параметра.
Гарантирует постоянное состояние при формировании страницы.
5 Никогда не изменяйте свойства родительского элемента из дочернего.
Эта плохая практика препятствует повторному использованию кода.
6 Для доступа к методу, имеющему разные версии [ например setText(String text) или setText(OAPageContext pageContext, String text)],  всегда используйте метод в котором присутствует параметр OAPageContext.
Обеспечивает наиболее безопасный способ изменения объекта.
7 Никогда программно не использовать неявную структуру созданную OA Framework.

Выполнять findChildRecursive() для поиска элементов.

Определённые элементы — defaultRenderers, PageLayoutBean, TableBean – создают добавочные объекты. Эти объекты могут меняться в разных версиях, вы не можете достоверно распарсить данную структуру.
8 Когда необходим доступ к Application module, использовать getApplicationModule(webBean) вместо getRootApplicationModule() там где это возможно.
Улучшает модульность и повторное использование.
9 При переходе на первую страницу определенного функционала, всегда использовать функцию меню, вместо прямой сслыки на страницу.
Позволяет изменять адресс назначения меняя только описание функции. Не требуется изменение и перекомпиляция кода.
10 Никогда не создавать программно OAFormBean.
Страница должна иметь только один OAFormBean и он определяется декларативно для региона pageLayout
11 Всегда устанавливать точность (размер) для всех колонок view objecs (VO).

Всегда указывать точность вызывая registerOutParameters.

Например: eсли не установить точность, то для колонки типа String размер по умолчанию 4KB.
12 Всегда использовать Oracle-style binding (:1, :2)  и не использовать JDBC style binding (?).
Это отменяет разбор SQL во время выполнения для замены строковых значений.
13 Всегда используйте спроектированные VO вместо динамических (программно созданных).
Динамические VO осуществляют дополнительный вызов для разбора запроса и возможный результат может иметь различные комбинации.
14 Никогда не рассчитывать, что Application module будет использовать одно соединение с БД для запросов.
Для быстродействия, Framework организует пул соединений и переиспользует их. Не держит одно соединение в течении жизни Application module.


Модуль PA (Проекты) — полезные запросы

Список проектов

select * from pa.pa_projects_all;


Просмотр позиций поставки

select * from pa.pa_proj_elements t where t.OBJECT_type = 'PA_DELIVERABLES';
select * from pa_deliverables_v;
select * from oke_deliverables_b where source_code = 'PA';


Просмотр типов позиций поставки

select * from pa.pa_task_types t where t.object_type = 'PA_DLVR_TYPES';


Просмотр статусов позиций поставки

select * from pa.pa_project_statuses s
 where 1 = 1
       and s.status_type = 'DELIVERABLE'
       and trunc(sysdate) between nvl(s.start_date_active, trunc(sysdate)) and
                                  nvl(s.end_date_active, trunc(sysdate));


Список задач

select * from pa.pa_proj_elements t where t.OBJECT_type = 'PA_TASKS';


Типы задач

select * from PA_TASK_TYPES t where object_type = 'PA_TASKS';


Типы проектов

select * from PA_PROJECT_TYPES_ALL t;


Статьи затрат

select * from pa_expenditure_types_desc_v;