SlideShare una empresa de Scribd logo
1 de 22
Workflow Engine
Overview
• 工作流引擎(Workflow Engine)是Oracle工作流的
  核心所在, 它真正驱动了工作流的启动, 运行和
  结束. 工作流引擎是纯基于oracle数据库实现的,
  由后台的若干表和存储过程组成, 文档中将会
  对其中一些重要的数据库表的设计以及API进
  行介绍, 另外还会给出相关的示例如何使用这
  些API;
• 工作流版本
  在使用WFLOAD上传一个工作流定义时, 如果该
  工作流已经存在, 则会为它生成一个新的版本,
  之前的版本不会被删除.工作流在启动时会选
  择最新的版本.
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
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字段非空.
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
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
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
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
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, 仅用于通知活动
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
视图, 显示工作流下面所有的通知及其状态等信息.
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
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
 设置工作流实例的所有者.
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
查看工作流实例的状态以及结果代码.
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用于处理活动的
错误.
Workflow API
             - WF_ENGINE
3, 工作流属性
SetItemAttrText
设置工作流字符类型的属性, 类似的有SetItemAttrNumber,
SetItemAttrDate等.
此过程会对表WF_ITEM_ATTRIBUTE_VALUES进行插入或者更新操
作.
SetItemAttrTextArray
使用数组的方式一次设置多个属性, 类似的有
SetItemAttrNumberArray, SetItemAttrDateArray等.
GetItemAttrText
读取工作流字符类型属性的值, 类似的有GetItemAttrNumber,
GetItemAttrDate等.
GetActivityAttrText
读取流程活动的属性值, 类似的有GetActivityAttrNumber,
GetActivityAttrDate等.
Workflow API
              - WF_CORE
• wf_core包主要用于处理工作流中的错误, 错误消息由消息代码
  和消息内容组成. 消息文本保存在wf_resources多语言表中.
  Token
  存储发生错误时工作流的信息, 比如ITEM_TYPE, ITEM_KEY等.
  Raise
  抛出指定的消息, 参数:
  name      消息的名称
  这个过程会根据传入的消息名称查找(wf_resources)到对应的消
  息号和消息文本, 并将token过程设置的信息追加到消息文本
  中, 最终抛出异常.
  clear
  清空错误缓存.
  context
  设置当前抛出异常的上下文, 包括包名称, 过程名称等信息.
  Get_error
  获取错误名称, 错误消息, 以及错误上下文等信息.
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()
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
  将一个通知转移给另一个角色, 同时改变通知所有者.
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;
   /
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
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名和显示名称
END

Más contenido relacionado

La actualidad más candente

jsp基础速成精华讲解
jsp基础速成精华讲解jsp基础速成精华讲解
jsp基础速成精华讲解wensheng wei
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记yiditushe
 
Oracle11g database sql语言基础
Oracle11g database sql语言基础Oracle11g database sql语言基础
Oracle11g database sql语言基础maclean liu
 
Raising The MySQL Bar-Manyi Lu
Raising The MySQL Bar-Manyi LuRaising The MySQL Bar-Manyi Lu
Raising The MySQL Bar-Manyi Lu郁萍 王
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现hua qiu
 
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Justin Lin
 
【 I Love Joomla 】- Joomla!佈景製作教學
【 I Love Joomla 】- Joomla!佈景製作教學【 I Love Joomla 】- Joomla!佈景製作教學
【 I Love Joomla 】- Joomla!佈景製作教學ilovejoomla
 
I Love Joomla! 佈景製作教學 0212
I Love Joomla! 佈景製作教學 0212I Love Joomla! 佈景製作教學 0212
I Love Joomla! 佈景製作教學 0212Asika Simon
 
Class Inheritance
Class InheritanceClass Inheritance
Class Inheritancefinian lau
 
3 hibernate映射元素和类型
3 hibernate映射元素和类型3 hibernate映射元素和类型
3 hibernate映射元素和类型Zelin Wang
 
Spring 2.0 技術手冊第四章 - Spring AOP
Spring 2.0 技術手冊第四章 - Spring AOPSpring 2.0 技術手冊第四章 - Spring AOP
Spring 2.0 技術手冊第四章 - Spring AOPJustin Lin
 
