码迷,mamicode.com
首页 > 其他好文 > 详细

Workflow_标准BusinessEvent用以监控供应商的修改(案例)

时间:2014-06-10 21:18:00      阅读:353      评论:0      收藏:0      [点我收藏+]

标签:des   cWeb   style   class   blog   code   

2014-06-01 BaoXinjian

bubuko.com,布布扣一、摘要


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),发送一个供应商被修改的消息给通道】

bubuko.com,布布扣

 

bubuko.com,布布扣二、案例


需求:在供应商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确认结果

 

bubuko.com,布布扣三、案例实现


1. 查询到该标准Even (oracle.apps.ap.supplier.event)

    bubuko.com,布布扣

 

2. Update Subscription

    bubuko.com,布布扣

 

3 Update Subscription Header, 设定Execuation Condition 和 Action Type

    bubuko.com,布布扣

    bubuko.com,布布扣

 

4. Update Subscription Detail, 设定该Event的action为PLSQL或为Workflow

    bubuko.com,布布扣

 

5. 建立PLSQL Function,必须有两个参数 p_subscription_guid & p_event

bubuko.com,布布扣
 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;
bubuko.com,布布扣

 

bubuko.com,布布扣四、案例测试


Test1. 使用Business Event自带的Test工具,去测试正规Business Event

Test1.1 手工测试通过Event Test功能,直接Raise Event

    bubuko.com,布布扣

Test1.2 手工测试通过Event Test功能, 输入Event Key

    bubuko.com,布布扣

Test1.3 手工测试通过Event Test功能, 查看table中的变化

    bubuko.com,布布扣

Test2. 直接建立一个supplier,去触发business event

Test2.1 手工测试建立Supplier触发Event

    bubuko.com,布布扣

Test2.2. 手工测试建立Supplier触发Event,查看table结果

    bubuko.com,布布扣

 

Test3. 测试business event中的parameter参数使用

Test3.1 测试Event Parameter,调用Event时建立手工参数

    bubuko.com,布布扣

Test3.2. 测试Event Parameter,查看table确认结果

      bubuko.com,布布扣

 

参考:黄健华 http://www.docin.com/app/p?id=32307815

 

Thanks and Regards

bubuko.com,布布扣

Workflow_标准BusinessEvent用以监控供应商的修改(案例),布布扣,bubuko.com

Workflow_标准BusinessEvent用以监控供应商的修改(案例)

标签:des   cWeb   style   class   blog   code   

原文地址:http://www.cnblogs.com/eastsea/p/3763646.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!