Архив

Архив автора

Workflow: Пример вызываемой процедуры

21 Октябрь 2010 1 комментарий
  procedure XX_TEST( itemtype  IN  VARCHAR2
                   , itemkey   IN  VARCHAR2
                   , actid     IN  NUMBER
                   , funcmode  IN  VARCHAR2
                   , resultout OUT VARCHAR2
                   )
  is
    l_proj_element_id NUMBER;
    --
    l_marker NUMBER; -- служит для обозначения шага
  begin

    l_marker := 10;

    xxdebug('XX_TEST');
    xxdebug('itemtype = '||itemtype  ,'itemkey = ' ||itemkey);
    xxdebug('actid = '   ||actid     ,'funcmode = '||funcmode);
    xxdebug('--');

    -- Проверяем статус workflow
    IF funcmode != WF_ENGINE.ENG_RUN THEN
      wf_log_pkg.string(5,'XX_TEST','Not in RUN mode');
      xxdebug_error('funcmode = '||funcmode);
      RETURN;
    END IF;

    -- далее основная логика процедуры

    -- получаем ID позиции поставки
    l_proj_element_id := WF_ENGINE.GetItemAttrText ( itemtype => itemtype
                                                   , itemkey  => itemkey
                                                   , aname    => 'PROJ_ELEMENT_ID' );

    xxdebug('proj_element_id='||l_proj_element_id);
    l_marker := 20;

    -- устанавливаем нового владельца
    WF_ENGINE.SetItemAttrText(itemtype, itemkey, 'NEW_DELIV_OWNER_ID', 141);

    resultout := WF_ENGINE.ENG_COMPLETED;
    RETURN;

  EXCEPTION
    WHEN OTHERS THEN
      xxdebug_error(SQLERRM, 'marker = '||l_marker);
      WF_CORE.context ( g_pkg_name
                      , 'XX_TEST'
                      , itemtype
                      , itemkey
                      , TO_CHAR(actid)
                      , funcmode
                      , SQLERRM
                      , 'marker = '||l_marker );
      RAISE;
  END;
Categories: Workflow Tags: ,

Что такое Oracle Application Framework (OAF)

13 Октябрь 2010 15 comments

Oracle Application Framework (OA Framework) – служит для разработки и кастомизации HTML страниц Oracle E-Business Suite.

OA Framework основан на стандарте J2EE и использует шаблон проектирования Model–View-Controller (MVC).


Model – отвечает за бизнесс логику, использует Oracle Business Components for Java (BC4J) : AM (Application Module), VO (View Object), EO (Entity Object)

View — отвечает за отображение информации (пользовательский интерфейс).

Controller — интерпретирует данные, введённые пользователем, и информирует модель и представление о необходимости соответствующей реакции. Прочитать больше про контроллер.

PL/SQL Developer: Start debugger

29 Сентябрь 2010 Нет комментариев

Если при старте дебагера в окне Test выскакивает ошибка

необходимо зайти с правами админа и выполнить

grant debug connect session to user;
Categories: Others Tags: ,

Модуль INV — Связь позиции с категорией

29 Сентябрь 2010 Нет комментариев
SELECT msi.organization_id,
       msi.inventory_item_id,
       msi.segment1,
       msi.description,
       mic.category_set_name,
       mic.segment1,
       mic.segment2
FROM mtl_system_items_vl   msi,
     mtl_org_assign_v      moa,
     mtl_item_categories_v mic
WHERE moa.organization_id = msi.organization_id
      AND moa.inventory_item_id = msi.inventory_item_id
      AND mic.organization_id = msi.organization_id
      AND mic.inventory_item_id = msi.inventory_item_id
      AND moa.assigned_flag = 'Y'
order by msi.organization_id, msi.inventory_item_id;

Workflow: Отправка уведомления

15 Сентябрь 2010 34 comments

Данная статья описывает процесс создания workflow процесса для отправки уведомления.

Версия Oracle Workflow Builder 2.6.3.5

1 Создание нового Workflow

Открываем Oracle Workflow Builder

Читать дальше про “Workflow: Отправка уведомления” »

Workflow: WFLOAD (утилита загрузки)

7 Сентябрь 2010 Нет комментариев

Утилита WFLOAD позволяет перемещать данные workflow между файлом и базой данных.

DOWNLOAD

Копирует файл на сервер приложений.

WFLOAD username/password 0 Y DOWNLOAD XX_TEST.wft XX_TEST

UPGRADE

Загружает файл в БД.

WFLOAD username/password 0 Y UPGRADE XX_TEST.wft
Categories: Workflow Tags: ,

Workflow: Ошибка при попытке коннекта к базе (1300)

7 Сентябрь 2010 Нет комментариев

