HR常用增强
最近在做了好多HR的增强整理下,希望能坚持下来持续更新记录
OM模块HRBAS00INFTY
场景1 PPOME拖动人、岗是做校验、更新日志用于跑job程序更新履历信息
1、在AFTER_INPUT里做校验部分情况不允许拖动
CHECK sy-tcode = 'PPOME' .
DATA(ls_new) = new_innnn.
DATA(ls_old) = old_innnn.
IF ls_new-endda = '99991231'.
lv_datum = ls_new-begda.
IF ls_new-otype = 'P' AND ls_new-varyf(1) = 'S' AND ls_new-infty = '1001'.
IF ls_old-objid = ls_new-objid AND ls_old-otype = ls_new-otype.
" 人员拖动
IF ls_new-otype = 'P' AND ls_new-infty = '1001'.
lv_pernr = ls_new-objid.
SELECT * INTO TABLE @DATA(lt_1001)
FROM hrp1001
WHERE objid = @lv_pernr
AND otype = 'P'
AND rsign = 'B'
AND relat = '008'
AND begda LE @ls_new-begda
AND endda GE @ls_new-begda.
IF lines( lt_1001 ) > 1.
MESSAGE e002(zhr_message) WITH lv_pernr '存在兼岗信息不允许拖动'.
ENDIF.
ENDIF.
ENDIF.
ELSE.
ENDIF.
ENDIF.
2、在IN_UPDATE中记录日志表核心代码如下
CHECK sy-tcode = 'PPOME' AND sy-ucomm = 'SAVE'.
LOOP AT new_image INTO DATA(ls_new) WHERE endda = '99991231'.
CLEAR: lv_flag, lv_msg, lv_pernr.
CLEAR: lt_objec_old[], lt_objec_new[].
CLEAR: ls_yd , lt_yd[].
lv_datum = ls_new-begda.
IF ( ( ls_new-otype = 'P' AND ls_new-varyf(1) = 'S' ) OR ( ls_new-otype = 'S' AND ls_new-varyf(1) = 'O' ) ) AND ls_new-infty = '1001'.
ELSE.
CONTINUE.
ENDIF.
READ TABLE old_image INTO DATA(ls_old) WITH KEY objid = ls_new-objid otype = ls_new-otype.
IF sy-subrc = 0.
" 人员拖动
IF ls_new-otype = 'P' AND ls_new-infty = '1001'.
ENDIF.
" 岗位拖动
IF ls_new-otype = 'S' AND ls_new-infty = '1001'.
ENDIF.
IF lt_zsy_d_hr0098c IS NOT INITIAL.
MODIFY zsy_d_hr0098c FROM TABLE lt_zsy_d_hr0098c.
CLEAR: lt_zsy_d_hr0098c.
ENDIF.
ENDMETHOD.
场景2 实岗挂标岗是自动根据标岗岗位说明书更新实岗岗位说明书
尝试了很多方法都没能完美的实现,最开始在程序中直接用RH_PNNNN_MAINTAIN进行更新,发现实岗岗位说明书更新了,但是标岗没挂上。后来封装函数用starting new task 的方式,发现创建的时候会有问题。最后用仿照标准写写buffer的方式,目前测试还行基本没问题
1、在AFTER_INPUT把要更新的实岗岗位说明书的信息写入buffer中
CALL FUNCTION 'RHOM_WRITE_INFTY_BUFFERED'
EXPORTING
fcode = lv_fcode
plvar = lv_plvar
otype = lv_otype
objid = lv_objid
infty = lv_infty
istat = lv_istat
begda = lv_begda
endda = lv_endda
* NEW_LANGU =
* UPDATE_DB =
* WORST_MSGTY =
TABLES
innnn_exp = lt_record
EXCEPTIONS
no_active_plvar = 1
write_error = 2
infty_not_allowed = 3
OTHERS = 4.
场景3 用Z表模仿1002为信息类型存放长文本
1、长文本屏幕处理逻辑完全复制1002的屏幕及逻辑
"PBO部分主要调整代码
CLEAR: gs_dyntab_1col,
gt_dyntab_1col[].
LOOP AT dyn_tab ASSIGNING <gs_dyn_tab>.
gs_dyntab_1col-vdata = <gs_dyn_tab>-vdata.
APPEND gs_dyntab_1col TO gt_dyntab_1col.
ENDLOOP.
IF gv_key = p9903-