You are on page 1of 24

深入浅出Oracle EBS 11i

E-BUSINESS SUITE
XX100 –应用技术
给你一个敲门砖之Workflow

Author: 黄建华Jianhua.Huang
MSN: huajhua@hotmail.com
Creation Date: November 22, 2005
Last Updated: November 24, 2005
Document Ref: <Document Reference Number>
Version: DRAFT 1A

Approvals:

<Approver 1>

<Approver 2>

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Copy Number _____


深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

Document Control

Change Record
3

Date Author Version Change Reference

22-Nov-05 Jianhua.Huang Draft 1a No Previous Document

Reviewers

Name Position

Distribution

Copy No. Name Location

1 Library Master Project Library


2 Project Manager
3
4

Note To Holders:

If you receive an electronic copy of this document and print it out, please write your
name on the equivalent of the cover page, for document control purposes.

If you receive a hard copy of this document, please write your name on the front
cover, for document control purposes.

给你一个敲门砖之Workflow Document Control ii


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

Contents

Document Control ..................................................................................................................ii

1. Oracle Workflow基础 .............................................................................................. 1


1.1. 总体说明.............................................................................................................. 1
1.2. 必要设置.............................................................................................................. 1
1.3. 先睹为快:一个简单例子.Start to End ............................................................ 1
1.4. 先睹为快:一个简单例子.Save to Database ................................................... 7
1.5. 先睹为快:一个简单例子.运行 ......................................................................... 8
2. 其他特性和功能浏览 ............................................................................................... 12

3. 常用功能和代码块 ................................................................................................... 13

4. Workflow Notification Mailer Configuration .................................................... 14


4.1. Basic................................................................................................................... 14
4.2. Database Layer ................................................................................................ 15
4.3. Application Layer............................................................................................ 16
4.4. System Layer.................................................................................................... 17
4.5. Notification Mailer .......................................................................................... 18
5. Open and Closed Issues for this Deliverable...................................................... 21
Open Issues..................................................................................................................... 21
Closed Issues .................................................................................................................. 21

给你一个敲门砖之Workflow Document Control iii


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
1. Oracle Workflow基础
职责:Systemn Administrator

用户: SYSADMIN

1.1. 总体说明

Workflow是Oracle的法宝之一。

Oracle大部分流程的通知和审批控制、账户按规则自动生成都是通过Workflow实现
的。

可以说,和弹性域一样,Workflow是EBS的基础架构技术。

1.2. 必要设置

Workflow Builder安装

选择一个独立的Home。

配置Workflow Builder的tnsnames

按照往常步骤配置tnsnames和hosts。

如果是功能顾问,再看一下补充内容:通常从别人那里把tnsnames拷贝过来就可以,
不过有时候不行;道理很简单,tnsnames.ora和sqlnet.ora两个加起来才构成SQL*Net
协议的基本配置文件,而不同公司的sqlnet.ora可能会不一样;所以把这两个文件全部
拷贝过来就99.99%不会有问题了。

配置Workflow Builder的nls_lang

语言和区域设置成和数据库服务器一样;字符集一般也是一样;如果服务器端为
UTF8,那么就要设置成ZHS16GBK等,看情况而定。

配置服务器端

通常安装完EBS,服务器端就自动配置好了,除了Mail功能。

新版EBS都用基于Java的Notification Mailer。可以参考本文的“Workflow
Notification Mailer Configuration”章节,这里先略过。

1.3. 先睹为快:一个简单例子.Start to End

新建一个WFT文件

N: Workflow Builder/File/New
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005
在开发阶段Workflow源代码一般保存在本地,扩展名是wft。我们新建一个工作流文
件,然后保存,假定文件名为:CUX_WF_DEMO.wft。

新建一个Item Type

N: Workflow Builder/Edit/New/Item Type

给你一个敲门砖之Workflow Oracle Workflow基础 2 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005
Item Type是个抽象的概念,为方便理解,可以看作就是是一个工作流。

