壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7934|回复: 10

SRW

  [复制链接]
发表于 2006/11/3 10:26:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
SRW相关的东东我完全看不懂,很多弹性域设置中都用到.请教下,跟一般的SQL有什么区别?怎么使用?
发表于 2006/11/3 10:55:29 | 显示全部楼层
在讲解使用USER_EXIT之前先说明一下用户出口函数的概念:
说简单一点,用户出口函数就是使用PRO*C编写的函数(以Oracle的说法是第三代语言写的),而这类函数基本上没有任何的文档,以Oracle的说法就是“undocumented”,也没有源代码可以看到,因为系统只有编译好的可执行文件。

Report中使用USER_EXIT调用用户出口的语法:
SRW.USER_EXIT (user_exit_string CHAR),其中user_exit_string是用户出口函数的名称和参数

Form中使用USER_EXIT调用用户出口的语法:
USER_EXIT (user_exit_string VARCHAR2),其中user_exit_string是用户出口函数的名称和参数


那Oracle为什么要使用这类函数呢,根据我的经验和理解:
1。为了提高性能,由于有的业务逻辑比较复杂,使用PRO*C来实现可以提高性能
2。和操作系统相关的一些操作,由于这类操作涉及操作系统权限、I/O等,使用PRO*C实现最适合
3。某些业务逻辑不想让外界知道,使用PRO*C最好,隐藏业务逻辑

而在Oracle Report中需要去调用用户出口函数的时候就使用SRW.USER_EXIT函数来实现,在Oracle Report工具中经常使用SRW.USER_EXIT来取得一些和弹性域有关的值,最常见的就是关键性弹性域的描述,大家都知道,Oracle EBS中关键性弹性域中段值的描述是通过独立型值集来定义的,自己来写SQL取得段的描述比较麻烦,主要是随着系统设置的不同,弹性域段的结构是不一样的,而且会出现段之间存在依赖关系的情况,这样取得段值的描述就更麻烦了,而且在报表需求中可能有的地方需要显示一段,有的地方是两段,等等的需求。

而另外一个在Oracle Report常用的用户出口函数是关于本位币和外币转换和格式化的函数,由于很多使用需要在报表中即显示本位币的金额又需要显示外币的金额,但是系统中只存储了本位币的金额;而如果不使用用户出口函数来实现从本位币金额到外币金额的转换,那转换和格式化金额就比较麻烦,使用Oracle已经实现的用户出口函数就比较简单

在Report中如何使用弹性域的用户出口函数在开发手册上已经有了比较详细的使用说明,做一下简单的介绍,
大的步骤有两个:
1。使用 FND FLEXSQL 取得数据,FND FLEXSQL提供的功能就是动态组建SQL语句,并根据提供的参数进行查询
2。使用 FND FLEXIDVAL 来格式化数据并显示在报表上面,FND FLEXIDVAL提高的功能就是根据FND FLEXSQL取出的数据根据提供的参数进行格式化

详细的实现步骤在这儿就不说了,如果有人还需要就在以后再讲吧。

实际的例子可以查看GL模块中的标准报表 GLYRLGLG.rdf(Journals - Entry/日记帐 - 分录),当然有这种用法的报表非常多

而在Report中实现本位币和外币转换格式化的例子有APXINAGE.rdf(Invoice Aging Report/发票帐龄报表),使用的语法:
BEGIN
SRW.REFERENCE(:C_INV_DUE_AMT_3);
SRW.REFERENCE(:C_BASE_CURRENCY_CODE);
SRW.REFERENCE(:P_MIN_PRECISION);
SRW.USER_EXIT('FND FORMAT_CURRENCY
CODE=":C_BASE_CURRENCY_CODE"
DISPLAY_WIDTH="15"
AMOUNT=":C_INV_DUE_AMT_3"
DISPLAY=":C_INV_DUE_AMT_3_F"
MINIMUM_PRECISION=":P_MIN_PRECISION"');
RETURN(:C_INV_DUE_AMT_3_F);
END;

我随便拷贝了一个,我想参数一看就明白了,我就不说了。


而同样的功能函数在Oracle Form中也有,即USER_EXIT,功能都是一样:调用用户出口函数。
而在Form中用户出口函数的使用就更频繁了,而且种类也比较繁杂,就拿我们经常使用的一个Form,用户定义的窗口(FNDSCAUS.fmb)
大家可以打开看看它的源代码,其中就使用了好几个用户出口函数,只要看包Fnd_Encrypt_Pwd中的过程Change_Password,
我摘出了其中的两个出口函数

procedure Change_Password is
begin
-- Call custom package to do any custom password inspection.
user_exit('FND GLOBAL TYPE=USERNAME FIELD="GLOBAL.USER_NAME"');
--
-- Two entries match - encrypt new password
--
User_Exit('FND PWD TYPE="USER" '||
'USERNAME=":USER.USER_NAME" '||
'PASSWORD=":USER.USER_PASSWORD" '||
'OUT_E_USER_PWD=":USER.ENCRYPTED_USER_PASSWORD" '||
'OUT_E_ORCL_PWD=":USER.ENCRYPTED_FOUNDATION_PASSWORD" '||
'DECRYPT="N"');
end Change_Password;


其中上面两个用户出口函数的用法我就不说了。

通过上面的解说,我想答案大家已经知道了。出于用户函数的特殊使用场合、使用目的和实现方法,导致了
没有文档的情况,而仅仅有一两个是有文档的,那我们怎么去使用它们呢,那只有一个办法:
看到Oracle怎么使用就记下,下次需要的使用就使用它。
发表于 2006/11/3 10:57:50 | 显示全部楼层
bob不错啊,经典!
 楼主| 发表于 2006/11/3 12:44:46 | 显示全部楼层
哪儿可加分,偶来加加为bob加加分
发表于 2006/11/3 21:16:34 | 显示全部楼层

介绍的很不错

介绍的很不错.佩服啊
发表于 2007/5/9 14:11:54 | 显示全部楼层
BOB厲害,可是用戶出后函數中,ORACLE中道理有多少這樣的函數啊,還有開發手冊能不能傳一份給我啊,我還沒看過那東西呢?謝謝
发表于 2007/5/9 15:14:18 | 显示全部楼层
原帖由 jiangkunko 于 2007-5-9 14:11 发表
BOB厲害,可是用戶出后函數中,ORACLE中道理有多少這樣的函數啊,還有開發手冊能不能傳一份給我啊,我還沒看過那東西呢?謝謝

我是主要负责Oracle EBS 功能方面的工作的!给你找了些关于SRW资料,你看下,希望对你有用!

SRW.rar

2.37 MB, 下载次数: 57, 下载积分: 努力值 -5 点

发表于 2007/9/25 14:28:48 | 显示全部楼层

关注一下

关注一下!!!!
发表于 2010/10/6 14:02:25 | 显示全部楼层
学习,谢谢
发表于 2011/10/18 17:33:27 | 显示全部楼层
好东西呀,可惜还下不了……
发表于 2011/10/19 14:11:04 | 显示全部楼层
介绍还不错!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 23:39 , Processed in 0.027483 second(s), 20 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表