SAP HR中时间有效性决定了某个infotype 内表中的数据只有最近时间的那条记录有效。
在实际的开发过程中,常常使用function : HR_READ_INFOTYPE ,来获得某个员工的某个infotype中的数据。
由于在指定的开始时间和结束时间内,该infotype对应的记录不一定只有一条,所以得到的结果是保存在内表中的。
但是,只有最近时间的那条记录才对我们有意义。这就需要我们获得内表中按时间倒序排列的第一条记录了。
实现代码如下所示:
以获得某个员工 Infotype 0001 中的数据为例
第一步:声明用于保存结果的内表lt_p0001 ,是个标准表。
DATA: lt_p0001 TYPE STANDARD TABLE OF p0001,
ls_p0001 TYPE p0001.
第二步:调用函数'HR_READ_INFOTYPE',获得员工的infotype中的所有记录,保存在第一步声明的内表lt_p0001中。
最早开始时间结束时间,是用户在逻辑数据库标准选择屏幕上输入的开始时间和结束时间:pn-begda、pn-endda
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
pernr = ls_alv_data-pernr
infty = '0001'
begda = pn-begda
endda = pn-endda
TABLES
infty_tab = lt_p0001
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
第三步:对内表进行倒序排列,取得排序后的第一条记录
IF sy-subrc = 0.
SORT lt_p0001 BY endda DESCENDING.
READ TABLE lt_p0001 INTO ls_p0001 INDEX 1.
ENDIF.
所以,最后lt_p0001中保存的数据,就是有效数据