PeopleSoft之生效日期

1       概念

2       相关字段

2.1        生效状态(EFF_STATUS)

2.2        生效序号(EFFSEQ)

3       生效日期逻辑

3.1        放大镜中PeopleTools自动增加的生效日期逻辑

3.2        编写自己的生效日期逻辑

3.2.1         常见错误

3.2.2         正确示例

 

 

在PeopleSoft的应用中,生效日期(EFFDT)贯穿始终,成为数据模型中管理带时间线对象的利器。它言简意赅却又威力无比。

 

1 概念

生效日期字段把信息分成历史的,当前的和将来的[1]。我们用一个表来解释, 

当前日期,当前数据

当前日期指的是过去最接近今天的日期(含今天)。对应地,当前数据是指当前日期指示的那条数据。当前日期由有且仅有一个,当前数据也有且仅有一行。

历史日期,历史数据

小于当前日期的所有日期都是历史日期,历史日期指示的数据行即为历史数据。历史日期可以有多个,历史数据可以有多行。

将来日期,将来数据

大于当前日期的所有日期都是将来日期,将来日期指示的数据行即为将来数据。将来日期可以有多个,将来数据可以有多行。

 

  • 通过生效日期,您可以按时间线维护数据。这样就可以追溯历史信息,也可以安排将来的事件。
  • 通过生效日期,您可以准确地维护数据。例如,以2018年6月1日为生效日期新创建了一个部门A,在职务数据页面上,如果某行数据的生效日期在2018年5月30日,那么对于此行数据来说部门A就是将来的数据,此行数据是无法看到尚未生效的部门A的。

2 相关字段

2.1    生效状态(EFF_STATUS)

生效状态用来指示某生效日期对应数据行的状态。例如在下面的部门表中,加入了EFF_STATUS。一般情况EFF_STATUS不作为key。

PeopleSoft之生效日期_第1张图片

对应的前台页面,

PeopleSoft之生效日期_第2张图片

2.2    生效序号(EFFSEQ)

当同一个生效日期下有多行数据的时候,使用生效序号来区分。例如在JOB表中,职务数据在一天之内的多个变化可以用EFFSEQ来表达,EFFSEQ也是4个key之一。

PeopleSoft之生效日期_第3张图片

对应的前台页面

PeopleSoft之生效日期_第4张图片

 

3 生效日期逻辑

关键点有3个

  • 子查询(select max(effdt…) 选择最接近某个日期的数据,对标的日期可以是今天,也可以是某个业务发生的日期。
  • 在PeopleTools自动附加生效日期逻辑的时候,如果当前页面有一个生效日期,那么会以这个生效日期为对标日期,放大镜中选取的对象是这个日期之前的生效对象。
  • 状态检查(eff_status = ‘A’ or eff_status <> ‘I’)正确做法是必须放到子查询的外面。这是一个常见的错误。我们用接近业务一点的语言说就是,进行生效日期检查的时候,先要看有没有当前数据,再看这行数据状态是不是有效。

Let’s go,让我们进入实战吧! 

3.1    放大镜中PeopleTools自动增加的生效日期逻辑

在后台中,我们看到JOB表中的字段DEPTID有放大镜对应的表是DEPT_TBL,DEPT_TBL也是用EFFDT去管理的。

PeopleSoft之生效日期_第5张图片

在职务数据页面,当我们打开放大镜,选择部门的时候,会自动加上生效日期的过滤。

PeopleSoft之生效日期_第6张图片

我们Trace一下打开放大镜时候的SQL(如何Trace暂且不表)会发现PeopleTools自动增加了生效日期过滤,对标时间就是职务数据的业务发生日期– 2009/01/26。这和我们在前文的概念中讲的是一致的。

打开放大镜时的两个绑定变量分别是SHARE和2009-01-26

3.2    编写自己的生效日期逻辑

编写自己的生效日期逻辑的时候也需要和标准功能的逻辑保持一致。最常犯的错误就是把生效状态的检查和生效日期逻辑耦合到一起,实际上这两者是分开的。

 

3.2.1  常见错误

下图中的生效日期是不了解生效日期逻辑的开发者常犯的错误。

假如今天是2018年5月12日,部门表中有如下数据

SETID

DEPTID

EFFDT

EFF_STATUS

Descr

SHARE

13100

2020-06-01

A

财务共享中心

SHARE

13100

2018-05-11

I

集团财务部

SHARE

13100

2018-01-01

A

财务服务部

SHARE

13100

2017-12-05

A

财务处

以当前日期为对标日期,按照正确的生效日期逻辑,我们会看不见13100这个部门,因为它的生效状态是I (Inactive)。如果我们按照上面的错误示例逻辑,我们会找到2018-01-01(财务服务部)这行数据。这违背了生效日期的概念。

3.2.2  正确示例

系统中有一个极好的学习生效日期写法的例子就是record.JOB_CURR_VW。

PeopleSoft之生效日期_第7张图片

 

%CurrentDateIn代表当前日期

红色框中的是生效日期的逻辑,蓝色的是生效序号逻辑,黄色的是hr状态,可以替换成生效状态。

 

总结一下,生效日期是一个非常基础非常易懂,但又是极其重要的概念。它的威力非常强大,可以说,没有了生效日期,PeopleSoft就不再是PeopleSoft了。

你可能感兴趣的:(ERP)