Главная > Oracle e-Business Suite, SQL > Регистрация view в OEBS


Регистрация view в OEBS


Если зарегистрировать view в OEBS, указав следующие столбцы

  • START_DATE_ACTIVE
  • END_DATE_ACTIVE
  • ENABLED_FLAG

, то при использовании данной view в наборе значений автоматически будут отсекаться устаревшие данные.

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

  --------------------------------------------------------------------
  -- Зарегистрировать view
  PROCEDURE reg_view(p_appl_name   VARCHAR2, -- код приложения
                     p_view_name   VARCHAR2, -- имя view
                     p_description VARCHAR2  -- описание view
                     );

  --------------------------------------------------------------------
  -- Зарегистрировать view
  PROCEDURE reg_view(p_appl_name   VARCHAR2, /* код приложения */
                     p_view_name   VARCHAR2, /* имя view */
                     p_description VARCHAR2  /* описание view */
                     )
  IS
   l_appl_id number;
   l_view_id number;
   l_mess    varchar2(4000);
   l_marker  number; /* для отладки */
   g_no_validate_parameters exception;

   -- добавление колонки
   procedure add_column(p_name_column varchar2, p_seq         varchar2) is
    l_count number;
   begin
    -- проверка на существование столбца
    select count(1) into l_count
    from fnd_view_columns t
    where t.view_id = l_view_id
          and t.column_name = p_name_column;

    -- если не существует, то вставляем данные
    if (l_count = 0) then
      insert into fnd_view_columns
        (application_id,
         view_id,
         column_sequence,
         column_name,
         last_updated_by,
         last_update_date,
         last_update_login,
         creation_date,
         created_by)
      values
        (l_appl_id,
         l_view_id,
         p_seq,
         p_name_column,
         fnd_global.user_id,
         sysdate,
         fnd_global.login_id,
         sysdate,
         fnd_global.user_id);
    end if;

   end;

  BEGIN

    l_marker := 10;
    -- Validate Application
    begin
      select A.APPLICATION_ID
      into l_appl_id
      from FND_APPLICATION A
      where A.APPLICATION_SHORT_NAME = p_appl_name;
    exception
      when no_data_found then
        l_mess := 'Некорректный код приложения';
        raise g_no_validate_parameters;
    end;

    l_marker := 20;
    -- проверка на существование view
    begin
      select VIEW_ID into l_view_id
      from fnd_views
      where application_id = l_appl_id
            and VIEW_NAME = p_view_name;
    exception
      when no_data_found then
        l_view_id := -1;
    end;  

    l_marker := 30;

    -- загружаем заголовок view
    if (l_view_id = -1) then

      insert into fnd_views
        (application_id,
         view_id,
         view_name,
         text,
         description,
         last_updated_by,
         last_update_date,
         last_update_login,
         creation_date,
         created_by)
      values
        (l_appl_id,
         fnd_views_s.NEXTVAL,
         p_view_name,
         null,
         p_description,
         fnd_global.user_id,
         sysdate,
         fnd_global.login_id,
         sysdate,
         fnd_global.user_id) returning view_id into l_view_id;

    else

      update fnd_views set
         DESCRIPTION       = p_description,
         LAST_UPDATED_BY   = fnd_global.user_id,
         LAST_UPDATE_DATE  = sysdate,
         LAST_UPDATE_LOGIN = fnd_global.login_id
      where APPLICATION_ID = l_appl_id
            and view_id = l_view_id;

    end if;

    -- загружаем столбцы view    

    add_column('START_DATE_ACTIVE', '10');
    add_column('END_DATE_ACTIVE', '20');
    add_column('ENABLED_FLAG', '30');

  EXCEPTION
   WHEN g_no_validate_parameters THEN
     print('Error: '||l_mess);
     RAISE;
   WHEN others THEN
        print('EXCEPTION ' || SQLERRM || '; l_marker = '||l_marker);
        RAISE;
  END;

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

  1. Михаил
    16 Август 2013 в 10:05 | #1

    Очень полезно, спасибо!

    На My Oracle Support нашел информацию, что вопреки официальному гайду можно использовать стандартный API ad_dd.register_table и для регистрации view. При этом поля START_DATE_ACTIVE, END_DATE_ACTIVE, ENABLED_FLAG тоже будут нормально распознаваться в наборах значений (тестировал на R11). ID документа в MOS: 338777.1. Есть, конечно, минусы, что view будет забита в системе как таблица, зато можно избежать прямых insert в стандартные таблицы.

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