PeopleSoft-多语言开发流程

多语言流程简介

PeopleSoft多语言开发流程

主要开发点

基语言&已安装语言

基语言PS页面路径:主菜单-PeopleTools-实用程序-管理-PeopleTools选项

数据库查询:

1
select language_cd from psoptions;

已安装语言PS页面路径:主菜单-PeopleTools-实用程序-国际-语言

数据库查询:

1
select language_cd,installed from pslanguages where installed='1';

启用官方语言&新增语言

启用官方语言

  1. 在上面的【管理已安装语言】页面进行启用
  2. 对PS的Web配置文件进行修改。默认情况下,官方已经安装的语言不需要做修改,只要重启PS的Web服务即可。

新增语言

​ 对于官方未安装的语言,需要自己新增语言包。主要步骤:

1.字段LANGUAGE_CD中新增转换值(以IDN为例Indonesian 印尼语);

2.页面配置新增语言;

3.修改【登陆页面】signin.html;

4.修改signin.html同路径下的属性文件text_zhs.poperties;主要是用于增加Web页面的悬浮提示;

5.开发工具新增语言(PeopleTools8.57)

​ 在PeopleTools pscfg中新增IDN语言(需要修改windows配置)。

思路:

  • 安装工具VS;
  • 修改中文ZHS语言的pscfg.rc文件;
  • Copy ZHS语言的文件夹为IDN;
  • 配置工具并且设置路径后,使用工具基于刚刚Copy出来的IDN文件夹,生成PSCFGIDN.DLL;
  • 将PSCFGIDN.DLL文件和IDN文件夹放置到对应的位置;
  • 在pscfg.exe中选择新增的语言,即可在对应语言环境中进行开发。

​ 首先安装Visual Studio Community 2019(默认C盘安装)

以英文为基础,编辑PeopleTools工具安装路径下的:\src\res\eng\pscfg下的pscfg.rc

复制 \src\res\eng\inc\version.rcx 到 \src\res\eng\pscfg

把中文D:\peopletools\src\res\ZHS文件夹Copy一份修改名字为IDN,修改其pscfg.rc文件(前面是以ENG语言为例,这里是以ZHS为例,后面也都是使用ZHS,修改方式同上)。

Use the MAKEALTL.BAT batch file to compile PSCFGENG.DLL. For example: makealtl ENG PSCFG Then copy the DLL file to the PS_HOME\bin\client\winx86 directory.

使用 MAKEALTL.BAT 生成DLL文件。设置环境变量,新建批处理文件env.bat(PS_HOME的位置根据PS_HOME\bin\client\winx86找),bat文件内容如下(注释部分内容/**/,需要删除):

1
2
3
4
5
6
7
set VS140COMNTOOLS= C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools     /*VS工具路径*/
set PS_HOME=D:\peopletools /*PT安装主路径*/
set respath= C:\temp\RES /*临时文件路径/
set incdir=C:\temp\SRC\INC /*INC文件路径,放在上面的temp下*/
set vcinstall=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build /*VS工具路径*/
set include=%include%;%incdir%
call "%vcinstall%"\vcvarsall.bat x64

注意:需要修改makealtl.bat 文件,运行makealtl需要在其路径下

使用cmd,切换至res/路径下,执行makealtl IDN PSCFG,生成DLL文件。

然后,将生成的PSCFGIDN.DLL文件放置到bin/client/winx86/路径下;

将复制并修改好的IND文件夹放置到src/res/路径下:

打开工具中的绿帽子 pscfg.exe;

至此,开发工具新增语言完成!

最后,重启PS Web服务,页面上即可选择刚刚新增的语言。

多语言关联表

PS中实现多语言功能是靠基表关联related language record实现的。

原理:

  • 基表中存储所有字段,多语言表(related language record)中存储需要翻译的字段(描述性字段)。
  • 多语言表的keys比基表多一个key值,即language_cd。
  • 在页面加载数据时,优先取对应的多语言表中的描述性字段的值,如该多语言表无数据,那么则取默认的基表中描述性字段的值。
  • 如果登陆对应语言页面,修改了描述性字段的值后,自动在多语言表中创建一条对应language_cd的记录,且不会修改基表中的描述性字段的值。
  • 如果修改了非描述性字段的值,那么基表中非描述性字段的值也会进行修改。(这很好理解,因为多语言表只有描述性字段,而没有非描述性字段,改了以后存不了,只能存到基表中)

