Your SlideShare is downloading. ×
4, workflow tables & api
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

4, workflow tables & api

415

Published on

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

  • Be the first to like this

No Downloads
Views
Total Views
415
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • 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.
  • Transcript

    • 1. Workflow Engine
    • 2. 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 Definition4, 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 Definition5, 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_ACTIVITY7, WF_ACTIVITY_ATTR_VALUES(WAAV)用于保存活动属性值的设置. WAA表的记录与WAAV表的记录是一对多关系, 因为活动可以在流程中多次被引用.字段:PROCESS_ACTIVITY_ID, NAME, VALUE_TYPE, TEXT_VALUE
    • 7. Tables - Workflow DefinitionSQL:-- 使用如下sql查询一个流程的连接信息:select b.activity_name, b.instance_label, a.result_code "RESULT_CODE", TO,c.activity_name, c.instance_labelfrom (select * from wf_activity_transitionsstart with from_process_activity = (select instance_id from wf_process_activities whereprocess_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_id8, wf_messages_vl消息视图, 根据会话的语言设置返回相应的记录. 字段: TYPE, NAME, DISPLAY_NAME, SUBJECT, BODY
    • 8. Tables - Workflow Definition9, 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_NAME11, 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 - Runtime4, 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_ENGINECreateForkedProcess拷贝当前工作流实例.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_ENGINE2, 活动控制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_ENGINE3, 工作流属性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_ROLESSynonyms WF_LOCAL_ROLES_TLAPPLSYS 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名和显示名称
    • 22. END

    ×