Oracle试题Exam Adminv1.1
Oracle试题Exam Adminv1.1Oracle试题Exam Adminv1.1
Oracle试题Exam Adminv1.1Zianed Hou
 
J2ee面试知识
J2ee面试知识J2ee面试知识
J2ee面试知识yiditushe
 
Patterns in Zend Framework
Patterns in Zend FrameworkPatterns in Zend Framework
Patterns in Zend FrameworkJace Ju
 
Java面试知识
Java面试知识Java面试知识
Java面试知识yiditushe
 
Abap oo
Abap ooAbap oo
Abap oovernoo
 

La actualidad más candente (18)

jsp基础速成精华讲解
jsp基础速成精华讲解jsp基础速成精华讲解
jsp基础速成精华讲解
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记
 
12
1212
12
 
Oracle11g database sql语言基础
Oracle11g database sql语言基础Oracle11g database sql语言基础
Oracle11g database sql语言基础
 
Raising The MySQL Bar-Manyi Lu
Raising The MySQL Bar-Manyi LuRaising The MySQL Bar-Manyi Lu
Raising The MySQL Bar-Manyi Lu
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现
 
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援
 
【 I Love Joomla 】- Joomla!佈景製作教學
【 I Love Joomla 】- Joomla!佈景製作教學【 I Love Joomla 】- Joomla!佈景製作教學
【 I Love Joomla 】- Joomla!佈景製作教學
 
I Love Joomla! 佈景製作教學 0212
I Love Joomla! 佈景製作教學 0212I Love Joomla! 佈景製作教學 0212
I Love Joomla! 佈景製作教學 0212
 
Sun java
Sun javaSun java
Sun java
 
Class Inheritance
Class InheritanceClass Inheritance
Class Inheritance
 
3 hibernate映射元素和类型
3 hibernate映射元素和类型3 hibernate映射元素和类型
3 hibernate映射元素和类型
 
Spring 2.0 技術手冊第四章 - Spring AOP
Spring 2.0 技術手冊第四章 - Spring AOPSpring 2.0 技術手冊第四章 - Spring AOP
Spring 2.0 技術手冊第四章 - Spring AOP
 
Oracle试题Exam Adminv1.1
Oracle试题Exam Adminv1.1Oracle试题Exam Adminv1.1
Oracle试题Exam Adminv1.1
 
J2ee面试知识
J2ee面试知识J2ee面试知识
J2ee面试知识
 
Patterns in Zend Framework
Patterns in Zend FrameworkPatterns in Zend Framework
Patterns in Zend Framework
 
Java面试知识
Java面试知识Java面试知识
Java面试知识
 
Abap oo
Abap ooAbap oo
Abap oo
 

Destacado

Destacado (6)

Bi
BiBi
Bi
 
Oracle Workflow (Advance)
Oracle Workflow (Advance)Oracle Workflow (Advance)
Oracle Workflow (Advance)
 
Oracle Workflow Continuous Integration
Oracle Workflow Continuous IntegrationOracle Workflow Continuous Integration
Oracle Workflow Continuous Integration
 
Oracle Inventory
Oracle InventoryOracle Inventory
Oracle Inventory
 
Customizing Oracle EBS OA Framework
Customizing Oracle EBS OA FrameworkCustomizing Oracle EBS OA Framework
Customizing Oracle EBS OA Framework
 
Oracle apps technical profile
Oracle apps technical profileOracle apps technical profile
Oracle apps technical profile
 

Similar a 4, workflow tables & api

5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activityted-xu
 
6, workflow miscellaneous
6, workflow miscellaneous6, workflow miscellaneous
6, workflow miscellaneousted-xu
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训lotusprince
 
Power flow簡介
Power flow簡介Power flow簡介
Power flow簡介Sky Wu
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學Bo-Yi Wu
 
2, a simple workflow
2, a simple workflow2, a simple workflow
2, a simple workflowted-xu
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记yiditushe
 
7, business event system
7, business event system7, business event system
7, business event systemted-xu
 
第9章 transact sql程序设计
第9章   transact sql程序设计第9章   transact sql程序设计
第9章 transact sql程序设计hanmo1988
 
