Выполнение PL/SQL кода, инициируемого бизнес-событием.
Создание БС и подписки аналогично предыдущему примеру: повторяем для нового БС Шаг 1 и Шаг 3. Создание подписки отложим, для того чтобы cначала реализовать нашу функцию на PL/SQL. Стандратный WF API предусматривает следующую структуру:
В Шаге 4 выбираем Custom, т.е. реализацию пользовательской бизнес-логики:
Далее указываем PL/SQL функцию

Создание БС и подписки аналогично предыдущему примеру: повторяем для нового БС Шаг 1 и Шаг 3. Создание подписки отложим, для того чтобы cначала реализовать нашу функцию на PL/SQL. Стандратный WF API предусматривает следующую структуру:
function f_custom(p_subscription_guid in raw,
p_event in out nocopy wf_event_t
) return varchar2
is
l_attr1 number;
l_attr2 varchar2(150);
l_attr3 varchar2(30);
begin
-- получение параметров
l_attr1 := p_event.getValueForParameter('p_attr1');
l_attr2 := p_event.getValueForParameter('p_attr2');
l_attr3 := p_event.getValueForParameter('p_attr3');
/* какой-то код */
return 'SUCCESS';
exception when others then
WF_EVENT.setErrorInfo(p_event, 'ERROR');
return 'ERROR';
end add_element;
Получение параметров осуществляется с помощью метода p_event.getValueForParameter(<name>).В Шаге 4 выбираем Custom, т.е. реализацию пользовательской бизнес-логики:
Далее указываем PL/SQL функцию
Шаг 5. Инициирование бизнес-события через Workflow PL/SQL API:
declare
-- структура с параметрами
prm_list wf_parameter_list_t;
l_prm1 varchar2(255);
l_prm2 number;
begin
-- добавление параметров
WF_EVENT.AddParameterToList( p_name => 'p_attr1',
p_value => 10,
p_parameterlist => prm_list
);
WF_EVENT.AddParameterToList( p_name => 'p_attr2',
p_value => 'A',
p_parameterlist => prm_list
);
WF_EVENT.AddParameterToList( p_name => 'p_attr3',
p_value => 'Z',
p_parameterlist => prm_list
);
/* p_event_key - идентификатор бизнес-события
Если повторится дважды, событие просто не отработет */
WF_EVENT.RAISE(p_event_name => 'oracle.xxxx.test.events.plsql'
,p_event_key => 'ACCOKey1' || to_char(sysdate, 'DD.MM.YYYY HH24:MI:SS')
,p_parameters => prm_list
);
end;
Комментариев нет :
Отправить комментарий