Oracle Workflow实例详解3

更新时间:2024-05-30 23:09:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、 Start to End

1、 Create new xx.wft file.

用向导新建一个Item Type

P: Workflow Builder/File/Quick Start Wizard

修改New Item Type中Internal Name为CW_DEMO和Display Name为CW_DEMO_R12_TRAINING;

New Process中Internal NameR12_DEMO_TOP_Process; 另存文件为:CW_WF_DEMO.wft

CW_TOP

Display Name

2、 完善此Process

双击CW_TOP Process,可以看到已经有一个Start 和End节点;

然后,右键Start节点,不要放开鼠标,拖到End节点,这样就把这两个点连起来了。

3、 Save to DB

I:直接通过Workflow Builder保存到数据库 P: Workflow Builder/File/Save As

点击OK即可(客制开发经常用的方式)

II:Submit request:Workflow Definitions Loader

首先用FTP工具把CW_WF_DEMO.wft上传到应用服务器。 然后到系统管理员职责提交请求。

Mode选Upload,File要写绝对路径! (上线安装的时候使用) 4、 Run Workflow

I:Workflow管理界面

P:System Administrator/Workflow/Administrator Workflow/Home

检查Workflow的管理员:

SELECT wfr.text FROM wf_resources wfr WHERE NAME = 'WF_ADMIN_ROLE' AND wfr.LANGUAGE = 'US'; 点击 Run 功能键:

按照上图输入资料:Item Key是本工作流运行的标志;可以理解为保存在数据库中的Item Type的一个标志。User Key是用户看到的实例标志。 点击Submit

II:PL/SQL(Package)启动Workflow DECLARE

l_item_key VARCHAR2(30) := 'CW_WF_DEMO_002'; l_user_item_key VARCHAR2(30) := 'CW_WF_DEMO_002_UK'; l_item_type VARCHAR2(30) := 'CW_DEMO'; l_process VARCHAR2(30) := 'CW_TOP';

BEGIN

--01 创建

wf_engine.createprocess(itemtype => l_item_type, itemkey => l_item_key, process => l_process,

user_key => l_user_item_key);

--02 初始化 --本例不需要

--03 启动

wf_engine.startprocess(itemtype => l_item_type, itemkey =>

l_item_key);

COMMIT;

dbms_output.put_line(l_item_key);

END;

同样的方式查看Workflow的运行状态:

FORM 等其他地方以同样的方式启动~

5、 运行情况查看

P:System Administrator/Workflow/Administrator Workflow/Home 切换到Status Monitor界面,输入关键字查询

选择需要查看的Workflow,进入Status Diagram画面; 绿线表示运行完毕

6、 That is all

二、 Start—>Notification?End

1、 把上一节的Item Type拷贝一份作为练习前提

Copy and Paste;新的Internal Name为CW_WF001,Display Name为:CW_WF001_NOTIFICATION

2、 新建6个Attribute

P:N: 选中Attribute/右键/New Attribute

Internal Name APPROVER_ID APPROVER_NAME APPROVER_DSP_NAME SUBMITER_ID SUBMITER_NAME SUBMITER_DSP_NAME Display Name Approver ID Approver Name Approver Display Name Submiter ID Submiter Name Submiter Display Name Type Number Role Text Number Role Text Length 360 360 按如上表数据建立Attribute,用来保存提交者和审批者的信息。 Attribute的用法:

Attribute相当于全局变量,供整个Item Type的元素调用;

Attribute作为Notification的执行者; Attribute作为Function的调用参数;几乎任何PL/SQL函数都需要通过取得Attribute

变量--判断Attribute变量--设置Attribute变量,决定程序如何走,返回什么值 3、 新建1个Message

P:选中Message/右键/New Message

Internal Name APPROVAL_REQ Display Name Approval Requisition Text Body Just for CW Demo Message from &SUBMITER_DSP_NAME 保存的时候,系统显示找不到我们引用的Attribute:SUBMITER_DSP_NAME

Message 中引用的变量必须在自己的Attribute中。可以手工建立:Message/右键/New Attribute;也可以直接把SUBMITER_DSP_NAME复制到这个Message下面。

4、 新建1个Notification

P:选中Notification/右键/New Notification

Internal Name REQ_APPROVAL Display Name Requisition Approval Message Approval Requisition 5、 修改Process:CW_TOP

把上面建的Notification拖到CW_TOP(R12_DEMO_TOP_Process)中

此时,右键这里的Requisition Approval这个Notification查看属性;按照如下画面设置Performer,也就是通知接收人。

接下来,把原来指向End的箭头左键拖到指向Requisition Approval;再从Requisition Approval右键拖一条线到End,重新布局

6、 保存到数据库,启动工作流

先找一个测试的账户:

SELECT r.NAME, r.display_name, r.orig_system, r.orig_system_id

FROM wf_roles r

WHERE r.NAME = 'AIC_CHUCK';

WF_ROLES说明:(Workflow的核心功能之一消息(Notification)发送人只承认此table资料)

Type of Role ERP用户,未和HR中的员工建立关联 ERP用户,和HR中的员工建立关联 不是ERP用户,而是HR中的员工 客户/员工 直接插入WF_LOCAL_USERS的记录 直接插入WF_LOCAL_ROLES的记录 职责 职位Position Orig_System FND_USR PER PER_ROLE HZ_PARTY WF_LOCAL_USERS WF_LOCAL_ROLES FND_RESP POS User_Flag Y Y N Y Y N N N

启动脚本:

DECLARE

