8, bes tables & api

557 views
447 views

Published on

BES Tables & API

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
557
On SlideShare
0
From Embeds
0
Number of Embeds
140
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

8, bes tables & api

  1. 1. BES Tables & API
  2. 2. BES Tables• BES系统相关的数据库表如下: wf_systems dba_queues wf_agents wf_event_groups wf_events wf_deferred wf_java_deferred wf_event_subscriptions BES系统的表有一个共性, 就是使用长度为32位 的GUID作为主键. 下面依次对这些表进行介绍. 1, wf_systems BES系统定义表, 包含本地系统和外部系统的定 义, 字段: GUID, NAME, DISPLAY_NAME
  3. 3. BES Tables2, dba_queues这是一张基本表, 包含了数据库中所有queue的定义,示例select * from dba_queues where name = WF_DEFERRED andOWNER = APPLSYS3, wf_agentsAgent定义表, 通过SYSTEM_GUID字段与WF_SYSTEMS表进行关联, 示例:select * from wf_agents where NAME in (WF_DEFERRED, WF_JAVA_DEFERRED)字段:GUID, NAME, SYSTEM_GUID, QUEUE_HANDLER,QUEUE_NAME, STATUS
  4. 4. BES Tables4, wf_event_groups业务事件组, 在WAP/Events页面可以进行定义.5, wf_events业务事件定义表, 示例: select * from wf_events where name = oracle.apps.gmd.leavereq字段: GUID, NAME, STATUS, owner_name, owner_tag,generate_function, java_generate_function6, wf_deferred这是一张AQ表, 如果使用plsql触发的业务事件订阅是deferred的,那么业务事件将会记录在这张表. 字段:Q_NAME, CORRID, STATE, ENQ_TIME, DEQ_TIME, EVENT_NAME,EVENT_KEY, EVENT_DATA, 示例:select * from wf_deferred where corrid like %oracle.apps.gmd.leavereq order by enq_time desc
  5. 5. BES Tables7, wf_java_deferred与WF_DEFERRED类似, 如果使用java触发的业务事件订阅是deferred的, 那么业务事件将会记录在这张表.8, wf_event_subscriptions业务事件订阅表, 字段:GUID, SYSTEM_GUID, SOURCE_TYPE, phase, STATUS, RULE_DATA, RULE_FUNCTION, OWNER_NAME, OWNER_TAG
  6. 6. BES Data Structure• 介绍BES的API之前, 需要先介绍一下BES相关的 数据结构, 常用的如下(PLSQL): 业务事件结构 wf_event_t 代理结构 wf_agent_t 参数列表结构 wf_parameter_list_t 参数结构 wf_parameter_t可以查看源代码以了解这些数据结构. 这里比较重要的是wf_event_t结构, 它用于在BES系统和工作流系统之间进行通讯.
  7. 7. BES API - wf_event• BES API主要分为两个部分, 业务事件API和规则函数(Rule Function), 前者 用于业务事件的操作, 比如触发业务事件,主要由PLSQL包wf_event组成; 后者则用于实现业务事件订阅的操作, 系统提供了默认的规则函数 (wf_rule包), 用户也可以自定义规则函数.• wf_event 1, raise 触发一个业务事件, 如下: PROCEDURE raise(p_event_name in varchar2, p_event_key in varchar2, p_event_data in clob, p_parameters in wf_parameter_list_t, p_send_date in date) 2, send 将一个业务事件从一个代理发送到另一个代理, 如下: PROCEDURE send(p_event in out nocopy wf_event_t)
  8. 8. BES API - wf_event3, newAgent根据代理的GUID, 返回该代理的wf_agent_t数据, 如下:function NewAgent (p_agent_guid in raw) returnwf_agent_t;4, Test查询指定业务事件是否被创建, 以及订阅情况. 如下: function Test (p_event_name in varchar2) return varchar2;返回值有可能是:NONE 业务事件不存在或者没有任何订阅KEY 业务事件相关订阅只要求KEY数据MESSAGE 业务事件至少一个相关的订阅只要求 MESSAGE数据
  9. 9. BES API - wf_event5, Enqueue事件入队, 如下:procedure Enqueue (p_event in wf_event_t, p_out_agent_override inwf_agent_t default null);6, Listen监听指定的代理, 对入队的消息进行dequeue操作. 如下:procedure Listen (p_agent_name in varchar2,...7, AddParameterToList添加参数到参数列表, 如下:procedure AddParameterToList (p_name in varchar2, p_value in varchar2, p_parameterlist in out wf_parameter_list_t);类似的过程有AddParameterToListPos
  10. 10. BES API - wf_event example• 示例使用wf_event触发一个业务事件: declare l_event_name varchar2(50) := oracle.apps.gmd.leavereq; l_event_key varchar2(50) := 330; begin -- Raise the event WF_EVENT.Raise(p_event_name => l_event_name, p_event_key => l_event_key); commit; end; / 上面使用wf_event.raise触发了一个业务事件, 调用该API之后需要进行commit操作.
  11. 11. BES API - wf_event & event data generator8, GetValueForParameter从参数列表中去某个参数的值, 如下:function GetValueForParameter (p_name in varchar2, p_parameterlist in wf_parameter_list_t) return varchar2;类似的函数有GetValueForParameterPos.关于业务事件还有一个比较重要的方面是事件数据的生成函数, 在业务事件的定义界面可以指定PLSQL或者JAVA形式的生成函数, 这里介绍PLSQL形式的生成函数. 函数必须遵循如下API格式:function <function_name> (p_event_name in varchar2, p_event_key in varchar2, p_parameter_list in wf_parameter_list_t default null)return clob;
  12. 12. BES API - wf_rule• wf_rule 规则函数用于实现业务 事件订阅指定的操作, 比 如启动工作流, 发送通知 等; 在查看业务事件订阅 的界面可以看到规则函数的身影. Oracle Workflow定义了如下标准规则函数: 1, default_rule 执行默认的事件订阅操作, 包含: – 将业务事件消息发送给工作流; – 将业务事件发送到另一个agent. 该函数的返回值为SUCCESS或者ERROR, 如果出现错误业务事件 将会进入WF_ERROR代理. 函数的定义如下: FUNCTION default_rule(p_subscription_guid in raw, p_event in out nocopy wf_event_t) return varchar2
  13. 13. BES API - wf_rule2, error_rule与default_rule类型, 但是当处理过程中出现错误时, 它会返回SUCCESS并且事件不会进入WF_ERROR代理.3, SendNotification发送工作流之外的通知, 需要在事件参数中指定RECIPIENT_ROLE, MESSAGE_TYPE, MESSAGE_NAME等参数, 定义: function SendNotification (p_subscription_guid in raw, p_event in out wf_event_t) return varchar2;在定义订阅的动作为发送通知时, 将会使用这个规则函数.
  14. 14. BES API - Customized Rule Function• 在某些情况下系统预定义的规则函数不能 满足需求, 则可以自定义规则函数, 但必须满 足以下API标准: function <function_name> (p_subscription_guid in raw, p_event in out wf_event_t) return varchar2; 通常情况下这种需求比较少见.

×