RF.jsp (Run Function)

Posted on November 5, 2008

在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&params=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';

-- 解密
function URLDecrypt(key in varchar2, value in varchar2)
  return varchar2
  as language java name 'oracle.apps.fnd.security.WebSessionManagerProc.URLDecrypt(java.lang.String,java.lang.String) return java.lang.String';

这里的key,实际上就是DBID,可以通过fnd_web_config.database_id来获取。加密和解密必须针对同一个数据库,否则会导致CRC校验失败。

Related Posts

  1. 使用EBS日志功能
  2. APEX与EBS登录权限集成
  3. OAF的自验证:selfSecured
  4. SQL*Plus 模拟 EBS环境
  5. 破解 Oracle E-Business Suite 用户密码

» Filed Under E-Business Suite Print This Post Print This Post

Comments

Leave a Reply