ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:35.91KB ,
资源ID:8298226      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8298226.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PeoplesoftHCM项目AE程序技术总结.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

PeoplesoftHCM项目AE程序技术总结.docx

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

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

3、大量数据的操作,具有着严格的程序结构,并且使用Meta-SQL和标准SQL结合的方式进行编程。当有数据必须被处理而又不需要通过用户时,这时我们就可以用AE程序进行批处理。它包含了两个组件,一个是设计工具,用来定义我们的AE程序,另外一个则是运行环境,来运行和检测我们的AE程序。2.AE程序的组成部分下面我们来在开发工具里看看一个AE程序的结构:通过上图,我们可以很形象的看到,一个AE程序是由一个或者多个Section组成的,一个Section又是由一个或者多个Step组成的,而一个Step又是由一个或多个Action组成的。下面我们将对每一个部分进行简要说明:a. Section它包含一个或者

4、多个steps,它就相当于SQR报表程序里面的procedure,任何AE程序都应该至少包含一个名字为“MAIN”的Section,程序总是从它开始执行的。从上图可以看到。Section是可以被本程序的其它Section或者被其它程序来调用的。下面来对它的主要属性予以说明:Market:地区,例如Global或其他如AUS、BEL、BRA。可以将鼠标点击在其上,然后就会在该项上出现下拉列表供选择,其它属性的选择方法类似。如下图:Platform:数据库平台,如Default、Oracle、DB2等。Effective Status:生效状态。用于临时性停用某个Section。Section T

5、ype:普通的数据库操作,或是对数据库的关键性升级。Auto Commit:控制下属各Step的默认Commit方式。Access:只有设为Public的Section才能被其他Program调用。需要注意:点击上图中的文件夹图标,当它处于打开状态时,才可以看到Section的属性,当然Step和Action也是一样的方法来看属性的。在每一个Definition前面都有一个小加号或者减号,这是用来展开或者隐藏该项内容的。b. Step它是提交给AE程序的一个最小的工作单位。可以用Step来执行peoplecode,SQL语句,或者来调用其它的Section等。这些SQL、peoplecode是

6、被包含在一个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上进行操作

7、即可。另外Step的名字是不能够超过8个字符的。当不想要自己建立的Step的时候,鼠标点击在上面,然后右键删除即可,如下:c. Action一共有八种不同的Action,分别执行不同类型的任务。这八种Action又可以分为两大类。流程控制型Action:DO WHEN:如果有返回行,就执行一次。DO WHILE:只要有返回行,就一直执行下去。DO SELECT:遍历返回的各行,每行执行一次。DO UNTIL:一直执行到有返回行。操作型Action:PeopleCode:执行一段PeopleCode。SQL:执行一段SQL代码,如删除某些行、插入某些行。Call Section:调用另一个Sec

8、tionLog 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程序,内部逻辑由p

9、eoplecode来控制,因此我们需要对peoplecode熟练的运用。下面将结合一个页面开发的实例,来说明在页面开发中如何使用peoplecode的,在本项目里虽然涉及到的页面开发不多,但是它也是一项很重要的技术,需要掌握,因此在本节里除了会说明如何用peoplecode来实现开发实例的要求,还会对一些页面开发方面的问题进行说明。1.开发实例说明该页面开发实例的说明:开发三个页面,当点击其component进入页面之后,只显示两个页面,但是在页面上有链接按钮,点击相应链接,则可以跳转到第三个页面,同时还可以从第三个页面跳转到前两个页面,并且这些页面还具有包含历史记录和更正历史记录的功能。2.

10、对开发实例之分析在分析之前,我们假定已经掌握如何在开发工具里定义field,record,page等,并且掌握将页面挂在某个菜单下,具体挂在菜单下的方法可以参考我写的“SQR报表技术总结”一文。下面我们就针对上面的实例进行具体分析:a. 首先我们来分析包含历史记录和更正历史记录的问题在peoplesoft系统里我们会看到有些页面的底部会显示包含历史记录和更正历史记录,如下:在刚开始一点击compnent进入页面的时候,用户就可以勾选是以什么方式进入页面,如下图。更正历史记录则可以更新页面里的数据,而包含历史记录则可以将页面里的其它历史记录也显示出来。而有的页面却没有,如下:实际上是否有这两项内

