You are browsing the archive for 2008 十月.

数据多语言转换开发(3)

十月 7, 2008 in Oracle EBS二次开发

 

Oracle EBS 11.5.10.2

 

本文介绍数据多语言转换表单的实现。

 

本文只介绍和多语言转换有关的Form开发步骤,关于常规Form开发的步骤请查看 Oracle Applications 开发手册

 

一、Form触发器

 

1)在需要使用多语言项所在的BLOCK内增加触发器:PRE-BLOCK

 

触发器中添加如下的代码启用Translation按钮:

app_special.enable(‘TRANSLATE’);

 

2)在需要进行多语言转换的所在的BLOCK内增加触发器:TRANSLATION

加入如下PROCEDURE进行多语言字段的初始

FND_MULTILINGUAL.EDIT(‘FND_FORM’,
          ‘FORM_ID, APPLICATION_ID’,
          ‘USER_FORM_NAME, DESCRIPTION’,
          ‘*FND:ML_USER_FORM_NAME, *FND:ML_DESCRIPTION’);

参数描述:

FND_FORM:多语言数据块的名称

FORM_ID,APPLICATION_ID:多语言表的主键列,多个列用逗号(,)隔开

USER_FORM_NAME,DESCRIPTION:需要进行多语言转换的列

*FND:ML_USER_FORM_NAME, *FND:ML_DESCRIPTION: 多语言转换窗口中每列对应的标题(如下图),为了实现它也多语言,因此这里是消息字典,*FND是消息字典对应的应用,ML_USER_FORM_NAME是消息的名称

form_nls_title form_nls_title_zhs

 

3)而外增加如下触发器及代码

Form Level

POST-FORMS-COMMIT

     fnd_multilingual.save;

Block Level

POST-INSERT

    fnd_multilingual.key;

WHEN-CLEAR-BLOCK

    fnd_multilingual.free_block;

WHEN-REMOVE-RECORD

   fnd_multilingual.free_record;

 

二、Table Handler

 

当定义一条多语言的数据时,同时会往基本信息表和多语言表插入数据。往基本信息插入一条数据,多语言表插入多条数据,系统安装了多少种语言环境,就会插入多少条,因此对于多语言转换的插入语句的写法有一点特别的地方,为了处理的方便,一般都将增删改的操作写到数据库的存储过程中。

 

1) 插入(Insert)

在Form块的on-insert触发器中,要同时往基本信息表和多语言表(_TL)插入数据,因此insert的存储过程中需要根据Oracle EBS系统安装的语言来决定往多语言表中插入多少条记录。通过FND_LANGUAGES表来判断。

伪代码

INSERT INTO FND_FORM ;

INSERT INTO FND_FORM_TL
SELECT
FROM FND_LANGUAGES
where INSTALLED_FLAG in (‘I’, ‘B’)

2) 更新(Update)

更新的时候需要同时更新基本信息表和多语言表;在on-lock触发器中,需要同时对基本信息表和多语言表锁定。

伪代码:

UPDATE FND_FORM

UPDATE FND_FORM_TL
WHERE userenv(‘LANG’) in (LANGUAGE, SOURCE_LANG)

3) 删除(Delete)

删除的时候也需要同时删除基本信息和多语言信息。

伪代码:

DELETE FND_FORM

DELETE FND_FORM_TL

代码请查看数据库包fnd_form_pkg 

 

一个实际的多语言开发实例:Download Oracle EBS R12 MOAC客户化开发白皮书 Version 1

 

 

感谢Anson Locksley 提供资料

 

多语言转换开发系列正式结束:

数据多语言转换开发(3)

数据多语言转换开发(2)

数据多语言转换开发(1)

 

 

数据多语言转换开发(2)

十月 6, 2008 in Oracle EBS二次开发

 

Oracle EBS 11.5.10.2

 

本文紧接 数据多语言转换开发(1) 介绍数据多语言转换数据库表结构的设计

 

