之前介绍过 Windows 2003 平台上Form乱码的解决方法,现在系统已经升级到了Windows Vista,发现默认环境下也是有问题的,需要做一些简单的配置和调整: 关于登录Array VPN。必须关闭UAC才能启动Array VPN的Addon,否则,即便允许其执行,当授权返回后VPN也不会启动 关于启动Form。默认的JInitiator的jvm.dll版本太老,IE 7 已经不适用了。需要安装JRE 5或以上版本,然后将jvm.dll覆盖JInitiator的jvm.dll。 Form 启动后乱码。这是由于JInitiator没有相关的字体配置文件所致。请至安装目录下将lib目录中的font.properties.zh.5.1拷贝复制为font.properties.zh.6.0。6.0是Windows Vista的内部版本号。 OK,开始工作
Archives for November 2008
OAF的自验证:selfSecured
OAF的安全模式有两种,一种是standard,一种是selfSecured,默认是standard。如果设置为selfSecured,则由开发人员自行定义安全性验证,也就是对URL中传入参数的合法性验证。 之前介绍过 RF.jsp和fnd_run_function,它们是用于调用其他功能的。如果FND_VALIDATION_LEVEL和FND_FUNCTION_VALIDATION_LEVEL其中一个不为NONE,并且是调用OAF页面,则会自动添加oas参数,这是根据MAC key生成的加密字符串。访问页面时,系统会通过校验该值(通过URLTools.verifySecureURL)进行身份确认,如果不是同一个SESSION,则要求通过主页来重新进入。但是有时候,我们不想修改两个配置文件,同时又允许快速通过链接来访问OAF页面,该如何实现呢?关键就在于Security Mode。 当Security Mode为standard时,系统有默认的安全验证,即如上所述的特性。当其值设为selfSecured时,通过自行在控制器(Controller)中编写validateParameters来进行验证,如: public String[] validateParameters(OAPageContext oapagecontext, Vector vector) { String as[] = { “LEAD_ID”, “SOURCE”, “SECURESTR” }; return as; } 如果不在控制器中编写validateParameters,则依旧默认为standard的行为。
fnd_run_function
之前已经介绍过 RF.jsp,该功能是用于调用其他功能的。使用方式,也就是相应的参数,可以通过fnd_run_function.get_run_function_url生成。但是在使用该函数生成的URL时,根据不同系统的配置,可能有不同的效果,例如: You are trying to access a page that is no longer active. – The referring page may have come from a previous session. Please select Home to proceed. 中文: 您正在尝试访问不再有效的页面。 – 引用的页面可能来自上一会话。请选择 主页 以继续。 有两个配置文件可以控制该URL的生成: 1) FND_VALIDATION_LEVEL 2) FND_FUNCTION_VALIDATION_LEVEL 如果两个配置文件值都设置为NONE,则不进行MAC key的验证,同时URL也不会增加oas参数。此时访问RF.jsp就不会再出现会话无效的错误了。 当我们试图访问一个不再活动的页面时,如果引用页不是来自当前SESSION,则要求重新登录或从首页重新打开该页面。该验证就是由上述配置文件控制的,因此修改该配置时还需要考虑这一点,慎重操作。
OAF中使用Groovy
之前介绍过使用Groovy写并发程序。在OAF中使用Groovy也同样有趣,但是实际上,这里并不是直接使用Groovy语法,而是调用Groovyc编译后的class。 首先必须和EBS的java版本保持一致: bash-3.00$ java -version java version “1.4.2_04″ Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05) Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode) (这个版本,看着就头大) Groovy 1.6.x 是不支持java 1.4.x的,必须在1.5版本以上,所以在不升级EBS java版本的前提下,只能使用Groovy 1.5.x (目前最新版本是1.5.7)。遗憾的是,Eclipse不支持1.4.x =_= ,所以不能直接拷贝自动编译的class文件。真是有矛就不能有盾啊~ 步骤很简单: 1. 添加groovy-all-1.5.7.jar。或者解压后直接放到$JAVA_TOP目录下。 2. 在本地切换JAVA_HOME到1.4.x,编译groovy文件,生成相应的class。 3. 上传到服务器相应路径下,直接调用。 这里麻烦的就是本地编译的java环境需要切换一下,不知道有没有什么简便的方式来实现?
RF.jsp (Run Function)
在Oracle EBS中,不论是Form还是OAF,只要定义成功能了,就可以通过RF.jsp进行调用。这种方式有个最大的方便就是,你可以把链接放到任何你想放置的地方,比如说邮件正文。事实上,Oracle标准的调用方式也是如此。 一种标准的创建URL的方式是利用标准函数fnd_run_function.get_run_function_url。如: DECLARE l_url VARCHAR2(2000); BEGIN l_url := fnd_run_function.get_run_function_url(p_function_id => 28142, p_resp_appl_id => -1, p_resp_id => -1, p_security_group_id => -1, p_parameters => ‘ID=1′, p_override_agent => NULL, p_org_id => NULL, p_lang_code => ‘ZHS’); END; 该函数返回类似如下的字符串: http://host:port/OA_HTML/RF.jsp?function_id=28142&resp_id=-1&resp_appl_id=-1&security_group_id=-1&lang_code=ZHS¶ms=sj.duQd23zUdctTO-mG7b-T9WvvraxSBe-pGkPnFPbo&oas=nQRSW-NeNOUj7qtLxIOmIA.. 你看到URL末尾两个参数是加密的,其实与其说是加密,不如说是编码过的。Oracle使用WebSessionManagerProc对参数进行编码。个中玄机可以通过下面两个函数得到答案: — 加密 function URLEncrypt(key in varchar2, value in varchar2) return varchar2 as language java name ‘oracle.apps.fnd.security.WebSessionManagerProc.URLEncrypt(java.lang.String,java.lang.String) return java.lang.String’; [...]