2008年3月7日星期五

编译失效对象

正在尝试XML Gateway,出现问题,做了一个debug,发现问题的大概位置,然后在系统标准的package中ECX_UTILS中增加了几行语句,然后编译到数据库。

发现无效的对象又多了一个,集中在ECX开头的几个Package,然后通过TOAD,查看系统中APPS这个Schema下的失效对象,将EXC开头的Package选中,重新编译。刷新后,失效对象越来越多。

最后没有办法,只有请DBA在Unix端,通过ADAdmin来运行编译命令,解决问题。

但是为什么会出现开始失效对象越来越多的情况呢?

2008年1月29日星期二

怎样限制并发请求只能在指定时间运行?

怎样限制并发请求只能在指定时间运行?

定义新的并发管理器,通过“Specialization Rules”将需要限定运行时间段的并发请求添加到新定义的并发管理器中。再定义work shift,定义并发请求的运行时间段,并将这个work shift分配给新定义的并发管理器。


步骤(没有图片,arsenefang已发):
1) 定义work shift。






2) 定义并发请求管理器。















3) 通过Specialization Rules将需要限制将需要限定运行时间段的并发请求添加到新定义的并发管理器中。







4) 将work shift分配给并发管理器。







其他测试:
1) 对于新定义的并发请求,并不会自动分配给某一个并发管理器,需要手工添加。
2) 如果已经将一个并发程序分配到某一个并发管理器A,但是实际上却在另一个并发管理器B中运行,需要检查另一个并发请求管理器中是否也包括(include)了这个并发程序。如果不希望并发程序在B中运行,可以在B通过exclude这个并发程序。

想知道并发程序究竟在哪些并发管理器中?
通过界面查询比较麻烦,不能根据并发程序的名称进行查询,如果需要,可以通过如下SQL来完成。

SELECT a.type_id, a.queue_application_id, a.concurrent_queue_id, a.type_code,
a.type_id, a.include_flag, d.user_concurrent_program_name,
c.description, c.user_concurrent_queue_name
FROM applsys.fnd_concurrent_programs_tl d,
applsys.fnd_concurrent_queue_content a,
applsys.fnd_concurrent_programs b,
fnd_concurrent_queues_vl c
WHERE (a.type_id = b.concurrent_program_id)
AND (a.type_application_id = b.application_id)
AND (b.application_id = d.application_id)
AND (b.concurrent_program_id = d.concurrent_program_id)
AND a.concurrent_queue_id = c.concurrent_queue_id
AND d.user_concurrent_program_name = Your concurrent program name

3) 对于有两个并发管理器都包括同一个并发程序,这个并发程序究竟在哪个并发管理器中运行,比较随机。可能,哪个free,哪个work。这和设定process的个数,sleep的时间相关,还请有研究的同志多多发言。

2008年1月15日星期二

form的label变更影响了qarun的脚本

一直运行的qarun脚本突然不能收集其中几个事务的性能数据了,搞了老半天才发现ERP升级之后,其中的某一个form的label名字更改了,从QUERY_MANAGER_×××变成了QM_×××。所以,脚本怎么也不能定位对应的field,出现错误,脚本便退出了。

是个小问题,开始还以为是预置文件的问题,因为还出现FND: Developer Mode未设置的错误,一直怀疑这个来着。

搞定手工。

2007年12月13日星期四

sun-web.xml之痛

去年开发的系统,突然出现了问题,问了原来的开发的成员,说时间太久忘了,只要找我,其实我也差不多忘了。

错误主要是在显示系统中详细信息和保存项目的时候,很快就定位是iplanet端数据库连接池配置问题。

于是,让DBA检查,将密码重新设置,没有成功。
让DBA发过来日志有如下错误,可能是sun-web.xml文件有问题,是不是UNIX下字符出现错误,将我本机的这个文件发过去给DBA,没有成功。

