Oracle Apps R12——报表入门:如何定义一个Concurrent Program(请求)
1 简介
Concurrent Program指的是一种可以在后台异步运行的程序,通常用于执行批处理任务、报表生成、数据同步等。
另外,定义一个Concurrent Program,实际上就是在系统中定义一个“请求”(Request),然后通过权限配置,允许特定用户或用户组去调用(提交)这个请求。
换句话说:
- Concurrent Program = 一个可执行的请求
- 你先定义这个请求(包括程序、参数、执行方式等)
- 然后把这个请求分配给用户或请求组,赋予他们调用权限
- 用户通过提交请求来执行对应的程序
- 这样的请求是可以多个请求并发异步执行的,且可以被系统实时监控。
另外,这里还有一些简单但可能有用的概念:
名称 | 含义 | 备注 |
---|---|---|
Oracle Applications-SIT | Oracle Applications系统的集成测试阶段 | 不是产品名称,是测试阶段描述 |
Oracle E-Business Suite | Oracle的企业管理软件套件(ERP系统) | 产品套件名称,包含多个版本和模块 |
Oracle Apps R12 | Oracle E-Business Suite的第12版 | EBS的一个具体版本,功能更完善 |
2 Oracle Apps R12下如何定义一个简单的Hello World的Concurrent Program
2.1 第一步:PLSQL Developer数据库后台定义一个可执行的“Procedure”
“Procedure”在数据库和编程领域中,通常指的是存储过程,它是一段预先编写并存储在数据库中的可执行代码块。
在PLSQL Developer运行下列代码:(登录的数据库需要和Oracle Apps R12一样)
create table ptian_table
(message_text VARCHAR2(100)
,creation_date DATE
) ;CREATE OR REPLACE PROCEDURE PTIAN_HELLO (errbuf OUT VARCHAR2, retcode OUT VARCHAR2) IS
BEGININSERT INTO ptian_table VALUES ('Hello World' ,SYSDATE);
END PTIAN_HELLO;
--两个参数用于concurrent program和pl/sql Program的交互
参数名 | 类型 | 作用说明 |
---|---|---|
errbuf | OUT VARCHAR2 | 用于返回错误信息或提示信息,程序执行中如果有错误,可以通过这个参数传递错误描述给Concurrent Manager。 |
retcode | OUT VARCHAR2 | 用于返回执行状态码,通常用数字表示执行结果(如0表示成功,非0表示失败),Concurrent Manager根据这个值判断程序执行是否成功。 |
Oracle Concurrent Manager调用PL/SQL程序时,要求程序必须有这两个OUT
参数,作为标准接口。
这样,Concurrent Manager可以:
- 通过
retcode
判断程序执行是否成功。 - 通过
errbuf
获取错误信息,方便日志记录和用户提示。
2.2 第二步:定义Executable(可执行文件/程序)
Executable是Oracle EBS中对“可执行程序”的抽象定义。
它告诉系统,某个Concurrent Program背后实际运行的是哪个程序或过程(比如一个PL/SQL存储过程、一个操作系统脚本、一个Java程序等)。
通过Executable,系统知道如何调用具体的代码来执行请求。Execution File Name这里需要为我们刚刚写入数据库的Procedure的名字:
- 这里的“Procedure”指的是数据库中的存储过程(PL/SQL Procedure)。
- 你把Execution File Name设置成存储过程的名字,意味着这个Executable对应的就是调用这个存储过程来完成任务。
- 当用户提交对应的Concurrent Program请求时,系统会执行这个存储过程。
具体操作:Application Developer职责下: Concurrent > Executable,定义一个新的Executable,Execution File Name为Procedure的名字
2.3 第三步:定义Concurrent Program(并发程序)
通过定义Concurrent Program,系统知道用户提交的请求是什么,如何执行,执行时需要哪些参数。它是用户提交请求的“入口”,用户通过它来调用后台程序。
Concurrent Program是Oracle EBS中一个“业务请求”的抽象表示。它定义了用户可以提交执行的具体任务,包括:
- 关联的Executable(即实际执行的程序或存储过程)
- 传入的参数(参数名称、类型、默认值等)
- 运行方式(同步或异步)
- 输出格式(如报表格式PDF、Excel等)
- 其他属性(如请求优先级、日志级别等)
具体操作:切换到Concurrent > Program下,定义Program
2.4 第四步:绑定Concurrent Program到Request Group
Request Group是Oracle EBS中管理请求(Concurrent Program)的权限集合。
通过把Concurrent Program添加到Request Group,系统将该程序纳入该组的权限范围内。只有拥有该Request Group权限的用户或职责(Responsibility)才能看到并提交这些请求。
(1)实现权限控制和访问管理
- 控制哪些用户能执行哪些Concurrent Program,防止未经授权的访问。
- Request Group与Responsibility关联,用户通过职责获得对应的请求权限。
- 这样可以根据业务角色、部门、岗位等灵活分配权限。
(2)简化权限管理
- 把多个相关的Concurrent Program组织到一个Request Group中,方便统一管理。
- 例如,财务相关的报表和程序放在“财务报表”Request Group,采购相关的放在“采购请求”组。
- 通过分组管理,权限配置更清晰、易维护。
(3)实现职责与请求的映射
- 用户登录系统时,系统根据其职责加载对应的Request Group,显示该组内的请求。
- 用户只能看到和提交自己职责范围内的请求,保证业务隔离和安全。
(4)支持灵活的业务流程设计
- 不同职责可以绑定不同的Request Group,实现多角色、多业务线的请求访问控制。
- 方便企业根据组织架构和业务需求调整权限。
具体操作步骤:然后切换到System Admin职责,Security > Responsibility > Request,把刚定义好的Program绑定到一个Request Group里。
具体绑定到的Request Group信息如下:
- Group Name(请求组):INV reports
- Application(应用):Bills of Material
- Code(代码):CST_INV_REPORTS
- Description(描述):INV reports
把Concurrent Program绑定到了名为 “INV reports” 的Request Group里,这个Request Group属于 Bills of Material 应用模块,代码是 CST_INV_REPORTS。这个Concurrent Program现在成为了 INV reports 这个请求组的一部分。
只有拥有包含该Request Group的职责(Responsibility)的用户,才能看到并提交这个Concurrent Program。现在,我们假设有一个职责叫“Inventory Manager”,它绑定了Request Group “INV reports”,那么:
- 拥有“Inventory Manager”职责的用户登录后,系统会加载“INV reports”请求组中的所有Concurrent Program。
- 这些用户就可以看到并提交你刚绑定的Concurrent Program。
2.5 第五步:运行Program
接下来就可以执行了,切换到刚刚绑定了请求组"INV reports"的职责下,运行Program:
运行完毕,EBS顶部的侧边栏找到”查看“,选择”请求(R)“,打开后界面如下:
我们的请求名字是”PTIAN Hello World“,选择”特定请求“,之后可以填入到”名称“的字段,然后直接查找即可。或者使用模糊查询直接”%P“。
用SQL:SELECT * FROM ptian_table;来查看测试表的数据