symptom: Error when loading workflow from the database
symptom: 1300: Could not load.
symptom: 1114: Could not load from database.
symptom: 1101: Could not load item types from database. FILTER=%
symptom: 333: Could not set item type properties for ‘FNDCMSTD’.
symptom: 333: Could not set item type properties for ‘FNDCMSTD’.
symptom: 306: Invalid display name ‘Hintergrundmanager — Funktionen ‘.
symptom: 203:Value contains leading or trailing spaces
symptom: Trailing spaces exist in table WF_ITEM_TYPES_TL

Решение

1) Проверить таблицу WF_ITEM_TYPES_TL на существование замыкающих пробелов в столцах DISPLAY_NAME и DESCRIPTION
2) Если пробелы присутствуют выполнить update

   update WF_ITEM_TYPES_TL
   set DISPLAY_NAME = RTRIM(DISPLAY_NAME);

   update WF_ITEM_TYPES_TL
   set DESCRIPTION = RTRIM(DESCRIPTION);

Функция PERCENTILE_DISC

3 Сентябрь 2010 Нет комментариев

Функция принимает на вход процентное значение (P) и условие сортировки, возвращает элемент из набора — наименьшее значение функции CUME_DIST, которое больше или равно значению P.

PERCENTILE_DISC(expr) WITHIN GROUP
   (ORDER BY expr [ DESC | ASC ])
   [ OVER (query_partition_clause) ]

Пример

with t as
(select 1 id, 10 val  from dual
  union all
 select 2 id, 20 val  from dual
  union all
 select 3 id, 30 val  from dual
  union all
 select 4 id, 50 val  from dual
  union all
 select 5 id, 70 val  from dual
)
select  id,
        val,
        cume_dist() over (order by val) "Cume_Dist",
        percentile_disc(0.50) within group (order by val) over() "percentile_disc"
from t
order by val;

        ID        VAL  Cume_Dist percentile_disc
---------- ---------- ---------- ---------------
         1         10        0,2              30
         2         20        0,4              30
         3         30        0,6              30
         4         50        0,8              30
         5         70          1              30
Categories: SQL Tags: ,

Функция CUME_DIST

3 Сентябрь 2010 Нет комментариев

Аналитический вариант

CUME_DIST( ) OVER ( [ query_partition_clause ] order_by_clause )

Функция CUME_DIST рассчитывает кумулятивное распределение значения в наборе данных. Возвращаемое значение находится в диапазоне от 0 до 1. Функция на вход принимает числовой тип данных, или тип данных, который может неявно преобразовать в числовой.

Читать дальше про “Функция CUME_DIST” »

Определение строк со смешанными языками (русские и английские буквы)

2 Сентябрь 2010 Нет комментариев

Вытаскиваем записи, у которых есть хотя бы одна нерусская буква

with t as
(
 select 1 id, 'Сидоров' s from dual
  union all
 select 2, 'Cидoров' from dual
  union all
 select 3, 'Пирогов' from dual
)
select * from t t0
where soundex(t0.s) is not null;

        ID S
---------- -------
         2 Cидoров

Предположительные совпадения (Пирогов добавлен для показательности неточности подхода)

with t as
(
 select 1 id, 'Сидоров' s from dual
  union all
 select 2, 'Cидoров' from dual
  union all
 select 3, 'Пирогов' from dual
)
select * from t t0, t t1
where UTL_MATCH.JARO_WINKLER_SIMILARITY(t0.s,t1.s)>=70
      and soundex(t0.s) is null
      and soundex(t1.s) is not null
      and t0.id<>t1.id;

        ID S               ID S
---------- ------- ---------- -------
         1 Сидоров          2 Cидoров
         3 Пирогов          2 Cидoров

Простой translate для вытаскивания совпадающих написаний

with t as
(
 select 1 id, 'Сидоров' s from dual
  union all
 select 2, 'Cидoров' from dual
  union all
 select 3, 'Пирогов' from dual
)
select * from t t0, t t1
where translate(t1.s,'AaBbCcEegHKkMmOoPpTuXxy','АаВьСсЕедНКкМтОоРрТиХху')=t0.s
      and t0.id<>t1.id;

        ID S               ID S
---------- ------- ---------- -------
         1 Сидоров          2 Cидoров

Вывести данные в одном языке (латиница или кирилица) + цифры и знак подчёрка:

with t as
(
 select 'Сидоров' val from dual
  union all
 select 'Cидoров' from dual
  union all
 select 'Пирогов' from dual
  union all
 select 'ASD_1' from dual 
  union all
 select 'ASD_1Я' from dual  
)
select val from t
where regexp_like(val, '^([A-z]|[0-9]|_)+$') or regexp_like(val, '^([А-я]|[0-9]|_)+$')
/

VAL
-------
Сидоров
Пирогов
ASD_1