简单的说,PS的多语言原理就是针对基表,创建一张多语言表以此来保存对应语言的翻译内容,所以需要language_cd字段来指定语言代码。这样每个语言都可以存在自己对应语言的描述性字段。而非描述性字段,一般是ID值,下拉值等。ID值不需要翻译;下拉值就需要在对应语言的PeopleTools开发工具中,删除原基表带出的描述,同时进行翻译,保存后即可。

以上是实体表Table关联多语言表,视图View也是同理。

官方给出的创建多语言表操作如下:

  1. The keys of the related language record should contain all the keys of the base record in the same order.(多语言关联表的keys需要跟基表顺序一致);
  2. You should add an extra key, LANGUAGE CD, as the last key for the record(exception is only for EFFDT field).(多语言关联表需要额外在keys最后添加language_cd字段,并设置为key,如果keys中有effdt,那么放置于effdt字段前面);
  3. Apart from the keys, your language record needs only the fields which need to be translated. le. DECR etc.(除了基表的keys外,多语言表只能添加需要翻译的字段,即描述性字段。如果放置非描述性字段,那么会造成基表中的非描述字段存储的值与多语言表中值不一致)。

示例:

​ 以C_PRH_EDU_TBL基表为例,创建该表时设置5个keys。

​ 创建对应多语言表,就需要有6个keys,即添加一个key字段-language_cd;注意:基表中无effdt字段,如果有,那么多语言表中的language_cd需要放置在effdt字段前。同时,只需并只能在多语言表中添加需要翻译的描述性字段,同时为了记录多语言修改的‘最后更新人’和‘最后更新时间’,需要添加日志子表sRec-C_LASTUPD_SBR。

​ 在基表的Record Properties中关联多语言表即可。

​ 以上为’实体表’创建&关联多语言表示例,创建’多语言视图’同理。

页面

PS页面的多语言开发,主要使用PeopleTools 开发工具设置对应语言后,需要处理以下几个点:

1.页面字段label修改,包含字段翻译、隐藏、不可编辑,页面路径、内容概要名称翻译;注意:,对于标准页面来说,有些字段的label值来自标准的【消息目录】,例如:【受款人消息】页面的标题,搜索视图的搜索范围限定字段,‘包含’、‘不包含’、‘大于等于’等;还有些字段的label则是由代码取自于【结构与内容】的组件描述,例如:【期间】、【日历组】、【一次性导入】等页面的标题。

示例:

需要翻译COUNTRY字段的label翻译为英语,只要将长、短描述中的‘国家/地区’删除,输入对应的英文描述即可(翻译的长度有限制long Name为30,Short Name为10)。

2.页面多语言表建立,并与基表关联(前面已经介绍,不赘述);

3.页面查询多语言视图建立,并与基表关联。主要包括组件查询视图,查询放大镜、动态视图等(前面已经介绍,不赘述);

4.页面下拉框字段翻译,将原来的字段translate values,翻译为对应语言即可;

示例:

​ 需要翻译C_EDCT_LRNG_STYLE字段的translate values,只需要将对应的长、短描述均改为对应语言翻译即可(也有长度限制);

注意:也可以直接登陆对应语言的PS系统,找到【转换值】页面,直接将原数据覆盖即可。

5.页面报错信息翻译。如果是开发官方已安装语言,则只需要翻译客制的消息即可,例如:结束日期必须大于开始日期。而针对新增的语言,那么不仅需要翻译客制的消息,还需要翻译标准的消息(这是一个很大工程,同时,需要注意翻译的长度限制);

示例:

​ 标准消息

​ 客制化消息

6.页面逻辑多语言调整,主要包含:获取数据SQL,页面HTML、CSS样式代码等;主要是对应的代码逻辑的调整,含component peoplecode、page peoplecode、component record peoplecode等。具体代码逻辑需要具体分析,这里不详细介绍。