Internal Name相当于Code,在程序中经常用它来标志一个工作流;Display Name相


当于User Name。

引用标准Workflow

N: Workflow Builder/File/Open

我们选择从数据库打开,输入APPS用户名和密码及TNSNAME。找到Standard,点击
<<移入Visible区,OK打开。

打开后把Standard这个Item Type拖到我们创建的文件下面。

给你一个敲门砖之Workflow Oracle Workflow基础 3 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

然后赶紧关闭刚才打开的Standard工作流,以免误操作。N: Workflow
Builder/File/Close Store,在弹出的保存确认界面选择No。

*顺便看下,本地Workflow文件的图标和从数据打开的不一样。

以后在我们的工作流中就可以很方便的使用一些标准的工作流对象了。现在结果如
下:

创建一个Top Process

N: 右键Process/New Process

输入内部名称和显示名称。

实际开发中可以先建立子流程,在建立顶层流程。注意这里的Runnable是选中的,所
以该Process可以运行。一个Item Type下,可以有很多个Runnable的Process。

给你一个敲门砖之Workflow Oracle Workflow基础 4 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

Process是个流程图,由Notification、Function、子Process组成,开始于一个Start
Function,结束于一个或多个End Function,中间是Notification和Function组成的业
务流程,在这个级别上可以把Notification、Function、子Process看成是一样的即
activity,他们都有返回值,不同的结果走不同的流程,由此组成一个符合业务需要的
图表。

一个Process至少要包含一个Start和一个End节点,所以现在点击保存,会报
Validation Warning,不过还是可以保存到磁盘。

完成一个简单的Top Process

N:

双击Demo Top Process,可以看到,里面什么都没有。需要加入一些元素。

从下面的Standard下的Function中,把Stard和End拖到打开的Demo Top Process中,


结果如下:

给你一个敲门砖之Workflow Oracle Workflow基础 5 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

这个时候,要在这里修改一下属性。选中Start节点,右键,选择Property,把
Start/End从Normal改为Start:

同样,把End节点的Start/End从Normal改为End。

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

这样,一个最简单的工作流就做好了。结果如下:

给你一个敲门砖之Workflow Oracle Workflow基础 6 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

1.4. 先睹为快:一个简单例子.Save to Database

方式一:直接通过Workflow Builder保存到数据库

N: Workflow Builder/File/Save As

点OK就行。

方式二:Workflow工具WFLOAD

N: Telnet

首先用FTP工具把Oracle_EBS_11i_WF_DEMO.wft上传到应用服务器,比如
$FND_TOP/install。这里的例子是上传到客户化应用目录:$CUX_TOP/install。

然后运行wfload(注意UNIX区分大小写):

cd $CUX_TOP/install

WFLOAD apps/apps 0 Y UPLOAD $CUX_TOP/install/Oracle_EBS_11i_WF_DEMO.wft

给你一个敲门砖之Workflow Oracle Workflow基础 7 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005
如果有问题,可以查看.log文件。

方式三:请求Workflow Definitions Loader

N: System Administrator/View/Request/Submit

首先用FTP工具把Oracle_EBS_11i_WF_DEMO.wft上传到应用服务器,同上。

然后到系统管理员职责提交请求:

嘿嘿,Mode选Upload,File要写绝对路径,上面的画面用环境变量是有问题的哦!
Item Type放空。

1.5. 先睹为快:一个简单例子.运行

方式一:Workflow管理界面

N: System Administrator/Workflow/Administrator Workflow/Home

给你一个敲门砖之Workflow Oracle Workflow基础 8 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005
实际上可以从很多地方进,而且不同版本不一样。这里是11.5.9以上的版本,之前的版
本直接就有Find Process菜单。

切换到“Developer Studio”Tab页,输入查询条件,这里输入Internal Name:


CUX_DEMO,查询结果如下:

注意,只有Workflow的管理员用户进来后面才有Run列!

