Form_Form Builder国际化多语言开发(案例)

简介: 2014-05-06 Created By BaoXinjian 一、摘要 Oracle EBS系统是一个多语言的系统,能够实现不同语言环境登录显示不同的语言信息,系统中多语言涉及到两个主要的方面: 1. 界面的多语言 任何给用户看到的地方,都需要实现多语言来满足不同国家和地区的使用。

2014-05-06 Created By BaoXinjian

一、摘要


Oracle EBS系统是一个多语言的系统,能够实现不同语言环境登录显示不同的语言信息,系统中多语言涉及到两个主要的方面:

1. 界面的多语言

任何给用户看到的地方,都需要实现多语言来满足不同国家和地区的使用。界面的多语言使得不同的语言环境看到不同语言的界面

2. 基础数据的多语言

很多用户看到的数据都是通过基础设置而来的,因此不但需要实现界面的多语言,还需要实现基础数据也多语言化。数据的多语言使得不同的语言环境看到不同语言的数据

 

二、功能预览


1. 当以英文环境登录系统时

(1).界面多语言:可以查询出如上图的数据,我们注意看 User Form Name 和 Description 两个列。

(2).数据多语言:可以看到其中的数据都是英文定义的,如第一行叫FNDADDSQ的Form,User Form Name 为Register Sequence

2. 当以中文环境登录系统时

(1).界面多语言:可以查询出如上图的数据,我们注意看 用户表单名和说明两个列。

(2).数据多语言:可以看到其中的数据都是中文定义的,如第一行叫FNDADDSQ的表单,用户表单名为:注册序列

 

三、数据分类


1. 定义

要弄清楚数据多语言转换,需要先将数据进行分类,由于要实现多语言转换的对象是:数据。

这就意味着可能多语言的量会比较大,就拿上面我们定义表单的例子来说,

里面包括了字段:表单、应用、用户表单名和说明总共4个字段,哪些字段需要实现多语言转换,即哪些数据需要不同的环境下看到不同语言的表现?

因此数据会分为3类:

(1). 用户编码/代码基础数据类:为了知道多语言之后,我们所说的是同一个东西,我们需要一个用户能够识别的代码,不管它在什么语言环境下,都是一样的。如:表单FNDADDSQ

(2). 非多语言类:这类信息不要求不同的语言环境下显示不同的信息

(3). 多语言类:这类信息要求不同的语言环境显示不同的信息,如上面的应用、用户表单名和说明,这就是我们需要多语言转换的地方

2. 实现步骤

(1). 开发一个具备数据多语言转换定义的界面,如上面的表单定义窗口

(2). 进入多语言数据界面,录入多语言数据

(3). 进入不同的语言环境,显示不同的语言数据

3. 多语言转换定义的界面

如何去开发一个具备多语言转换定义的界面我们后面在描述,我们先来看看如何使用一个多语言转换定义的界面。

当录入一条数据的时候,通过工具栏中的一个小地球仪的图标来定义多语言信息,当表单中实现了数据多语言功能后,光标进入相应的数据块,小地球仪就会亮起,否则失效

点击小地球仪,会弹出数据多语言转换窗口,如下图,注意看转换窗口的行和列:

(1). 行(Row):Oracle  EBS系统安装了多少个语言,这个转换窗口就会显示出多少行,如我的环境安装了中文和英文,所以有两行

(2). 列(Column):这个例子中有两列,分别是用户表单名和说明,这个说明开发表单时候设置的有哪些列是可以进行多语言转换的,因此理论上面可以有无限个列

4. 多语言显示

如定义FNDADDSQ表单的时候,点击小地球仪之后显示如下的多语言转换界面:

(1). 第一行是英文对应的用户表单名和说明

(2). 第二行是中文对应的用户表单名和说明

 

四、多语言转换表


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

1. 多语言表的实现

(1). 基本信息表:存储基本信息的基础记录,包括信息的主键

(2). 多语言表:命名以 _TL结尾,存储基础记录对应的多语言信息,包括主键、需要多语言转换的列和语言代码列LANGUAGE

(3). 多语言视图:命名以 _VL结尾,根据语音环境取出基于语言的信息,包括主键和语言信息

2. 多语言表结构逻辑关系

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

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

 

五、多语言转换示例


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触发器


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’);

3. 参数描述

(1).FND_FORM:

多语言数据块的名称

(2).FORM_ID,APPLICATION_ID:

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

(3).USER_FORM_NAME,DESCRIPTION:

需要进行多语言转换的列

(4).*FND:ML_USER_FORM_NAME, *FND:ML_DESCRIPTION:

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

4. 而外增加如下触发器及代码

4.1 Form Level

(1).POST-FORMS-COMMIT

fnd_multilingual.save;

4.2 Block Level

(1).POST-INSERT

fnd_multilingual.key;

(2).WHEN-CLEAR-BLOCK

fnd_multilingual.free_block;

(3).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

 

Thanks and Regards

转载:汉得技术博客 - http://oracleseeker.com/2008/09/28/data-translation-in-ebs-forms-breifing/

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
2月前
|
前端开发
antd_使用Input封装实现Form校验效果(最终版)
本文介绍了在Ant Design (antd)框架中如何封装Input组件以实现表单校验效果,并提供了封装代码示例以及如何在提交时进行校验。
59 4
antd_使用Input封装实现Form校验效果(最终版)
|
4月前
|
移动开发 前端开发 JavaScript
Web表单(Form)开发实战指南
【7月更文挑战第8天】表单(Form)是Web应用程序中不可或缺的组成部分,用于收集用户输入的数据。本指南将详细介绍HTML表单的基本结构、数据提交方式、表单验证以及如何使用JavaScript和CSS增强表单的交互性和美观性。
161 0
|
数据库 数据安全/隐私保护 UED
表单处理(Form Handling):构建用户互动的Web应用的关键技巧
在Web应用程序开发中,表单是与用户互动最频繁的一种元素之一。而表单处理是使用户能够输入、提交和处理数据的关键技术。在本博客中,我们将深入探讨表单处理的概念、不同类型的表单元素、表单验证、表单提交和最佳实践,以及如何有效地使用表单处理来构建具有强大用户互动性的Web应用。
105 0
|
前端开发
前端项目实战175-ant design form清空表单
前端项目实战175-ant design form清空表单
107 0
|
前端开发
前端项目实战61-ant design中不同form绑定不同的值
前端项目实战61-ant design中不同form绑定不同的值
126 0
|
SQL Oracle 关系型数据库
Form_Form Builder开发基于视图页面和自动代码生成包(案例)
2014-01-06 Created By BaoXinjian 一、摘要 Oracle EBS二次开发中,由于功能要求复杂的缘故和数据库设计的要求,基于表的Form开发并不多见,为了能够更好的利用Form的特性, 需要开发基于视图的表单,开发基于视图的表单和基于表的表单实质并没有区别, 只是基于视图的表单中需要开发人员来明确编写增、删、改、锁的程序逻辑,而基于表的表单自动帮助完成这些功能。
1318 0
|
Web App开发 移动开发 JavaScript
|
Go Windows
SAP Script form 开发
http://learnabaponline.blogspot.jp/2013/06/sapscript.html Steps for Creating SAPScript 1.
1105 0