2014-06-01
BaoXinjian
一、摘要
Workflow中有一块比较重要内容就是bussiness event,
Oracle
业务时间系统,就是一个消息产生和消费的过程,Oracle打算使用它作为系统集成,源系统产生数据,分装为业务事件,送给目标系统
比如,客户在系统架构时,EBS对supplier的任何修改,都需要抛转至另外一个外接的supplider管理系统,可要要求是即时的,即修改后就发送,而不是异步处理,如果是异步通过db
link会更好
实现该需求有很多种技术
如database trigger,但是有可能会产生性能问题
如application alter,其实质也是在database中建立trigger
另外一种就是workflow的business event
因为business
event是一种异步处理机制,如果以transaction需要处理很多业务,系统可以把消息定制和发送,独立出来,作为一个消息定制的做法,产生异步消息处理,就可以对一个transaction的业务处理的数量较少一部分
比如所,在supplier-init / site-init /contact -
init通过API和Interface导入时,系统都会调用business
event(oracle.apps.ap.supplier.event),发送一个供应商被修改的消息给通道】
二、案例
需求:在供应商supplier的任何修改包括建立、删除、更新,都需通过标准的supplier change business
event去监控,并将信息记录至客制化的log表中
1. 查询到该标准Even
(oracle.apps.ap.supplier.event)
2. Update
Subscription
3. Update Subscription Header,
设定Execuation Condition 和 Action Type
4. Update
Subscription Detail, 设定该Event的action为PLSQL或为Workflow
5. 建立PLSQL Function,必须有两个参数 p_subscription_guid &
p_event
6.1. 手工测试通过Event Test功能,直接Raise Event
6.2. 手工测试通过Event Test功能, 输入Event Key
6.3. 手工测试通过Event Test功能, 查看table中的变化
7.1. 手工测试建立Supplier触发Event
7.2. 手工测试建立Supplier触发Event,查看table结果
8.1. 测试Event Parameter,调用Event时建立手工参数
8.2. 测试Event Parameter,查看table确认结果
三、案例实现
1. 查询到该标准Even (oracle.apps.ap.supplier.event)
2. Update Subscription
3 Update Subscription Header, 设定Execuation Condition 和 Action
Type
4. Update Subscription Detail,
设定该Event的action为PLSQL或为Workflow
5. 建立PLSQL Function,必须有两个参数 p_subscription_guid &
p_event
1 FUNCTION test_event(p_subscription_guid IN raw,
2
3 p_event IN OUT NOCOPY wf_event_t)
4
5 RETURN VARCHAR2 IS
6
7 l_parameter_list wf_parameter_list_t := wf_parameter_list_t();
8
9 l_parameter_t wf_parameter_t := wf_parameter_t(null, null);
10
11 i_parameter_name l_parameter_t.name%type;
12
13 i_parameter_value l_parameter_t.value%type;
14
15 i pls_integer;
16
17 BEGIN
18
19 DELETE FROM xxbxj_wf_event;
20
21 l_parameter_list := p_event.getParameterList();
22
23 IF l_parameter_list IS NOT NULL THEN
24
25 i := l_parameter_list.first;
26
27 WHILE (i <= l_parameter_list.last) LOOP
28
29 i_parameter_name := null;
30
31 i_parameter_value := null;
32
33 i_parameter_name := l_parameter_list(i).getName();
34
35 i_parameter_value := l_parameter_list(i).getValue();
36
37 IF i_parameter_name IS NOT NULL THEN
38
39 INSERT INTO xxbxj_wf_event (priority,
40
41 send_date,
42
43 receive_date,
44
45 correlation_id,
46
47 event_name,
48
49 event_key,
50
51 parameter_name,
52
53 parameter_value)
54
55 VALUES
56
57 (p_event.priority,
58
59 p_event.send_date,
60
61 p_event.receive_date,
62
63 p_event.correlation_id,
64
65 p_event.event_name,
66
67 p_event.event_key,
68
69 i_parameter_name,
70
71 i_parameter_value);
72
73 END IF;
74
75 i := l_parameter_list.next(i);
76
77 END LOOP;
78
79 END IF;
80
81 RETURN(‘SUCCESS‘);
82
83 END;
四、案例测试
Test1. 使用Business Event自带的Test工具,去测试正规Business Event
Test1.1 手工测试通过Event Test功能,直接Raise Event
Test1.2 手工测试通过Event Test功能, 输入Event Key
Test1.3 手工测试通过Event Test功能, 查看table中的变化
Test2. 直接建立一个supplier,去触发business event
Test2.1 手工测试建立Supplier触发Event
Test2.2. 手工测试建立Supplier触发Event,查看table结果
Test3. 测试business event中的parameter参数使用
Test3.1 测试Event Parameter,调用Event时建立手工参数
Test3.2. 测试Event Parameter,查看table确认结果
参考:黄健华 http://www.docin.com/app/p?id=32307815
Thanks and Regards