11、容是由具体的业务逻辑来规定的,那么我们就从技术的角度来看看这是怎么设定的。首先我们打开具有访问该页面权利的权限列表,查看是否是权限列表里面限定了不能包含这两项内容:可以看到在“操作”栏里,的确有对包含历史记录和更正历史记录的限定,对应到操作里就是后两项“更新/全部显示”以及“更正”,但是也可以看到这两项是灰色的,没办法勾选。看来问题不是出在权限列表里,而是有更底层的原因。事实上这个更底层的原因就出在了component里,打开该页面所属的component,我们来看看它的属性:可以看到这个属性里面在Actions里的确是有对包含历史记录和更正历史记录的限定,可以看到后两项是没有勾选的,而这里是

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

13、后两项没有选中,那么注册的时候就会看到如下图所示的界面,相应的操作的后两项也是灰色的:那么我们就component属性更改之后重新进行注册,这个时候再次打开相应的权限列表:可以看到操作里面的全部项都成了可选的了。需要注意1:我们在开发页面的时候,有可能会经常查看给某个组件赋予了什么权限,那么怎么样能够快速的知道该组件都赋给了哪些权限列表呢?那么我们就需要寻找系统里面组件和权限列表之间的关系,以及在系统里面是通过哪些表来存储这些信息的,我们用如下的SQL语句就可以快速查到某个组件的的权限列表:SELECT DISTINCT auth.classid,a.menuname,d.pnlgrpname

14、,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),) AuthActionFROM psauthitem a

15、uth,psmenudefn a,psmenuitem b,pspnlgroup c,pspnlgrpdefn dWHERE a.menuname = b.menunameAND b.pnlgrpname = c.pnlgrpnameAND d.pnlgrpname = c.pnlgrpnameAND auth.menuname = a.menunameAND auth.barname = b.barnameAND auth.baritemname = b.itemnameAND auth.pnlitemname = c.itemnameAND b.itemname LIKE HE_JOB_P

