XYG Oracle EBS多语言Message开发教程(Web共享) V1.0
- 格式:pdf
- 大小:555.54 KB
- 文档页数:19
OUMXXXXXX D OCUMENT T EMPLATE Oracle EBS技术开发之EBS多语言Message开发教程Author: 王宪(samt007@)Creation Date: 2014-12-24Last Updated: 2014-12-24Document Ref: <Document Reference Number> Version: DRAFT 1AApprovals:编制人:审核人:批准人:XXXXXX Document TemplateOracle EBS技术开发之文档控制 ii1 文档控制1.1 变更记录1.2 审阅XXXXXX Document TemplateOracle EBS技术开发之文档控制 iiiContents内容1文档控制 ....................................................................................................................... i i 1.1变更记录 .. (ii)1.2审阅 (ii)2EBS多语言Message的开发需求 (1)2.1目前的开发现状以及问题 (1)2.2Oracle对多语言消息的开发支持 (1)3客户化EBS多语言消息开发教程 (3)3.1多语言消息的开发规范教程 (3)3.1.1快速查询是否有现成的消息可供我们使用。
(3)3.1.2快速新增一个消息。
(4)3.1.3自动处理消息(分配消息的语言环境等)。
(6)3.2多语言消息的使用教程 (7)3.2.1如果是Pkg等存储过程或者函数的使用方式。
(7)3.2.2如果是Form功能使用的方式 (8)4客户化EBS多语言消息处理Pkg详解 (10)4.1基本对象的定义 (10)4.2Pkg的处理逻辑的代码 (10)5未结和已结的问题 (13)5.1未解决的问题 (13)5.2已结问题 (13)XXXXXX Document TemplateOracle EBS技术开发之EBS多语言Message的开发需求 1 of 162 EBS多语言MESSAGE的开发需求由于多语言的开发还是明年的工作重点,而且标准功能实际上也是支持多语言提示消息的程序开发。
所以从现在开始,新开发的程序,涉及到Message消息提示的部分都必须要用多语言来处理。
2.1 目前的开发现状以及问题以前,我们开发程序,为了方便和提高工作效率,经常将程序的提示消息写在程序里面。
实际上是非常不合适的做法。
主要是会有几个问题:1. 消息的内容写在程序里面了,如果该内容有变化,则要修改程序。
程序的稳定性差!2. 对多语言功能不支持!如果有了英文的ERP的使用需求,由于消息是写在程序里面,所以不支持英文的提示(消息提示还是中文!)。
除非修改程序。
3. 由于有大量的消息写在程序里面,可能会导致程序的代码量增加,不便程序的阅读。
并且,同样类型的错误的信息不可以被公用!2.2 Oracle对多语言消息的开发支持所以,Oracle的标准用法是使用FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;在EBS的应用开发者下定义中文和英文消息,然后提交请求"生成信息"来生成消息,使用这种方式可以适用于多语言和修改人机界面的提示信息,而不用去修改源程序。
XXXXXX Document Template Oracle EBS 技术开发之EBS 多语言Message 的开发需求2 of 16而研究过标准功能程序的人都知道,实际上Oracle 的所有消息提示都是用这个方法来定义并使用。
举个例子:做自动产生并登记销售订单的时候,API 报的错误:问题:这个消息提示:对字段 XXX 的验证失败。
是怎么做到的?哪里定义的?哪里调用?首先,先定义在消息里面(其中有一个输入参数&Attribute ):然后,在API 的包(验证销售订单行的包OE_Validate_Line )调用:XXXXXX Document Template Oracle EBS 技术开发之EBS 多语言Message 的开发需求3 of 16PS :如果用户用的是英文环境,则会输出对应的英文的Message :Validation failed for the field - &ATTRIBUTEXXXXXX Document TemplateOracle EBS技术开发之客户化EBS多语言消息开发教程 4 of 163 客户化EBS多语言消息开发教程考虑到,很多时候消息都是特定一个程序在用,别的程序一般不会使用;所以,为了提高多语言消息的处理的工作效率,这里封装了几个快捷处理的存储过程和Pkg。
主要是用标准消息的API自动生成对应的消息!都是封装在这个包:XYG_ALD_MESSAGES_PKG具体的使用办法结合在本章的开发教程里面。
3.1 多语言消息的开发规范教程举个例子,我要添加一个错误的提示消息:不存在采购订单头。
则要做的动作是:3.1.1 快速查询是否有现成的消息可供我们使用。
查询语句:SELECT * FROM TABLE(XYG_ALD_MESSAGES_PKG.CHECK_MESSAGE('不存在采购订单头','采购订单',50,'ZHS'));用法说明:这里返回的是你要的消息的所有信息。
上面的例子是:消息中包含关键字:'采购订单'的,并且和'不存在采购订单头'的相似度超过50%的中文语言的所有消息。
强烈建议在新建消息之前最好查询一下是否有现成的消息可供使用。
如果有,则不需要再新建消息了!否则消息更加难管理!XXXXXX Document Template Oracle EBS 技术开发之客户化EBS 多语言消息开发教程5 of 16如果上面有一个消息的定义是可供我们使用的,则直接使用即可,不要新建了。
如果没有,则继续做。
3.1.2 快速新增一个消息。
前面第一步的检测,是没有现成的消息代码可用,那现在要新增一个消息了。
当然,您可以直接去应用开发员-->消息 那里直接添加。
效果都是一样的,但是我的考虑会有几个困难:第一点:开发人员必须在Toad 的开发界面和EBS 的定义界面切换,操作麻烦,降低工作效率。
第二点:当日后程序要正式上线的时候,必须要将你新定义的消息都搬到正式环境里面去,那工作量是很大的,因为一般来说,一个程序都有40个以上的消息,一个一个来定义,那真的是痛苦死了!而且,还要中英文环境都复制!那加一倍了。
第三点:有很多消息都是一次性使用的,自己定义消息的名称可能会比较麻烦。
要自己搞编号什么的。
所以,我考虑的是,如果可以用消息的API ,在Toad 里面直接添加,那效率会更加快。
而且这里也增加了一套自动命名消息名称的逻辑。
利用这个逻辑,可以不用过多的考虑如何编消息名称。
为什么?因为很多时候,消息都是被某个程序一次性的使用。
所以,根据这边的客制化开发,快速新增一个消息的过程是:3.1.2.1 首先要初始化Toad 等工具的环境变量。
这个是必须的。
因为Toad 里面默认的是英文的环境,而且没有用户的环境变量。
现在要配环境变量和语言的环境,代码:BEGINfnd_global.apps_initialize(user_id => 5954,resp_id => 20420,XXXXXX Document TemplateOracle EBS技术开发之客户化EBS多语言消息开发教程 6 of 16resp_appl_id => 1);EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_LANGUAGE=''SIMPLIFIED CHINESE''';END;3.1.2.2 情况1:消息的名称自己定义的。
前提条件是:确定这个消息可能会被后面的程序所使用。
样例代码:SELECT XYG_ALD_MESSAGES_PKG.ADD_MESSAGE('XYG',REPLACE('调用 *P_OBJECT_NAME 的时候,必要的参数不存在,请检查参数!','*','&'),'XYG_ALD_PARAMETER_NOTFOUND') MESSAGE_NAMEFROM DUAL;这个函数如果正常运行完毕,消息会自动通过API创建到EBS里面。
3.1.2.3 情况2:消息的名称让系统自动定义的。
前提条件:如果这个消息基本是属于这个程序所使用的,则消息的名称让系统自动命名即可。
一般来说比较建议用这个办法定义!快捷和方便,不需要考虑过多的问题。
命名的规则请看程序的代码的备注。
目前是:消息的模组_产业+模组简称_功能代码(年月)+3位流水码,例如:XYG_ALD_COMM001代码样例:SELECT XYG_ALD_MESSAGES_PKG.ADD_MESSAGE('XYG',REPLACE('收货地点:( *P_LOCATION_CODE )不存在!错误信息: *P_SQLERRM','*','&'),'','AL','API','COMM') MESSAGE_NAMEFROM DUAL;需要注意的是,上面的函数,如果成功用API创建了消息,则自动返回对应的消息名称。
如果有错误,则会直接提示。
XXXXXX Document TemplateOracle EBS技术开发之客户化EBS多语言消息开发教程 7 of 16上面的几个参数都是非常重要的,具体的参数意思:另外,为了保证以后上线的时候,消息的名称不变(因为消息的名称都已经写到代码里面了,不可以变了),所以,这里如果是自动获取了消息的名称,要记录下来。
因为到时候还要上线的。
操作来说还是很简单的,直接将获取的名称写在对应的参数即可。
SELECT XYG_ALD_MESSAGES_PKG.ADD_MESSAGE('XYG',REPLACE('收货地点:( *P_LOCATION_CODE )不存在!错误信息: *P_SQLERRM','*','&') ,'XYG_ALD_COMM001','AL','API','COMM') MESSAGE_NAMEFROM DUAL;到时候上线程序的时候,消息可能要逐个上线。