7.流页面拼贴向导(此处暂不做介绍)。

AE进程

AE进程即 App Engine Program ,一般用于后台进程处理用户需要进行的复杂逻辑。在用户提交处理请求后,将工作交予服务器处理,故用户无须在页面等待运行结果。

多语言开发时主要在代码中考虑以下两点:

1.数据获取来源是‘基表’或‘多语言表’。

1
2
3
4
5
--基表
select * from PS_C_PRH_EDU_TBL;

--多语言表
select * from PS_C_PRH_EDU_LNG;

2.落地数据时切换语言。切换后,系统会将数据落入到语言表中对应语言代码的记录中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*获取当前用户ID*/
Local string &strUser = %OperatorId;
/*获取当前语言代码*/
Local string &LANGE = %Language;

****
****
****

/* ***** 切换成数据落地用户,用于数据落地 ******/
/*获取一个Session*/
&swSession = GetSession();
/*连接用户*/
&swSession.connect(1, "", "POSTDATA", "", 0);
&oSession = %Session;
&oSession.PSMessagesMode = 1;
/*切换用户后,需要重新设置登录语言,否则默认为ENG。*/
SetLanguage(&LANGE);

同时,处理多语言时需要根据实际情况考虑以下两类进程:

1.自动循环进程。

2.手动执行进程。

报表

PS的报表主要分为三类报表:

​ 1.页面报表

​ 2.BI报表(单个)

前两者多语言开发需要注意点:a.页面-字段显示;b.代码-取数逻辑。

​ 3.AE报表。AE报表又可以细分为:

​ (1)Excel报表。注意点:a.报表名称;b.报表表头;c.报表内容。

​ (2)BI报表(批量)。注意点:a.报表样式;b.报表内容。

以上报表的具体代码不作详解,之前的笔记已经对其有所介绍,只要注意多语言取值即可。

示例:

PeopleSoft-页面报表多条件搜索功能 | Gek’Blog (gek96.top)

PeopleSoft-如何实现AE报表程序 | Gek’Blog (gek96.top)

PeopleSoft-报表示例(WriteExcelEx_2010类和ReportDefinition类) | Gek’Blog (gek96.top)

PeopleSoft-BI-Publisher-打印PDF证明 | Gek’Blog (gek96.top)

接口

PS的接口主要分为:

  1. 对外提供监听接口-PeopleSoft-外部request通过CI操作组件(soapUI模拟) | Gek’Blog (gek96.top)
  2. PS调用外部接口-PeopleSoft-PS调用外部接口 | Gek’Blog (gek96.top)

针对多语言开发时,不论是提供给外部的监听接口,还是请求外部的接口,都需要进行语言区分。前者,需要考虑外部系统在请求PS系统时,带上语言标识进行语言区分;后者需要在请求外部接口时区分语言。

AWE流程

AWE引擎是PS系统内置的一套审批工作流引擎,是为了解决审批操作而建立的一个通用的、模块化的程序块,它将一次审批流程肢解开来,一方面有助于功能顾问对系统标准的工作流进行配置,另一方面使技术顾问在开发全新工作流时,开发步骤更加清楚,开发更加简单。

AWE的设计框架采用面向对象的手法,将审批的步骤以及事件的触发封装在类中,开发人员在开发时候只需要调用这些类中的方法即可。

一般来说,审批工作流通常为以下三个部分构成:

可以看出,AWE引擎只是整个流程的一部分,用于处理审批操作。

AWE引擎的多语言开发,需要注意以下两点:

  1. AWE流程引擎中页面展示的多语言处理。
  2. AWE流程引擎中落地处理逻辑的多语言处理。

这里不对AWE引擎的具体业务和逻辑代码进行赘述,后续会有对应的详解笔记。(偷个懒😎)

结语

以上就是针对PS系统的多语言开发整个流进行了程简单介绍,部分内容梳理的比较简洁,不过,对于拥有一定的PeopleSoft相关开发经验的朋友,理解起来应该也不难。我写这篇流程笔记的目的,主要是想通过这篇笔记,对PS系统的多语言开发做一个梳理和巩固,同时也希望能够为想了解相关技术的朋友提供一定的帮助。