SELECT wfr.text FROM wf_resources wfr WHERE NAME = 'WF_ADMIN_ROLE'


AND wfr.LANGUAGE = 'US'可以查看当前的Workflow管理员。*代表所有人。

也可以从上面的画面的“Administrator”Tab页查看和设置。

接下来,点击 ,出来:

按照上图内容输入。Item Key是本工作流运行实例的标志;相对的保存在数据库中
Item Type可理解为一个定义或者一个Template。User Key是用户看到的实例标志。

点击Run Workflow。

运行情况查看

N: System Administrator/Workflow/Administrator Workflow/Home

选择“Status Monitor”Tab页。输入查询条件查询,出来刚才运行的CUX_DEMO实
例:

给你一个敲门砖之Workflow Oracle Workflow基础 9 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

点击Status Diagram,可以看到,由于例子太简单已经运行到终点,且都是“绿
线”,说明没有错误:

方式二:PL/SQL启动

N:

DECLARE
l_item_key VARCHAR2(30) := 'CUX_DEMO_002';
l_user_item_key VARCHAR2(30) := 'CUX_DEMO_UK_002';
l_item_type VARCHAR2(30) := 'CUX_DEMO';
l_process VARCHAR2(30) := 'CUX_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;

END;
给你一个敲门砖之Workflow Oracle Workflow基础 10 of 24
File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005
既然是PL/SQL,所以在Form等地方也是这样启动的。

接下来和上面的方式一一样去“Status Monitor”Tab页查看了。

给你一个敲门砖之Workflow Oracle Workflow基础 11 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

2. 其他特性和功能浏览

给你一个敲门砖之Workflow 其他特性和功能浏览 12 of 24
File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

3. 常用功能和代码块

给你一个敲门砖之Workflow 常用功能和代码块 13 of 24
File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

4. Workflow Notification Mailer Configuration


这里指嵌在EBS中的Workflow。

完整的参考资料见Oracle的《Oracle Workflow Administrator's Guide》。

$FND_TOP/admin/sql下有Workflow管理和诊断脚本。

4.1. Basic

设置步骤

摘自Oracle Workflow Administrator's Guide。下面的章节详细说明Required的和比


较有用的设置步骤。

目录服务

Worflow的核心功能之一就是消息(Notification),要发消息,当然要有接收人,这
个接收人可能是一个user、一个employee、一个Responsibility、一个客户、一个职位
等等。

在EBS中这些接收人分散在各个模块的各个表中,而Worflow Engine仅承认WF_表中
的接收人。

给你一个敲门砖之Workflow Workflow Notification Mailer Configuration 14 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005
Oracle目录服务的作用就是把这些分散的资料按照统一的格式集中起来,存在
WF_LOCAL系列的表中,并以来源字段区分。这样我们在程序中如果要找某一个接收
人,仅从WF_LOCAL系列的表中查询即可(实际应用中,是调用一个标准API从
WF_ROLES视图取数),不需要记住所有的源表。

接收人分用户和角色,角色包含一个或多个用户,对应的视图为
wf_users/wf_roles/wf_user_roles。如果消息的接收人为职责,那么这个职责下的所
有用户都会收到消息。这个好理解,不多说。

下面以EBS的登录user为例。

1. 原来存储的表为:fnd_user,假定这里面有个用户User_Name为huajhua,User_ID
为1001
2. 对应一个按照目录服务格式要求的视图:wf_fnd_usr_roles
3. WF Bulk Synchronize Local Tables请求会把wf_fnd_usr_roles的数据同步到
wf_local_roles中,orig_system字段标志为fnd_usr
4. 如果以后我们要发通知给huajhua,那么通过API可以获得该用户:
WF_DIRECTORY.GETROLENAME(‘FND_USR’, 1001,x_name,x_displayname)

