Archives for 2008

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&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’; [...]

Workflow Notification Email charset

非英语国家阅读电子邮件,最讨厌的莫过于乱码。在工作流邮件中,以前都用Outlook,它对语言编码的兼容性是最好的,所以也没发现过什么问题,最近将客户端迁移到Gmail,才发现工作流邮件的编码有点问题。 直接查看邮件源码。标题: Subject: =?WINDOWS-936?B?(……省略……)==?= 正文编码: Content-Type: text/plain; charset=WINDOWS-936 Content-Transfer-Encoding: quoted-printable Content-Language: en 查询工作流默认语言及编码配置: 1 SELECT wl.nls_codeset 2 FROM wf_languages wl 3 WHERE wl.code = ‘ZHS’; NLS_CODESET —————————— ZHS16CGB231280 在这里,WINDOWS-936 是Windows中的简体中文的字符集,工作流邮件的字符集,是默认为我的邮件客户端应该是运行在Windows上吗?不知道Linux中的Mutt能否正确显示中文……不管它,既然是charset的问题,总是能配置的。 进入Workflow Manager,选择Workflow Notification Mailer并编辑,进入高级编辑选项,一路next到第4步: 选中Rest NLS,意思就是工作流通知邮件根据收件人首选项设置的字符集进行编码。修改完毕后发送测试邮件,看邮件代码: 标题: Subject: =?UTF-8?B?(……省略……)?= 邮件正文: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Language: en OK,告别乱码。

停止发送工作流邮件

Notification Mailer停用一段时间后,总会积累一些待发送邮件,因此如果有需要重启mailer,需要清理过期的邮件。步骤如下: 更新WF_NOTIFICATIONS 中的STATUS为CLOSED,MAIL_STATUS为SENT。 如果STATUS为OPEN,MAIL_STATUS为MAIL,表示这部分数据将被送入发送队列。因此,此处需要手工标记为已发送。 $FND_TOP/patch/115/sql/wfntfqup.sql 更新队列。 (更新数据到WF_NOTIFICATION_OUT表,这里存放格式化后的邮件发送队列。注意,必须在停止Mailer和相应的Service Container后才能进行此步操作。) 之后用$FND_TOP/sql/wfver.sql检查WF_NOTIFICATION_OUT的Ready数目。 然后重启Workflow Notification Mailer即可。 P.S: 你也可以修改WF_NOTIFICATIONS中的BEGIN_DATE来修改发送日期

使用Groovy写并发程序

最近InfoQ上关于Groovy的文章越来越多了,让Java也进入脚本时代,这对于我这种语言学习懒人来讲确实太妙了。 PL/SQL很强大,也很有限,可以用来发邮件、写网页、文件处理、简单的Socket功能,以及少数Oracle数据库支持的其他功能。如果在异构系统之间处理数据,我目前只能靠简单的Shell脚本和Java程序了。其实在ERP实施的工作中,让一个非程序员出身的家伙写复杂代码,也够委屈的,但是很多情况下,却又不得不亲自动手去写点东西。Groovy给我的第一印象是,我或许可以从头疼的Java代码中解脱出来了——事实上,我从来就没深入学习过。好了,言归正传。 Oracle EBS 11i(也包括R12)支持以下类型的并发程序: 主机 (只要shell中能执行的就可以) 立即 Java 存储过程 Java 并发程序 多语言功能 Oracle Reports PL/SQL 存储过程 请求集阶段函数 派生 SQL*Loader 程序 SQL*Plus Perl 并发程序 Oracle 已经自带了jvm和Perl,其实这已经说明,它是支持任何脚本语言的,比如Python,比如PHP,因为这些脚本语言的支持和Perl是同一性质的。这里以Groovy为例(很遗憾,我个人对Python和PHP挺有兴趣,但是在工作中,它们还不在我的推荐列表中)做一个并发请求。

修改XML Publisher的tmp路径

Oracle的XML Publisher Desktop是Word的一个Addon,可以在本地转换成PDF、Excel等格式,每次预览时,都会自动生成一个临时文件,通常的存放路径为: C:\Program Files\Oracle\XML Publisher Desktop\Template Builder for Word\tmp 这里有件事很讨厌,就是它每次预览都会生成新的文件,却没有办法自动清空。注册表中只有Template Builder for Word的路径设置,这个tmp没法单独设置。我习惯将临时文件统一存放到用内存虚拟的硬盘分区中,这个路径既然没地方修改,那只能来硬的了。 Windows支持硬链接(按官方的说法是,文件可以hardlink,目录则是junction),何不直接将这个目录链到虚拟硬盘的某个目录上去? >ln I:\Template_Builder_for_Word\tmp tmp I: 盘是我的虚拟硬盘盘符,使用Windows版本的ln将虚拟硬盘中的某路径链接至XML Publisher Desktop的tmp目录。以后所有在tmp目录中产生的临时文件,实际上依旧在我的内存里。 Windows版ln下载地址:http://www.mediafire.com/?n5mm2qq5v3z