一、多语言转换表关系

 

Oracle EBS中如果需要实现数据多语言的转换功能,对应的后台表结构的设计有一定的规则 ,包括的数据库对象:

  1. 基本信息表:存储基本信息的基础记录,包括信息的主键
  2. 多语言表:命名以 _TL结尾,存储基础记录对应的多语言信息,包括主键、需要多语言转换的列和语言代码列LANGUAGE
  3. 多语言视图:命名以 _VL结尾,根据语音环境取出基于语言的信息,包括主键和语言信息

 

表关系图

form_nls_erd

 

所以根据上面数据库对象的命名 规则,只要在Oracle EBS的数据库系统中看到_TL, _VL对象出现的时候,它肯定是实现了多语言数据转换功能。

多语言视图同时连接基本信息表和多语言表,并限制多语言表中的语言字段等于环境变量中取得的语言代码,从而达到多语言视图取出的数据是当前语言环境下的信息。

 

二、多语言转换表示例

 

继续使用 数据多语言转换开发(1) 中的例子,查看其中的表结构

 

1)  表单基本信息表

SQL> desc fnd_form;
Name               Type         Nullable Default Comments
—————— ———— ——– ——- ——–
APPLICATION_ID     NUMBER                                
FORM_ID            NUMBER
                                
FORM_NAME          VARCHAR2(30)                          
LAST_UPDATE_DATE   DATE                                  
LAST_UPDATED_BY    NUMBER(15)                            
CREATION_DATE      DATE                                  
CREATED_BY         NUMBER(15)                            
LAST_UPDATE_LOGIN  NUMBER(15)                            
AUDIT_ENABLED_FLAG VARCHAR2(1)

 

2) 表单多语言转换表,包括多语言的两列:user_form_name, description

SQL> desc fnd_form_tl;
Name              Type          Nullable Default Comments
—————– ————- ——– ——- ——–
APPLICATION_ID    NUMBER                                 
FORM_ID           NUMBER
                                 
LANGUAGE          VARCHAR2(30)                           
USER_FORM_NAME    VARCHAR2(80)
                           
CREATED_BY        NUMBER(15)                             
CREATION_DATE     DATE                                   
LAST_UPDATED_BY   NUMBER(15)                             
LAST_UPDATE_DATE  DATE                                   
LAST_UPDATE_LOGIN NUMBER(15)    Y                        
DESCRIPTION       VARCHAR2(240) Y                        
SOURCE_LANG       VARCHAR2(4)

 

3) 表单多语言视图

SQL> desc fnd_form_vl;
Name               Type          Nullable Default Comments
—————— ————- ——– ——- ——–
ROW_ID             ROWID         Y                        
APPLICATION_ID     NUMBER                                 
FORM_ID            NUMBER
                                 
FORM_NAME          VARCHAR2(30)                           
LAST_UPDATE_DATE   DATE                                   
LAST_UPDATED_BY    NUMBER(15)                             
CREATION_DATE      DATE                                   
CREATED_BY         NUMBER(15)                             
LAST_UPDATE_LOGIN  NUMBER(15)                             
AUDIT_ENABLED_FLAG VARCHAR2(1)                            
USER_FORM_NAME     VARCHAR2(80)                           
DESCRIPTION        VARCHAR2(240) Y

 

4) 表单多语言视图声明定义

 

SELECT b.ROWID row_id,
       b.application_id,
       b.form_id,
       b.form_name,
       b.last_update_date,
       b.last_updated_by,
       b.creation_date,
       b.created_by,
       b.last_update_login,
       b.audit_enabled_flag,
       t.user_form_name,
       t.description
  FROM fnd_form_tl t, fnd_form b
WHERE b.application_id = t.application_id
   AND b.form_id = t.form_id
   AND t.LANGUAGE = userenv(‘LANG’);

 

后面介绍如何开发一个多语言转换的Form。

 

感谢Anson Locksley 提供资料