Выполнение 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;
Комментариев нет :
Отправить комментарий