More Related Content Similar to 4, workflow tables & api Similar to 4, workflow tables & api (20) 4, workflow tables & api2. Overview
• 工作流引擎(Workflow Engine)是Oracle工作流的
核心所在, 它真正驱动了工作流的启动, 运行和
结束. 工作流引擎是纯基于oracle数据库实现的,
由后台的若干表和存储过程组成, 文档中将会
对其中一些重要的数据库表的设计以及API进
行介绍, 另外还会给出相关的示例如何使用这
些API;
• 工作流版本
在使用WFLOAD上传一个工作流定义时, 如果该
工作流已经存在, 则会为它生成一个新的版本,
之前的版本不会被删除.工作流在启动时会选
择最新的版本.
3. Tables
• Oracle工作流数据库表可以分为两种类型, 一是静态的工作流定义表,
二是工作流运行时数据表, 这些表都属于applsys用户, apps用户只是
建立了同义词. 这里以apps用户下面的对象进行说明:
1, 工作流定义表
wf_item_types WF_ITEM_ATTRIBUTES
wf_activities wf_activity_attributes
wf_process_activities WF_ACTIVITY_TRANSITIONS
wf_messages WF_MESSAGE_ATTRIBUTES
WF_LOOKUP_TYPES WF_LOOKUPS
2,行时数据表
wf_items WF_ITEM_ATTRIBUTE_VALUES
WF_ACTIVITY_ATTR_VALUES WF_ITEM_ACTIVITY_STATUSES
WF_ITEM_ACTIVITIES_HISTORY_V WF_NOTIFICATIONS
wf_worklist_v
4. Tables
- Workflow Definition
• 下面依次是工作流定义表的说明:
1, wf_item_types
工作流定义表, 对于每一个Item Type会在该表有一条记录; 该记录不包含版本
信息. 字段:
NAME, PERSISTENCE_TYPE, PERSISTENCE_DAYS, WF_SELECTOR
2, WF_ITEM_ATTRIBUTES
工作流属性定义表, 对每一个工作流属性有一条记录. 字段:
ITEM_TYPE, NAME, SEQUENCE, TYPE
3, wf_activities(WA)
工作流活动定义表, 包含该工作流中所有的活动定义, 常见的活动类型有流程
(PROCESS), 函数(FUNCTION), 通知(NOTICE), 以及业务事件(EVENT). 一个工作流
下面可以有多个流程, 而流程本身也是一个活动. 活动定义包含版本信息.
字段:
ITEM_TYPE, NAME, VERSION, TYPE, COST, RESULT_TYPE, MESSAGE, EVENT_NAME
对于FYA通知, RESULT_TYPE/MESSAGE字段非空;
对于FYI通知, MESSAGE字段非空.
5. Tables
- Workflow Definition
4, wf_activity_attributes(WAA)
工作流活动属性的默认值定义. 字段:
ACTIVITY_ITEM_TYPE, ACTIVITY_NAME, ACTIVITY_VERSION, NAME,
SEQUENCE, TYPE, VALUE_TYPE, TEXT_DEFAULT
字段说明:
TYPE 数据类型, 比如Text/Number/Role等;
VALUE_TYPE 默认值的类型Constant/ItemAttr;
TEXT_DEFAULT 默认值, 如果是常量类型则指定一个常量, 否则
指定工作流属性
5, wf_process_activities(WPA)
流程的活动定义表, 流程本身也是一个活动, 因此流程下面可以有子流
程. 与wf_activities表的区别在于, 此表反应了流程和活动的包含关系,
并且包含了来自WFSTD工作流的活动(START/END). WA表中的记录与
WPA表的记录是一对多的关系, 即活动可以被多个流程使用, 也可以在
一个流程中重复使用某个活动. 另外此表包含版本信息. 字段:
PROCESS_ITEM_TYPE, PROCESS_NAME, PROCESS_VERSION,
ACTIVITY_ITEM_TYPE, ACTIVITY_NAME, INSTANCE_ID, INSTANCE_LABEL,
PERFORM_ROLE_TYPE, PERFORM_ROLE, START_END
6. Tables
- Workflow Definition
5, wf_process_activities
字段说明:
PROCESS_ITEM_TYPE 流程所属的工作流
ACTIVITY_ITEM_TYPE 活动的工作流, 活动有可能是从WFSTD或者其它工作流中
引用过来的
INSTANCE_ID 活动的ID, 唯一字段. 此ID会在工作流运行时表中被引用
PERFORM_ROLE_TYPE Performer的类型, 为Constant或者ITEMATTR, 如果是
ITEMATTR则引用某个工作流属性, 不能是活动属性
PERFORM_ROLE Performer的值, 某个常量或者指定为某个工作流属性
START_END 活动类型, 分为START/END/NORMAL, 分别表示起始活动,
结束活动和一般的活动.
6, WF_ACTIVITY_TRANSITIONS
工作流活动的连接信息, 比如活动A下一个活动. 字段:
FROM_PROCESS_ACTIVITY 起始活动ID, 引用表(5)中的instance_id字段;
TO_PROCESS_ACTIVITY 结束活动ID,引用表(5)中的instance_id字段;
RESULT_CODE 引用某个lookup code, 当前一个活动的结果是该
代码时流程进入TO_PROCESS_ACTIVITY
7, WF_ACTIVITY_ATTR_VALUES(WAAV)
用于保存活动属性值的设置. WAA表的记录与WAAV表的记录是一对多关系, 因为活动可
以在流程中多次被引用.字段:
PROCESS_ACTIVITY_ID, NAME, VALUE_TYPE, TEXT_VALUE
7. Tables
- Workflow Definition
SQL:
-- 使用如下sql查询一个流程的连接信息:
select b.activity_name, b.instance_label, a.result_code "RESULT_CODE", 'TO',
c.activity_name, c.instance_label
from (select * from wf_activity_transitions
start with from_process_activity = (select instance_id from
wf_process_activities where
process_item_type = 'LEAVEREQ' AND PROCESS_VERSION = 5 AND
ACTIVITY_NAME =
'START') connect by prior to_process_activity = from_process_activity and
result_code <>
'#TIMEOUT') a left outer join wf_process_activities b on
a.from_process_activity =
b.instance_id left outer join wf_process_activities c on a.to_process_activity
= c.instance_id
8, wf_messages_vl
消息视图, 根据会话的语言设置返回相应的记录. 字段:
TYPE, NAME, DISPLAY_NAME, SUBJECT, BODY
8. Tables
- Workflow Definition
9, WF_MESSAGE_ATTRIBUTES
消息属性表. 字段:
MESSAGE_TYPE, MESSAGE_NAME, NAME, SEQUENCE, TYPE,
SUBTYPE, VALUE_TYPE, TEXT_DEFAULT
字段说明:
SUBTYPE 子类型分为send/respond, 后续会讲到;
VALUE_TYPE/TEXT_DEFAULT 用于定义消息属性的默认值
10, wf_lookup_types
定义工作流的lookup type, 多语言视图. 字段:
ITEM_TYPE, LOOKUP_TYPE, DISPLAY_NAME
11, wf_lookups
定义lookup type下面的代码, 多语言视图. 字段:
LOOKUP_TYPE, LOOKUP_CODE, MEANGING, DESCRIPTION
9. Tables
- Runtime
• 下面是运行时数据表的一些说明:
1, wf_items
启动一个工作流时, 会往这个表中插入一条记录. 字段:
ITEM_TYPE, ITEM_KEY, ROOT_ACTIVITY, ROOT_ACTIVITY_VERSION
字段说明:
ROOT_ACTIVITY 表示该工作流实例运行的流程, 非null
2, WF_ITEM_ATTRIBUTE_VALUES
保存工作流属性的值, 每一个工作流属性都会有相应的一条记录. 字段:
ITEM_TYPE, ITEM_KEY, NAME, TEXT_VALUE, EVENT_NAME, EVENT_KEY,
EVENT_DATA
3, WF_ITEM_ACTIVITY_STATUSES(WIAS)
工作流运行时活动的状态信息. 字段:
ITEM_TYPE, ITEM_KEY, PROCESS_ACTIVITY, ACTIVITY_STATUS,
ACTIVITY_RESULT_CODE, ASSIGNED_USER, NOTIFICATION_ID
字段说明:
PROCESS_ACTIVITY 引用WPA表中的instance_id
ACTIVITY_STATUS 活动状态, 有NOTIFIED, ACTIVE, SUSPEND, DEFERRED,
WAITING, COMPLETE, ERROR等
ACTIVITY_RESULT_CODE 活动的结果代码
NOTIFICATION_ID 通知id, 仅用于通知活动
10. Tables
- Runtime
4, WF_NOTIFICATIONS
通知表, 用于保存FYI/FYA通知的信息. 字段:
NOTIFICATION_ID, MESSAGE_TYPE, MESSAGE_NAME,
RECIPIENT_ROLE, STATUS, SUBJECT.
字段说明:
NOTIFICATION_ID 消息ID, 与WIAS表同名字段关联
MESSAGE_TYPE 消息的Item Type
MESSAGE_NAME 消息的名称
5, WF_NOTIFICATION_ATTRIBUTES
工作流通知的属性值. 字段:
NOTIFICATION_ID, NAME, TEXT_VALUE...
6, WF_ITEM_ACTIVITIES_HISTORY_V
视图, 查看工作流活动的历史记录信息.
7, wf_worklist_v
视图, 显示工作流下面所有的通知及其状态等信息.
11. Workflow API
• Oracle工作流API由以下部分组成:
1, 引擎API 包: wf_engine
启动和运行流程
设置和获取工作流属性
设置工作流状态
2, 核心API 包: wf_core
抛出或者捕获运行时错误
3, 清理API 包: wf_purge
清除运行时数据
4, 目录API 包: wf_directory
用于处理工作流用户(user)和职责(role)
5, 监控API 包: wf_monitor
用于生成工作流监控(status monitor)页面URL
6, 通知API 包: wf_notification
管理工作流运行时通知
7, 首选项API 包: wf_preference
检索用户的首选项设置
8, 业务事件API 包: wf_event
管理工作流业务事件
工作流API说明可以参考:
http://docs.oracle.com/cd/B19306_01/workflow.102/b15855/toc.htm
12. Workflow API
- WF_ENGINE
• wf_engine包用于工作流控制, 活动控制, 设置/获取工作流属性:
1, 工作流控制
CreateProcess
初始化一个工作流, 使用默认值初始化工作流属性. 分别会写表
wf_items和WF_ITEM_ATTRIBUTE_VALUES. 参数:
itemtype in varchar2 指定ITEM TYPE
itemkey in varchar2 指定ITEM KEY
process in varchar2 指定启动的流程, 如果null则使用selector函数决定
user_key in varchar2 USER KEY
owner_role in varchar2 所有者
StartProcess
启动一个流程. 参数:
itemtype in varchar2,
itemkey in varchar2
LaunchProcess
相当于CreateProcess + StartProcess
SetItemOwner
设置工作流实例的所有者.
13. Workflow API
- WF_ENGINE
CreateForkedProcess
拷贝当前工作流实例.
StartForkedProcess
启动拷贝的工作流实例
Event
接收业务事件, 参数:
itemtype in varchar2 ITEM TYPE
itemkey in varchar2 ITEM KEY
process_name in varchar2 Process Name
event_message in wf_event_t 消息内容
Background
处理timeout/deferred/stuck的流程.
AbortProcess
取消工作流的执行, 可以指定一个结果.
SuspendProcess
暂停流程的执行, 指定ITEM TYPE, ITEM KEY和PROCESS.
ResumeProcess
重新恢复流程的执行,指定ITEM TYPE, ITEM KEY和PROCESS.
ItemStatus
查看工作流实例的状态以及结果代码.
14. Workflow API
- WF_ENGINE
2, 活动控制
BeginActivity
判断指定的活动当前能否执行, 如果否则抛出异常. 指定ITEM_TYPE, ITEM_KEY,
和ACTIVITY.
AssignActivity
将活动分配给另一个人执行.
CompleteActivity
标识指定的活动为已完成状态, 传入活动的label.
CompleteActivityInternalName
标识指定的活动为已完成状态, 传入活动的Internal Name.
HandleError
将流程重置到某个活动节点, 并从该节点重新执行. 参数:
itemtype in varchar2 ITEM TYPE
itemkey in varchar2 ITEM KEY
activity in varchar2 Activity
command in varchar2 执行的动作SKIP或者RETRY
result in varchar2 如果执行的动作是SKIP, 此参数指定该活动的结果
如果activity参数设置为流程当前出错的节点, 那么HandleError用于处理活动的
错误.
15. Workflow API
- WF_ENGINE
3, 工作流属性
SetItemAttrText
设置工作流字符类型的属性, 类似的有SetItemAttrNumber,
SetItemAttrDate等.
此过程会对表WF_ITEM_ATTRIBUTE_VALUES进行插入或者更新操
作.
SetItemAttrTextArray
使用数组的方式一次设置多个属性, 类似的有
SetItemAttrNumberArray, SetItemAttrDateArray等.
GetItemAttrText
读取工作流字符类型属性的值, 类似的有GetItemAttrNumber,
GetItemAttrDate等.
GetActivityAttrText
读取流程活动的属性值, 类似的有GetActivityAttrNumber,
GetActivityAttrDate等.
16. Workflow API
- WF_CORE
• wf_core包主要用于处理工作流中的错误, 错误消息由消息代码
和消息内容组成. 消息文本保存在wf_resources多语言表中.
Token
存储发生错误时工作流的信息, 比如ITEM_TYPE, ITEM_KEY等.
Raise
抛出指定的消息, 参数:
name 消息的名称
这个过程会根据传入的消息名称查找(wf_resources)到对应的消
息号和消息文本, 并将token过程设置的信息追加到消息文本
中, 最终抛出异常.
clear
清空错误缓存.
context
设置当前抛出异常的上下文, 包括包名称, 过程名称等信息.
Get_error
获取错误名称, 错误消息, 以及错误上下文等信息.
17. Workflow API
- WF_CORE
• 下面是一个使用wf_core包的示例, 演示了上面几个过程的使用:
declare
err_name varchar2(100);
err_msg varchar2(2000);
err_stack varchar2(2000);
begin
begin
Wf_Core.Token('ARG1', 'arg1');
Wf_Core.Token('ARG2', 'arg2');
Wf_Core.Raise('ERROR_NAME');
exception when others then
Wf_Core.Context('My_Package', 'MySubFunction');
raise;
end;
exception when others then
Wf_Core.Get_error(err_name, err_msg, err_stack);
dbms_output.put_line('Name: ' || err_name);
dbms_output.put_line('Message: ' || err_msg);
dbms_output.put_line('Stack: ' || err_stack);
end;
输出:
Name: ERROR_NAME
Message: [ERROR_NAME] ARG1=arg1 ARG2=arg2
Stack:
My_Package.MySubFunction()
18. Workflow API
- WF_NOTIFICATION
• wf_notification包用于管理工作流中的通知, 有如下常用API:
send
发送一个通知, 如果通知发送成功返回一个notification_id, 并被后续引
用; 通知是发送给某个Role的.
cancel
取消一个通知, 需要传入通知id参数. 通知的状态变为CANCELLED, 同时
接收者会受到消息提示该通知已失效.
close
关闭一个通知, 通知状态变为CLOSED.
GetSubject/GetBody
返回通知的subject和body.
SetAttrText/GetAttrText
设置通知的属性值, 读写WF_NOTIFICATION_ATTRIBUTES表.
FOWARD
将一个通知委托给另一个角色处理, 但不改变通知的所有者.
TRANSFER
将一个通知转移给另一个角色, 同时改变通知所有者.
19. Workflow API
- Example
• 使用以下PLSQL代码启动一个工作流:
declare
v_itemtype varchar2(30) := 'LEAVE';
v_process varchar2(30) := 'LEAVE';
v_itemkey varchar2(30);
begin
select dem_orders_s.nextval into v_itemkey from dual;
wf_engine.createprocess(v_itemtype, v_itemkey, v_process);
wf_engine.SetItemAttrText(v_itemtype, v_itemkey, 'BUSINESS_KEY',
'330');
wf_engine.SetItemAttrText(v_itemtype, v_itemkey,
'LEAVE_REQUESTER', 'OPERATIONS');
wf_engine.startProcess(v_itemtype, v_itemkey);
commit;
end;
/
20. Workflow API
- WF_DIRECTORY
• 工作流目录服务(Directory Service)实际指的
是与工作流用户(User)和角色(Role)相关的
API, 目录服务涉及到如下的表或者视图:
apps
WF_USERS WF_ROLES WF_USER_ROLES
Views
apps WF_LOCAL_ROLES
WF_LOCAL_USERS WF_LOCAL_USER_ROLES
Synonyms
WF_LOCAL_ROLES_TL
APPLSYS
Tables WF_LOCAL_USERS WF_LOCAL_ROLES WF_LOCAL_USER_ROLES
WF_LOCAL_ROLES_TL
21. Workflow API
- WF_DIRECTORY
• 以下是wf_directory常用的过程:
GetRoleUsers
返回某个role下面的所有user
GetUserRoles
返回某个user分配的所有role
UserActive
用户状态是否为ACTIVE
GetUserName
根据orig_system和orig_system_id返回用户名和显示名称
GetRoleName
根据orig_system和orig_system_id返回Role名和显示名称
Editor's Notes Note:The three views are mapped in the following way. WF_USERS is mapped to all employees with active primary assignments. WF_ROLES is mapped to all users listed in WF_USERS and to all positions defined as workflow roles. WF_USER_ROLES is mapped to the combination of WF_ROLES and WF_USERS.http://oracleapps4u.com/blog/category/wf_local_roles/For example:OPERATIONS is a user in WF_USERS, there’s also a role in WF_ROLES. There is a mapping user_name(‘OPERATIONS ’) role_name(‘OPERATIONS ’) in WF_USER_ROLES.