16、AGE_CPTORDER BY d.pnlgrpname黑斜体字样部分是我们根据自己的具体需要,来进行替换的,它表示的是我们将组件注册在菜单下的该菜单项的名字,像上面我们就可以在开发工具里找到这个菜单项的名字,如下:有时候我们不仅仅需要查看某个组件和权限列表之间的关系,甚至还会查找权限列表和角色之间的关系,那么它们的关系可以通过下面的SQL来实现的:SELECT DISTINCT d.pnlgrpname,e.rolename,f.descr,auth.classid,rtrim(case when bitand(authorizedactions,1) 0 then A, END |case

17、 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,g.classdefndescFROM psauthitem auth,psmenudefn a,psmenuitem b,pspnlgroup c,pspnlgrpdefn d,ps

18、roleclass e,psroledefn f,psclassdefn gWHERE a.menuname = b.menunameAND b.pnlgrpname = c.pnlgrpnameAND d.pnlgrpname = c.pnlgrpnameAND auth.menuname = a.menunameAND auth.barname = b.barnameAND auth.baritemname = b.itemnameAND auth.pnlitemname = c.itemnameAND auth.classid = e.classidAND e.rolename = f.

19、rolenameAND auth.classid = g.classidAND auth.classid = SHEC_COMPENSATION_MANAGEMENTORDER BY d.pnlgrpname, e.rolename, auth.classid黑斜体字样部分是我们需要查找的权限列表的名字,可以进行替换。需要注意2:通过上面对包含历史记录和更正历史记录的研究,那么会看到对于某些页面具有什么样的操作的权限,例如是否可更改等,我们可以在一开始注册component的时候进行限定,这里的限定直接就决定了我们在权限列表里面可以对哪些操作进行权限控制。也就是说component是最低层原因

20、,在此基础上我们再来通过权限列表进行控制。那么我们来看看用权限列表进行控制的操作:进入下面的页面后,点到“页面”这个页面:然后在相应的菜单下,点击编辑组件:然后点击相应组件下面的编辑页面:此时就可以对相应的组件的操作进行权限控制了。如果我们把后两项不进行勾选,那么点击相应的组件的时候,一开始就不会出现对“包含历史记录”和“更正历史记录”的选择字样,可以将它跟在权限列表里对操作的后两项勾选了的页面进行比较,如下:需要注意3:从上图我们可以看到打开页面时有一个搜索依据,那么这个搜索依据是怎么来设置的呢?我们可以在组件的属性里面查找得到下面红圈里面的属性,是对搜索记录的指定。限定完上面的记录之后,我

21、们还需要在记录的字段属性里面进行设置:这样设置之后就会在打开该component的时候出现搜索依据里面需要显示的字段。需要注意4:在开发页面的过程中,可能会在WEB上遇到下面的错误:提示数据完整性错误。分析这个错误的原因:是因为我在后台的开发工具里面修改了此页面上的一些东西,但是我之前在这个WEB页面进行了一系列操作之后,依然停留在此,当在后台修改完了之后再次继续在刚才停留的这个页面上操作,就会提示这样的错误。解决办法是:重新打开该页面。b. 下面我们再次回到开发实例说明,对其进行分析。我们可以知道前两个页面是可以注册在一个组件下的,那么第三个页面是否也要注册在这个组件下呢。回答是肯定的。按照

22、常规将三个页面注册在同一个组件下面,点击进入之后,三个页面会同时显示出来。但是我们需要的是点击进入该组件之后一开始只能显示前两个页面,通过点击链接按钮才能够跳转到第三个页面,这又是怎么来控制的呢?这就是peoplecode的功能所在了。通过编写一系列的peoplecode代码,并且确保其写在合适的位置,那么就可以实现我们想要的功能。那么接下来我们就将包含这三个页面的组件注册在某个菜单下。c. 现在我们再来讨论子页面的问题。为什么要建一个子页面呢?因为在页面上需要有链接按钮来实现页面之间的相互跳转,如果给三个页面分别建立跳转按钮,那么会发现这样做很麻烦,并且还牵扯到peoplecode的编写问题

23、,那么如果我们把链接按钮做在一个子页面上,在这三个页面上分别插入这个子页面即可,peoplecode编写起来也很方便。现在我们就来建立一个record,目的是让该record里的两个字段分别充当两个链接按钮,并且将它们放在子页面上,如下:需要注意1:建立子页面的时候,点击新建,选择的是Page,那么这个子页面体现在哪里呢?事实上这是通过页面的属性来设置的,如下:对于链接按钮的实现,是在field的属性里设置的,如下:需要注意2:我们会发现在record里面,有些field的名字是以黑体显示的,而有些字段却没有,这是为什么呢?原因是有些field里编写了peoplecode代码,那么就会显示黑体

24、。d. 对着上图来说明这个子页面上两个链接按钮的用意,点击“职务数据”按钮另其可以跳转到前两个页面:HE_JOB_TEST_PG和HE_POSITION_PG,并且该按钮当即失效,不能点击; 点击“员工数据”按钮则可以跳转到HE_LABOR_TEST_PG页面,并且“员工数据”按钮当即失效,“职务数据”按钮又生效。根据这样的需求我们来在两个field里编写peoplecode。在“职务数据”(JOB_DATA_BTN1)里我们编写下面的代码:If %Component = Component.HE_JOB_PAGE_CPT ThenPage.HE_JOB_TEST_PG.Visible = T

25、rue;Page.HE_POSITION_PG.Visible = True;TransferPanel(Panel.HE_JOB_TEST_PG);End-If;在“员工数据”(JOB_DATA_BTN2)里我们编写下面的代码:If %Component = Component.HE_JOB_PAGE_CPT ThenPage.HE_LABOR_TEST_PG.Visible = True;TransferPanel(Panel.HE_LABOR_TEST_PG);End-If;需要注意1:在上面我们已经看到编写的peoplecode了,事实上在上例中除了需要考虑在哪个field里面编写代码

26、之外,我们还需要考虑另外一个方面,即这个代码应该写在什么样的事件里呢?像上面的例子,实际上我们是把它写在FieldChange事件里的。由此我们引开了一个话题,peoplecode都可以编写在哪些Defidition里面?每种Defidition里都可以有什么样的事件?那么在页面上做了某些操作之后,在后台会引发哪些事件,他们之间触发顺序是什么?针对上面的问题我们来进行分析:在Record Field 、Component Rcord Field 、Component Record、Component、page、Menu等对象里都可以来编写peoplecode的。Fields是独立定义的,是其他

27、对象的基础,它的属性在使用它的所有Record中被共享。独立的Field是没有事件的; Record fields是包含在Record中被定义的,只在被定义的Record中有效; Component record fields是被某个component使用的Record fields,有自己独特的事件和PeopleCode程序。我们通过一个表格来说明各个对象里的都包含了什么样的事件:Record FieldComponent Rcord FieldComponent RecordComponentpageMenuFieldChangeFieldDefaultFieldEditField For

28、mulaPrePopupRowDeleteRowInitRowInsertRowSelectSaveEditSavePostChgSavePreChgSearchInitSearchSaveWorkflowFieldChangeFieldDefaultFieldEditPrePopupRowDeleteRowInit RowInsertRowSelectSaveEditSavePostChgSavePreChgSearchInitSearchSavePostBuildPreBuildSavePostChg SavePreChgWorkflowActivateItemSelected现在我们来举

29、一个例子说明事件之间的触发顺序,当用户改变了一个Field之后,都会触发哪些事件呢?顺序是什么?如下:Record.recordA.fielda.FieldEdit - Component.recordA.fielda.FieldEdit -Record.recordB.fieldb.FieldEdit - Component.recordB.fieldb.FieldEdit -Record.recordA.fielda.FieldChange - Component.recordA.fielda.FieldChange -Record.recordB.fieldb.FieldChange -

30、 Component.recordB.fieldb.FieldChange当然不同的操作会触发不同的事件顺序。需要注意2: 像其它程序一样,peoplecode也可以写注释的,那么一共有三种加注释的方式:第一种:使用/* */第二种:使用REM,以分号作为注释的结尾。第三种:使用e. 我们再来分析应该在页面上编写的peoplecode代码,当我们点击了组件进入页面之后,希望页面上有哪些设置呢?根据实例要求已经很明了了,当是前两个页面时,我们希望第二个链接按钮可点击,第三个页面隐藏,当是第三个页面时,我们希望前两个页面隐藏,第一个链接按钮可点击进入前两个页面。而三个页面都需要这样的代码,那么我们

31、是否可以把它编写为一个通用的代码,从而在三个页面里面调用即可,回答是可以的。在peoplecode里这是怎么实现的呢?事实上我们可以再建一个Record,在该Record的Field的FieldFormula事件里面存放这个通用的函数,令这个函数的参数为页面。建立的Record如下:在其Field的FieldFormula事件里编写如下的函数:Function shec_JobNavigation(&Page);If (%Component = Component.HE_JOB_PAGE_CPT) ThenEvaluate &PageWhen = Page.HE_JOB_TEST_PGWhen = Page.HE_POSITION_PGGray(SHEC_DERIVED_HR.JOB_DATA_BTN1);UnGray(SHEC_DERIVED_HR.JOB_DATA_BTN2);Page.HE_LABOR_TEST_PG.Visible = False;Break;When = Page.HE_LABOR_TEST_PGUnGray(SHEC_DERIVE

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1