值得一提的是如果User和Employee关联了,那么orig_system将是PER。举几个例
子:
Type of Role Orig_System User_Flag
ERP用户,未和HR中的员工建立关联 FND_USR Y
ERP用户,和HR中的员工建立关联 PER Y
不是ERP用户,而是HR中的员工 PER_ROLE N
客户/员工 HZ_PARTY Y
直接插入WF_LOCAL_USERS的记录 WF_LOCAL_USERS Y
直接插入WF_LOCAL_ROLES的记录 WF_LOCAL_ROLES N
职责 FND_RESP<ID> N
职位Position POS N

更详细的说明请看Oracle Workflow Administrator's Guide。

所以,总的来说,Workflow的目录服务就是收集用户和角色信息,以统一的格式提供
给Workflow消息系统使用。包括:

1. 一套本地表:WF_LOCALXXX
2. 一套实际使用的视图:WF_USERS/WF_ROLES/WF_USER_ROELS
3. 一套各来源视图:WF_<Orig_System>_ROLES
4. 一个批量同步请求集:Synchronize Workflow LOCAL tables(增量同步需要安装
Patch,请看Notes171703.1)
5. 一套API:WF_DIRECTORY

4.2. Database Layer

Table Partition

随着业务的增长和历史数据的增多,有几个工作流的表会越来越大,如果不进行分
区,其性能(DML和Export/Import)是比较糟糕的。默认情况下,只有目录服务的
几个表是按来源分区过的;其他的表,需要运行
%FND_TOP%/admin/sql/wfupartb.sql来分区。值得一提的是,wfupartb.sql本身是

给你一个敲门砖之Workflow Workflow Notification Mailer Configuration 15 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005
学习Oracle Partition的最好材料。我的11.5.10没有打补丁,wfupartb.sql是空的;我是
从客户那里看wfupartb.sql的,它们是11.5.9。

需要分区的表和索引为:目录服务表、WF_ITEM_ACTIVITY_STATUSES及索引、
WF_ITEM_ACTIVITY_STATUSES_H及索引、WF_ITEM_ATTRIBUTE_VALUES及
索引、WWF_ITEMS及索引。以WF_ITEM_ATTRIBUTE_VALUES为例,它保留的是
工作流实例的各个属性值,华为在Purge之后这个表仍然有7000万条记录,Export这个
表要37个小时。

以下SQL用来查看分区情况:
SELECT t.owner, t.table_name, t.partitioned
FROM all_tables t
WHERE t.table_name LIKE 'WF%'
ORDER BY t.partitioned

4.3. Application Layer

Directory Service

在System Administrator下,跑Synchronize Workflow LOCAL tables即可。该请求集


建议计划运行。

如果我们加了个fnd user,但没跑这个同步程序(可能是还没到计划时间),那么
Workflow并不知道有这个用户存在,这就导致为什么有“我跑过了Fill Employee
Hierarchy,为什么通知还是没发到XXX”的问题。实际上,对于通知没发到XXX的问
题,有如下原因:

1. 程序错误,没有设置正确的Notification Performer
2. 如果是PO,可能没跑Fill Employee Hierarchy
3. 一个Employee分配给了多个User,那么其实只有第一个User收到了消息
4. 数据还没有同步到Workflow,即没跑Synchronize Workflow LOCAL tables

Background Engines

Workflow Background Process请求用来处理Timeount、Defer、Stuck的工作流;通


常情况下我们需要分别为处理超时、阻塞、挂起各Schedule一个Workflow
Background Process。

如果我们Schedule了该请求,但有时候等不及,也可手工提交;下面的例子是最常见
的处理销售订单行Defer的请求:

给你一个敲门砖之Workflow Workflow Notification Mailer Configuration 16 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

4.4. System Layer

Global Preferences

定义Workflow全局参数。仅需关注两个参数。

Workflow System Administrator默认是sysadmin,说明只有sysadmin可以查看、管


理任何workflow和实例;*表示任何人都可以。

Notification Style,默认是Do not send me mail,说明通知只能通过登录EBS后查看,


不能通过Email。

N: SYS/Workflow/Global Preferences