第六章 函數與巨集
第六章 函數與巨集第六章 函數與巨集
第六章 函數與巨集shademoon
 
第9章 t sql程序设计
第9章 t sql程序设计第9章 t sql程序设计
第9章 t sql程序设计hanmo1988
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应zhaolinjnu
 
Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Bob Huang
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow introted-xu
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术bigqiang zou
 
Coding guideline
Coding guidelineCoding guideline
Coding guideline斯理 衛
 
通过Struts构建Web应用
通过Struts构建Web应用通过Struts构建Web应用
通过Struts构建Web应用yiditushe
 

Similar a 4, workflow tables & api (20)

5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activity
 
6, workflow miscellaneous
6, workflow miscellaneous6, workflow miscellaneous
6, workflow miscellaneous
 
Structs2簡介
Structs2簡介 Structs2簡介
Structs2簡介
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训
 
Power flow簡介
Power flow簡介Power flow簡介
Power flow簡介
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學
 
2, a simple workflow
2, a simple workflow2, a simple workflow
2, a simple workflow
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记
 
7, business event system
7, business event system7, business event system
7, business event system
 
第9章 transact sql程序设计
第9章   transact sql程序设计第9章   transact sql程序设计
第9章 transact sql程序设计
 
第六章 函數與巨集
第六章 函數與巨集第六章 函數與巨集
第六章 函數與巨集
 
第9章 t sql程序设计
第9章 t sql程序设计第9章 t sql程序设计
第9章 t sql程序设计
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01Mysql 101014202926-phpapp01
Mysql 101014202926-phpapp01
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow intro
 
敦群學院-SharePoint精英計畫-系統開發-Day 2
敦群學院-SharePoint精英計畫-系統開發-Day 2敦群學院-SharePoint精英計畫-系統開發-Day 2
敦群學院-SharePoint精英計畫-系統開發-Day 2
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术
 
Coding guideline
Coding guidelineCoding guideline
Coding guideline
 
通过Struts构建Web应用
通过Struts构建Web应用通过Struts构建Web应用
通过Struts构建Web应用
 

Más de ted-xu

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert systemted-xu
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashbackted-xu
 
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rmanted-xu
 
8, OCP - backup with rman
8, OCP - backup with rman8, OCP - backup with rman
8, OCP - backup with rmanted-xu
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recoveryted-xu
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle securityted-xu
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storageted-xu
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networkingted-xu
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance managementted-xu
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a databaseted-xu
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture introted-xu
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuningted-xu
 
3, workflow in ebs
3, workflow in ebs3, workflow in ebs
3, workflow in ebsted-xu
 
OPM Recipe designer notes
OPM Recipe designer notesOPM Recipe designer notes
OPM Recipe designer notested-xu
 
5, sed
5, sed5, sed
5, sedted-xu
 
4, grep
4, grep4, grep
4, grepted-xu
 
3, regular expression
3, regular expression3, regular expression
3, regular expressionted-xu
 
2, bash synax simplified
2, bash synax simplified2, bash synax simplified
2, bash synax simplifiedted-xu
 
1, shell intro
1, shell intro1, shell intro
1, shell introted-xu
 
6, awk
6, awk6, awk
6, awkted-xu
 

Más de ted-xu (20)

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert system
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashback
 
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman
 
8, OCP - backup with rman
8, OCP - backup with rman8, OCP - backup with rman
8, OCP - backup with rman
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle security
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storage
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networking
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance management
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a database
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture intro
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuning
 
3, workflow in ebs
3, workflow in ebs3, workflow in ebs
3, workflow in ebs
 
OPM Recipe designer notes
OPM Recipe designer notesOPM Recipe designer notes
OPM Recipe designer notes
 
5, sed
5, sed5, sed
5, sed
 
4, grep
4, grep4, grep
4, grep
 
3, regular expression
3, regular expression3, regular expression
3, regular expression
 
2, bash synax simplified
2, bash synax simplified2, bash synax simplified
2, bash synax simplified
 
1, shell intro
1, shell intro1, shell intro
1, shell intro
 
6, awk
6, awk6, awk
6, awk
 

4, workflow tables & api

  • 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 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名和显示名称
  • 22. END

Notas del editor

  1. 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.