l_item_key VARCHAR2(30) := 'CW_WF_DEMO_003'; l_user_item_key VARCHAR2(30) := 'CW_WF_DEMO_003_UK'; l_item_type VARCHAR2(30) := 'CW_WF001'; l_process VARCHAR2(30) := 'CW_TOP';

l_submiter_id NUMBER := 1013536; l_approver_id NUMBER := 1013556;

l_orig_system VARCHAR2(30) := 'FND_USR';

l_user_name wf_roles.NAME%TYPE;

l_display_name wf_roles.display_name%TYPE; BEGIN --01 创建

wf_engine.createprocess(itemtype => l_item_type, itemkey => l_item_key, process => l_process,

user_key => l_user_item_key); --02 初始化

wf_directory.getusername(p_orig_system => l_orig_system, p_orig_system_id => l_submiter_id, p_name => l_user_name, p_display_name => l_display_name);

wf_engine.setitemattrnumber(itemtype => l_item_type, itemkey => l_item_key, aname => 'SUBMITER_ID', avalue => l_submiter_id);

wf_engine.setitemattrtext(itemtype => l_item_type, itemkey => l_item_key, aname => 'SUBMITER_NAME', avalue => l_user_name);

wf_engine.setitemattrtext(itemtype => l_item_type, itemkey => l_item_key,

aname => 'SUBMITER_DSP_NAME', avalue => l_display_name);

wf_directory.getusername(p_orig_system => l_orig_system, p_orig_system_id => l_approver_id, p_name => l_user_name,

p_display_name => l_display_name);

wf_engine.setitemattrnumber(itemtype => l_item_type, itemkey => l_item_key, aname => 'APPROVER_ID', avalue => l_approver_id);

wf_engine.setitemattrtext(itemtype => l_item_type, itemkey => l_item_key, aname => 'APPROVER_NAME', avalue => l_user_name);

wf_engine.setitemattrtext(itemtype => l_item_type, itemkey => l_item_key,

aname => 'APPROVER_DSP_NAME', avalue => l_display_name);

--03 启动

wf_engine.startprocess(itemtype => l_item_type, itemkey => l_item_key);

COMMIT;

dbms_output.put_line(l_item_key); END;

7、 查看执行结果

用HENKEY账户进入系统:

用CHUCK账户进入系统接收通知:

8、 That is all

三、 含分支处理(Function)的Notification(Form Button提交)

1、 用Wizard创建新的Item Type,

Internal Name为CW_WF003,Display Name为CW_WF003_EMP

Process Internal Name为CW_EMP, Display Name为CW_EMP_FORM

2、 Create a new look up

P:选中Lookup Type/右键/New

可以直接使用Standard的Lookup Type;如果Standard的不符合要求,可以自己建;

然后增加两个Lookup Codes。

Type Lookup Types Lookup Codes Internal Name APP_TYPE NO YES Display Name Approve Type NO YES 3、 新建3个Attribute Internal Name EMPNO EMPNAME APPROVER Display Name Employee no Employee name APPROVER Type Number Text Text Length

4、 新建一个Message Internal Name MESS_APP Display Name Approve Message Text Body 工号:&EMPNO 姓名:&EMPNAME Subject New Employee need to approve Result Display Name:APP_MESSAGE 选择建立的LookUp

把建立的Employee Name 和No加到Message上来~

5、 新建一个Notification

在Notification:Requisition Approval属性的Activity标签页,Internal Name为APP_NOTI,Display Name为Approve Notification,Result Type为建立的LookUp

6、 新建2个Function 具体值如下:

Internal Name APP_EMP REJ_EMP Display Name Approve Employee Reject Employee Function Name XX_WF_EMP_PKG.approve_emp XX_WF_EMP_PKG.reject_emp

7、 修改Process的流程

从Standard中拖1个End Function过来,修改他们的Start/End属性为End;

并把建立的Function拉过来,重新布局~

并且要此时要修改Notification的Node属性,增加Performer(此属性只有当Notification布局到Process上的时候才显现)

8、 测试

保存到数据库,运行脚本;查看运行状态:

Start.sql

查看Notification结果:

Notification明细:

点击yes按钮,查看工作流

9、 That is all~ 四、 Others

1、 Message中的Html Body格式

Your Note: &NOTE

Please Approve The Following Document.

From &SUBMITER_DSP_NAME

Document Number: &DOCUMENT_NUMBER

Document Amount: &DOCUMENT_AMOUNT &NOTE

2、 常用隐藏按钮功能

(1) #HIDE_REASSIGN,可以隐藏标准的Reassign按钮

(2) #HIDE_MOREINFO,可以隐藏标准的Request Information按钮 (3) #HISTORY,可以隐藏标准的Action History 3、 审批流程

(1) 制作下面的审核流程

(2) 流程说明

? 用PLSQL启动工作流

? Create Table,启动工作流时,Insert初始资料

? 提交者、审核者的初始化放在Initialization节点执行

? 接收者,接到消息后,对于不同的回复,通过Function Update原来Insert

的单据资料 ? 单据ID是来源于Sequence,Item Key 、User Item Key都要通过Sequence

自动获取

4、 处理超时的Notifications

从Standard Funtion中把Loop Counter 拉到Process中,处理超时为处理的Notification

5、 Form提交Workflow

开发Form画面,然后用按钮功能等启动工作流; 6、 Workflow 提交Form画面

--格式'FUNCATION_NAME:PARAMETER=VALUE'

--Function_Name如果在系统中不存在,界面上就不会有那个链接 wf_engine.setitemattrtext(itemtype => itemtype,

itemkey => itemkey,

aname => 'OPEN_FORM_COMMAND', avalue => 'FND_FNDSCAUS'); 7、

五、

本文来源:https://www.bwwdw.com/article/ljz6.html

Top