参考SQL: SELECT * FROM wf_resources WHERE NAME = 'WF_ADMIN_ROLE'。


参考设置:
Parameter Value
Workflow System Administrator *
Notification Style HTML mail

给你一个敲门砖之Workflow Workflow Notification Mailer Configuration 17 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005
WF_RESOUCE环境变量

WF_RESOURCE环境变量用于存储指向Workflow资源文件,EBS的资源文件为
%FND_TOP%/%APPLRSC%/wf<language>.res,不需要设置该变量。

4.5. Notification Mailer

目前,Oracle Workflow支持SMTP协议(默认端口是25)处理出站消息、IMAP4协议
(默认端口是143)处理进站消息,这也是Oracle Workflow对Mail服务器的要求。可
以使用Microsoft Exchange作为Mail服务器,简单点,我们使用Imail。

IMAP4是Oracle Workflow Server对Mail Server的要求,对于用户,其客户端可以使


用不支持IMAP4的Foxmail。

Imail设置

1. 按照默认选项安装Imail
2. 启动Imail的服务:SMTP/IMAP/Queue Manager/POP3
3. 创建Notification Mailer需要的用户,假定是wfmail;另外再建一个测试账号
huajhua
4. 用邮件客户端(文档说必须,所以我用Imail自带的Client)给wfmail创建三个目
录:INBOX、PROCESS、DISCARD

进入Workflow的配置管理界面

1. 进入OAM,需要有System Administrator职责:

2. Navigate to Worflow Manager

3. 进入Service Components管理界面

给你一个敲门砖之Workflow Workflow Notification Mailer Configuration 18 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

启动两个Container服务

从Container选择Workflow Mailer Service,进入该容器服务控制界面。然后先后启动


Workflow Mailer Service和Workflow Agent Listener Service。

* 这两个玩意儿其实是Concurrent Manager的两个Adminster。启动这两个服务后,到
系统中去看,这两个Administer也起来了。

回到Service Components管理界面,发现需要的服务只有Workflow Notification


Mailer由于没有配置过而没有起来。

配置Workflow Notification Mailer

选择Workflow Notification Mailer,点击下面的Edit按钮,有8个步骤,跳过1、5、


6。
给你一个敲门砖之Workflow Workflow Notification Mailer Configuration 19 of 24
File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

参考设置:
Parameter Value 说明
0 表 示 没 有 Inbound 消 息 , 这 样 就 不 要 求
Inbound Thread Count 0
Mail服务器支持IMAP4
Inbound EMail Account
Server Name huajhua 邮件服务器
User Name wfmail 用户名
Password wfmail 密码
Outbound EMail Account
Server Name huajhua 邮件服务器
User Name wfmail 用户名
Test Address test@huajhua
Send
Reply-to Address wfmail@huajhua

第7步是测试,一定要从LOV里面选一个角色,Oracle会按照这个角色的
“Notification Style”给前面设置的Test Address发一个通知,请记住ID号。

测试角色有两个要求:emali地址(随意)、mail类型的Notification Style。否则mail
无法正确发到Test Address。

第8步完成后,回到Service Components管理界面,发现Workflow Notification


Mailer也起来了。

测试

用客户端收test@huajhua的信,看ID号就可以知道是第7步测试步骤发来的;最直接就
是在Imail的管理器里面看相应用户的邮箱是否有东西。

给你一个敲门砖之Workflow Workflow Notification Mailer Configuration 20 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only
深入浅出Oracle EBS 11i Doc Ref: <Document Reference Number>
November 24, 2005

5. Open and Closed Issues for this Deliverable

Open Issues

ID Issue Resolution Responsibility Target Date Impact


Date

Closed Issues

ID Issue Resolution Responsibility Target Date Impact


Date

给你一个敲门砖之Workflow Open and Closed Issues for this Deliverable 21 of 24


File Ref: Oracle EBS 11i应用技术之Workflow.doc (v. DRAFT 1A )
Company Confidential - For internal use only

You might also like