WEB0120: XML error parsing deployment descriptor [/~~~~~~~~/wwwroot/WEB-INF/sun-web.xml]
Failed to create the XML-DOM Document. Check your XML to make sure it is correct.
java.net.ConnectException: 连接超时 at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3376) at org.apache.crimson.parser.Parser2.externalParameterEntity(Parser2.java:3064) at org.apache.crimson.parser.Parser2.maybeDoctypeDecl(Parser2.java:1347) at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:656)


最后,重新考虑这个日志的时候,忽略了“java.net.ConnectException: 连接超时 ” 这个错误。怎么会网络访问,重新检查sun-web.xml,发现DOCTYPE节点,其声明的dtd文件是指向http://www.sun.com/的,可能这就是问题所在。以前从来没有注意这个问题,对于DOCTYPE,PUBLIC指定DTD文件是在系统之外,需远程访问;如果是SYSTEM,就在本地找寻dtd文件。虽然在我机器上将网络断开,没有重现这个错误,但是比较肯定系统就是遇到这个问题。将这个节点去掉,将sun-web.xml发给系统管理员,果然成功了!


<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 8.1 Servlet 2.4//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_4-1.dtd">

另外,将系统迁移到iplanet的时候,磕磕碰碰,花费了以整体的时间,记录下来以备忘。

1)Iplanet的版本。
从sun的官方网站下载要注册,我原来有帐户但是忘了,于是从别的地方下载了一个。本来是要6.1版本的,下来发现是6.0的,这就是后面很多错误的根源。
部署完成之后,访问系统的时候,总是出现如下错误:
“"No WebApplicationContext found: no ContextLoaderListener registered"”
在web.xml中增加如下内容,可以Iplanet可以成功启动。

<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>



但是访问系统的时候,出现Servlet 2.2中不支持setCharacterEncoding() 错误。乖乖,原来IPlanet只支持Servlet 2.2,而我需要的是2.3版本。于是从Sun上下载了6.1颁布,不需要在web.xml增加上述那段,部署成功。

2)数据库连接池的建立
在Iplanet端建立了连接池,出现总是找不到驱动程序的错误,而实际上classes2.jar已经在WEB-INF/lib路径下。最后在JVM Path Settings中将JDBC的路径直接出入,解决这个问题。








3)Iplanet程序的部署。


首先是将Web程序打包成war。但是Iplanet部署war文件的时候有大小限制,可以先不降lib目录打包,待部署完成再拷贝过去。
部署应用。其对应的路径为:
Administration Server > MyServer > vsclass1 > WebApplication。
其中MyServer是系统默认建立的服务器,vsclass1是系统默认建立的虚拟class。可以同时管理n个服务器,一个服务器上又可以建立n个vsclass1,一个vsclass可以对应多个WebApplication。所以,从左到右都是1:n的关系。为什么会有vsclass1的概念呢? 这是因为对于某些Web Application,其配置可能绝大部分相同,所以可以统一在vsclass层次定义就可,这些Web Applications共享这些设置。这个设计应该是为哪些提供hosting服务的机构设定的吧。但是看看现在hosting,绝大部分都在使用LAMP。
然后就是在vsclass层建立,数据库链接池和JDBC的Resource。
最后别忘了将lib拷贝到Web Application的WEB-INF目录下。


总结,
1) 最初发现问题的时候,虽然大概定位,但是没有再深究问题的根本,再加上时差的问题,问题解决效率不高。
2) 没有模拟服务器环境,而开始只在Tomcat上测试,而sun-web.xml在Tomcat环境下是不需要的,对问题的重现带来困难。
3) 在定位sun-web.xml文件的错误之后,没有静下心来研究文档结构,而是意味怀疑字符问题,耽误解决问题的时间。

Any way,问题总算解决了,休息一下,休息一下。

2007年12月4日星期二

拷贝定时执行的任务

测试机器上的定期运行的任务停止运行已经有快两个星期,最后一次运行应该是感恩节前了。主要的问题是通过执行程序“Start ClientVantage.exe”再也不能生成计划任务 “Standard Transactions” 了。重新启动,OS升级,杀掉系统中的相关进程都不能。虽然是测试机器,但是数据有时候还是有一定参考意义,今天暂时找到一个方法。

