PeoplesoftHCM项目AE程序技术总结

更新时间:2024-01-19 22:27:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

上海日立Peoplesoft HCM项目 AE程序技术总结 概述

在Peoplesoft系统里AE(Application Engine)程序是比较核心的技术,本文将结合我在上海日立上项目的情况,对AE程序进行总结。首先从AE程序概要说起,包含它的概念以及组成部分,peoplecode是编写AE程序必须要熟练掌握的语言,本文将会结合一个页面开发的实例来做一介绍。然后会来讲述AE程序的运行方式以及如何来调试和管理AE程序,最后会对一个具体AE开发实例进行介绍并且对遇到问题进行总结。

一、概要

1. 对AE程序的理解

AE程序是PeopleTools的组成部分之一,用于开发、测试和运行对PeopleSoft数据库进行的后台SQL处理程序,主要负责与数据库进行的大量复杂的SQL交互任务,如币种换算、更新员工工龄工资等。事实上AE程序并不能产生,解析和理解SQL语句,它只是去执行我们提供的SQL语句。它的开发是在后台开发工具Application Designer里进行的。在应用程序升级时也会用到AE程序。AE程序存储在PeopleSoft数据库内,它不像Crystal报表定义、SQR程序等储存在文件系统内。一个AE程序可以同时运行多个实例。

AE程序实际上是一组SQL语句,peoplecode代码和处理逻辑的集合。它的特点便是可以在后台进行批处理,适合于大量数据的操作,具有着严格的程序结构,并且使用Meta-SQL和标准SQL结合的方式进行编程。当有数据必须被处理而又不需要通过用户时,这时我们就可以用AE程序进行批处理。它包含了两个组件,一个是设计工具,用来定义我们的AE程序,另外一个则是运行环境,来运行和检测我们的AE程序。

2.AE程序的组成部分

下面我们来在开发工具里看看一个AE程序的结构:

通过上图,我们可以很形象的看到,一个AE程序是由一个或者多个Section组成的,一个Section又是由一个或者多个Step组成的,而一个Step又是由一个或多个Action组成的。下面我们将对每一个部分进行简要说明:

a. Section

它包含一个或者多个steps,它就相当于SQR报表程序里面的procedure,任何AE程序都应该至少包含一个名字为“MAIN”的Section,程序总是从它开始执行的。从上图可以看到。Section是可以被本程序的其它Section或者被其它程序来调用的。

下面来对它的主要属性予以说明:

Market:地区,例如Global或其他如AUS、BEL、BRA。可以将鼠标点击在其上,然后就会在该项上出现下拉列表供选择,其它属性的选择方法类似。如下图:

Platform:数据库平台,如Default、Oracle、DB2等。

Effective Status:生效状态。用于临时性停用某个Section。

Section Type:普通的数据库操作,或是对数据库的关键性升级。

Auto Commit:控制下属各Step的默认Commit方式。

Access:只有设为Public的Section才能被其他Program调用。

需要注意:点击上图中的文件夹图标,当它处于打开状态时,才可以看到Section的属性,当然Step和Action也是一样的方法来看属性的。在每一个Definition前面都有一个小加号或者减号,这是用来展开或者隐藏该项内容的。

b. Step

它是提交给AE程序的一个最小的工作单位。可以用Step来执行peoplecode,SQL语句,或者来调用其它的Section等。这些SQL、peoplecode是被包含在一个Step里来作为一个Action进行执行的。

Step的属性说明:

Commit After:本Step的Commit方式(Default,After Step,Later)。

Frequency:下属Action循环多少次后进行Commit。

On Error:下属Action运行出错后的反应方式(Abort、Ingore、Supress)。

Active:用于临时性停用某个Step。

需要注意:如果要给本Section添加新的Step,并且要把它放在该Section里的第一项时,那么鼠标应该点击在MAIN处进行操作,如下:

如果想把它放在某个Step的后面,那么鼠标就放在该Step上进行操作即可。另外Step的名字是不能够超过8个字符的。当不想要自己建立的Step的时候,鼠标点击在上面,然后右键删除即可,如下:

c. Action

一共有八种不同的Action,分别执行不同类型的任务。这八种Action又可以分为两大类。

流程控制型Action:

DO WHEN:如果有返回行,就执行一次。

DO WHILE:只要有返回行,就一直执行下去。

DO SELECT:遍历返回的各行,每行执行一次。

DO UNTIL:一直执行到有返回行。

操作型Action:

PeopleCode:执行一段PeopleCode。…

SQL:执行一段SQL代码,如删除某些行、插入某些行。

Call Section:调用另一个Section

Log Message:向Message Log写信息(如错误信息、程序运行状态信息等)

需要注意1:SQL Action和Call Section Action不能共存于同一Step中,故同一个Step最多有7个Action。假如在一个Step里已经包含了一个SQL Action,那么当新添加一个Action时,在下拉列表里是找不到Call Section Action的。如下:

需要注意2:Action有着严格的执行顺序和嵌套关系,可以从下图看到。另外,可以用DO UNTIL来终止对应的DO WHILE。

二、开发AE程序的前提准备-----熟练运用peoplecode

开发AE程序,内部逻辑由peoplecode来控制,因此我们需要对peoplecode熟练的运用。下面将结合一个页面开发的实例,来说明在页面开发中如何使用peoplecode的,在本项目里虽然涉及到的页面开发不多,但是它也是一项很重要的技术,需要掌握,因此在本节里除了会说明如何用peoplecode来实现开发实例的要求,还会对一些页面开发方面的问题进行说明。

1.开发实例说明

该页面开发实例的说明:开发三个页面,当点击其component进入页面之后,只显示两个页面,但是在页面上有链接按钮,点击相应链接,则可以跳转到第三个页面,同时还可以从第三个页面跳转到前两个页面,并且这些页面还具有包含历史记录和更正历史记录的功能。

2.对开发实例之分析

在分析之前,我们假定已经掌握如何在开发工具里定义field,record,page等,并且掌握将页面挂在某个菜单下,具体挂在菜单下的方法可以参考我写的“SQR报表技术总结”一文。

下面我们就针对上面的实例进行具体分析:

a. 首先我们来分析包含历史记录和更正历史记录的问题

在peoplesoft系统里我们会看到有些页面的底部会显示包含历史记录和更正历史记录,如下:

在刚开始一点击compnent进入页面的时候,用户就可以勾选是以什么方式进入页面,如下图。更正历史记录则可以更新页面里的数据,而包含历史记录则可以将页面里的其它历史记录也显示出来。

而有的页面却没有,如下:

实际上是否有这两项内容是由具体的业务逻辑来规定的,那么我们就从技术的角度来看看这是怎么设定的。

首先我们打开具有访问该页面权利的权限列表,查看是否是权限列表里面限定了不能包含这两项内容:

可以看到在“操作”栏里,的确有对包含历史记录和更正历史记录的限定,对应到操作里就是后两项“更新/全部显示”以及“更正”,但是也可以看到这两项是灰色的,没办法勾选。看来问题不是出在权限列表里,而是有更底层的原因。事实上这个更底层的原因就出在了component里,打开该页面所属的component,我们来看看它的属性:

可以看到这个属性里面在Actions里的确是有对包含历史记录和更正历史记录的限定,可以看到后两项是没有勾选的,而这里是否勾选就是直接来决定权限列表里面相应的操作是否是可选的。正因为这里的后两项是没有选中的,所以才会在相应的权限列表里看到对应的项是灰色的。那么我们就将其勾选上,看看会有什么样的效果:

这样设置了以后,再次打开权限列表,后两项依然是灰色的,那么问题到底是出在哪里了呢?问题就出在了虽然我们已经将component的属性已经更改了,但是这个更改是在上次注册该component之后进行的。也就是说对component的属性所做的这种改动只有经过注册后才是起效果的。在component属性的Action里哪些项选中了,直接影响注册的时候哪些操作是可以被选中的,如果我们将component属性的Action里后两项没有选中,那么注册的时候就会看到如下图所示的界面,相应的操作的后两项也是灰色的:

那么我们就component属性更改之后重新进行注册,这个时候再次打开相应的权限列表:

可以看到操作里面的全部项都成了可选的了。

需要注意1:我们在开发页面的时候,有可能会经常查看给某个组件赋予了什么权限,那么怎么样能够快速的知道该组件都赋给了哪些权限列表呢?那么我们就需要寻找系统里面组件和权限列表之间的关系,以及在系统里面是通过哪些表来存储这些信息的,我们用如下的SQL语句就可以快速查到某个组件的的权限列表:

SELECT DISTINCT auth.classid,

a.menuname,

d.pnlgrpname,

b.itemlabel,

rtrim((case when bitand(authorizedactions,1) > 0 then 'A,' END ||

case when bitand(authorizedactions,2) > 0 then 'U,' END ||

case when bitand(authorizedactions,4) > 0 then 'U+,' END ||

case when bitand(authorizedactions,8) > 0 then 'C,' END ||

case when displayonly = 1 then 'V,' END),',') AuthAction

FROM psauthitem auth,

psmenudefn a,

psmenuitem b,

pspnlgroup c,

pspnlgrpdefn d

WHERE a.menuname = b.menuname

AND b.pnlgrpname = c.pnlgrpname

AND d.pnlgrpname = c.pnlgrpname

AND auth.menuname = a.menuname

AND auth.barname = b.barname

AND auth.baritemname = b.itemname

AND auth.pnlitemname = c.itemname

AND b.itemname LIKE 'HE_JOB_PAGE_CPT'

ORDER BY d.pnlgrpname

黑斜体字样部分是我们根据自己的具体需要,来进行替换的,它表示的是我们将组件注册在菜单下的该菜单项的名字,像上面我们就可以在开发工具里找到这个菜单项的名字,如下:

本文来源:https://www.bwwdw.com/article/wmwo.html

Top