Главная > Oracle e-Business Suite > ОЕБС Расширенный скрипт инициализации сессиии


ОЕБС Расширенный скрипт инициализации сессиии

ОЕБС Инициализация сессии
ОЕБС Расширенный скрипт для инициализации сессии:

  • Выводит в output короткую запись для инициализации.
  • Если не заданы полномочия или приложение, то выводит в output список назначенных пользователю полномочий.
declare
 l_lang           varchar2(2)   := 'RU';
 l_user_name      varchar2(100) := 'AOSTAPISHEN';
 l_resp_name      varchar2(400);
 l_resp_appl_name varchar2(400);
 -- ------------------------------------------------------------------
 l_user_id        NUMBER;
 l_resp_id        NUMBER;
 l_resp_appl_id   NUMBER;
 l_appl_code      VARCHAR2(10);
 l_org_id         NUMBER;
 l_mo_sec_profile NUMBER;
 l_mo_product     number;
begin
 
 -- l_resp_name := 'Управление активами предприятия';
 -- l_resp_name := 'Диспетчер Дебиторов';
 -- l_resp_name := 'Разработчик приложений';
 -- l_resp_name := 'Движение денежных средств: суперпользователь';
 
 -- l_resp_appl_name := 'Управление активами предприятия';
 -- l_resp_appl_name := 'Главная книга';
 -- l_resp_appl_name := 'Дебиторы'
 -- l_resp_appl_name := 'Кредиторы';
 -- l_resp_appl_name := 'Движение денежных средств';
 -- l_resp_appl_name := 'Библиотека объектов приложений';
 
   select user_id into l_user_id from fnd_user t where user_name like l_user_name; 
 
   if (l_resp_name is null or l_resp_appl_name is null) then
 
     for i in (
                 SELECT ap.application_short_name as appl_code,
                        a.application_name        as appl_name,
                        r.responsibility_name     as resp_name,
                        r0.responsibility_key,
                        --
                        max(length(a.application_name )) over() as length_appl_name
                  FROM fnd_user u,
                       fnd_user_resp_groups g,
                       fnd_application_tl a,
                       fnd_responsibility_tl r,
                       fnd_responsibility    r0,
                       fnd_application       ap
                 WHERE g.user_id(+) = u.user_id
                   AND g.responsibility_application_id = a.application_id
                   AND a.application_id = r.application_id
                   AND g.responsibility_id = r.responsibility_id
                   and a.language = l_lang
                   and ap.application_id = a.application_id
                   and r.language = l_lang
                   and u.user_name = l_user_name
                   and r.responsibility_name <> 'Диагностика приложения'
                   and r.responsibility_name = nvl(l_resp_name,r.responsibility_name)
                   and a.application_name = nvl(l_resp_appl_name,a.application_name)
                   and r0.responsibility_id = r.responsibility_id
 
                 ORDER BY appl_name, resp_name
               )
     loop
       dbms_output.put_line(rpad('l_resp_appl_name := '''||i.appl_name||'''',i.length_appl_name+22,' ') || ' ; l_resp_name := '''||i.resp_name||''';');
       dbms_output.put_line(rpad('appl_code := '''||i.appl_code||'''',i.length_appl_name+22,' ') || ' ; responsibility_key := '''||i.responsibility_key||''';');
     end loop;
 
   else
  
     select b.application_id, b.application_short_name into l_resp_appl_id, l_appl_code
     from fnd_application_tl t
         ,fnd_application    b
     where 1=1
           and t.application_name like l_resp_appl_name
           and t.language = l_lang
           and b.application_id = t.application_id;
            
     select t.responsibility_id into l_resp_id from fnd_responsibility_tl t 
     where t.responsibility_name like l_resp_name and t.language = l_lang and t.application_id = l_resp_appl_id;
 
     l_org_id := fnd_profile.VALUE_SPECIFIC(NAME => 'ORG_ID', RESPONSIBILITY_ID => l_resp_id, APPLICATION_ID=> l_resp_appl_id);
 
     fnd_global.apps_initialize( user_id      => l_user_id,
                                 resp_id      => l_resp_id,
                                 resp_appl_id => l_resp_appl_id
                               );
                               
     SELECT count(1) into l_mo_product FROM fnd_mo_product_init mpi where mpi.application_short_name = l_appl_code and nvl(mpi.status, 'N') = 'Y';                             
     
     if (l_mo_product = 1) then
       begin
         MO_GLOBAL.init(l_appl_code);
   
         if (l_org_id is not null) then
           mo_global.set_policy_context('M',l_org_id);
         end if;
   
         l_mo_sec_profile := fnd_profile.value('XLA_MO_SECURITY_PROFILE_LEVEL');
   
         mo_global.set_org_context(l_resp_id,l_mo_sec_profile,l_appl_code);
       exception
         when others then
           dbms_output.put_line('SQLERRM:'||SQLERRM||chr(10));
           dbms_output.put_line('FORMAT_ERROR_BACKTRACE:'||chr(10)||dbms_utility.format_error_backtrace);
       end;
 
       dbms_output.put_line('begin'||chr(10)||' fnd_global.apps_initialize('||l_user_id||', '||l_resp_id||', '||l_resp_appl_id||'); --'||l_resp_name||' - '||l_resp_appl_name
                            ||chr(10)||' mo_global.init('''|| l_appl_code||''');'
                            ||case when l_org_id is not null then chr(10)||' mo_global.set_policy_context(''M'','||l_org_id||');' end
                            ||chr(10)||' mo_global.set_org_context('||l_resp_id||', '||l_mo_sec_profile||', '''||l_appl_code||''');'
                            ||chr(10)||'end;');
     else
       dbms_output.put_line('begin'||chr(10)||' fnd_global.apps_initialize('||l_user_id||', '||l_resp_id||', '||l_resp_appl_id||'); --'||l_resp_name||' - '||l_resp_appl_name
                            ||chr(10)||'end;');       
     end if;                            
   end if;
end;

Похожие записи:

  1. Илдар
    15 Декабрь 2012 в 16:19 | #1

    допиши ещё, что нужно сделать, дабы сымитировать конкаррент-сессию, и ваще красота.
    А то некоторые АПИ (автоучёт внутри создания транзакции дебиторов) валятся, если не из конкаррента запускать…

  2. Алексей Крутских
    31 Январь 2014 в 12:34 | #2

    Скрипт не работает, вначале он предлагает мне ввести русское название приложение: Управление складом (берет его с фильтрацией строго по языку RU), но в дальнейшем по русскому названию не находит в таблице fnd_application_all_view.. Приходится писать в параметрах запроса

    resp_appl_name := ‘Warehouse Management’;

    Наверное для надежности стоит использовать application_short_name.

    Кстати у меня в профиле стоит Английский

    Скрипт требует доработки :)

  3. 7 Октябрь 2014 в 09:01 | #3

    @Алексей Крутских
    Спасибо, подправил работу с lang.

  1. Пока что нет уведомлений.