1. 从别的机器上将Windows/tasks下的“Standard Transactions”任务拷贝到测试机器的Windows/tasks目录下。
2. 执行的时候应该会出现“Can not start”的错误,那么就编辑这个任务,将开始时间更改一下,系统会提示让你输入这个操作系统的密码,输入完成确定之后,任务就可以正常执行了。


这只是一个暂时的方法,对于每天重新启动,还是不能应付,再想办法。

2007年11月6日星期二

怎样disable掉Supplier Item Catalog Window中的标签页

怎样disable掉Supplier Item Catalog Window中的标签页
在采购模块中,如果从菜单Supplier Item Catalog进入,输入条件,点击Find,就会进入如下的界面。在这个界面中,如果我只想要用户只能够看到“Requisition Templates”,应该怎样设置呢? 手册有这么一段,但是没有说具体怎么做:

========================
There are four tabbed regions in the upper screen of this folder window,but Function Security can be used to determine whether a user will beable to see all of them.

































Metalink的一文:
=============================
Subject: How To Restrict Access To Specific Form's Tab In Oracle Applications 11i?
Doc ID: Note:189420.1 Type: HOWTO
Last Revision Date: 05-AUG-2003 Status: PUBLISHED



Goal: How to restrict access to specific form's tab in Oracle Applications 11i?
Fact: Oracle Application Object Library 11.5


Fix:

Every form's tab represents a function. Function security is controlled by Responsibilities. A system administrator should exclude the form's tab Corresponding function from the menu structure assigned to a responsibility, users belong to this responsibility will not be able to access this form's tab anymore. As an example, the following steps will disable the Costing tab in Orgination Items form for some users:
1. Create a new responsibility and attach INV_NAVIGATE menu to it.
2. Assign the new responsibility to users that will not access the above tab.
3. From System Administrator-->menus-->query INV_NAVIGATE and display the menu tree, drill down items -->Organization Items-->get the display name
of the function corresponding to the Costing tab 'Items:Costing Group'.
4. System Administrator-->Responsibilities-->Define, query the new responsibility and use the Menu Exclusions tab to exclude the function in step 3.
5. Logon to Applications using the new responsibility and navigate to
Organization Items form, the Costing tab is disabled.

2007年10月25日星期四

采购 -> AutoCreate

Action:
可以将请购单新增文档或则添加到已存在的文档。有两种方式,一种是Create,一种是Add To。




Add To
将新的请购单创建到采购文档T_ClosePoint1,新增加的采购行序号2。



















是否可以将请购单Add To已经存在的采购单,必须依据采购文档的安全设置。如果Access Level为View Only。




那么当点击Manual按钮进行创建的时候,系统提示你选择一个已经存在的文档。如果当前用户原来没有创建采购订单,系统将找不对应的采购订单(因为采购文档的安全设置)













如果采购文档的安全设置为可以修改。那么这个时候再Add To,可以找到你需要将请购单提交进去的采购文档。



Document Type:
已经审批的请购单,可以创建如下4种。未审批的请购单只能创建RFQ。







如果针对为审批未通过的请购单创建Standard PO/Planned PO/Blanket Release,那么将会提示如下提示(Manual和Auto略有不同)。










Grouping:

如果是分组方式Default,在创建采购订单行的时候,将会根据请购单行的Item,Item版本,行类型,单位等进行分组。如果是Requisition,那么每一个请购行将会对应一个采购行。





针对如下两个请购行。




如果Grouping = Default,那么创建采购单的时候,将会分组到一个采购订单行上,采购数量为两个请购数量之和。也就是将两者合并了。






如果Grouping = Requisition,一个采购单行就会对应一个请购单行。上述的两个请购单行,创建了两个采购单行。










Return Requistion:
Path: AutoCreate(M)-> Tools (M)->Return Requisition(M)













Modify:

AutoCreate(M)-> Tools (M)->Modify(M)
将原来的一行分成两行。












完成之后,在AutoCreate窗口只能看到新创建的两行。







但是从Requisition Lines Summary可以看到新创建的两行,和原来存在的一行。