一、前言
項(xiàng)目需求是根據(jù)當(dāng)天及前兩天的離職員工信息(假設(shè)這是一個(gè)定時(shí)器任務(wù)每天下午5點(diǎn)執(zhí)行程序,計(jì)算前兩天的員工工號(hào)是為了將5點(diǎn)之后辦理離職的員工工號(hào)找出來(lái)),將這些員工在用戶表 USR02 中的鎖定狀態(tài)設(shè)置為 “64”,以保證離職員工無(wú)法繼續(xù)使用系統(tǒng)賬號(hào)。
二、編碼
ZHRE008
*&---------------------------------------------------------------------*
*& Report ZHRE008
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zhre008.
INCLUDE zhre008_top. " 數(shù)據(jù)定義
INCLUDE zhre008_frm." 功能定義
START-OF-SELECTION.
*** 取數(shù)方式
PERFORM frm_get_data. " 表連接取數(shù)
END-OF-SELECTION.
zhre008_top
*&---------------------------------------------------------------------*
*& 包含 ZHRE008_TOP
*&---------------------------------------------------------------------*
TABLES:
pa0000,usr02.
*** 定義內(nèi)表 ***
DATA:
BEGIN OF gs_item,
pernr TYPE pa0000-pernr, "員工工號(hào)
bname TYPE usr02-bname, "用戶名
END OF gs_item.
DATA:
gt_item LIKE TABLE OF gs_item.
zhre008_frm文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-607952.html
*&---------------------------------------------------------------------*
*& 包含 ZHRE008_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
DATA: lv_count TYPE i. "計(jì)數(shù)
**** 獲取當(dāng)前日期 ****
DATA: lv_current_date TYPE sy-datum, "當(dāng)前日期變量
lv_previous_date TYPE sy-datum. "前兩天日期變量
**** 計(jì)算前兩天的時(shí)間 ****
lv_current_date = sy-datum.
lv_previous_date = lv_current_date - 2.
*** 從PA0000表中獲取員工工號(hào)(pernr)***
SELECT
pernr"員工號(hào)
INTO CORRESPONDING FIELDS OF TABLE gt_item
FROM pa0000
WHERE massn = '04'
AND ( endda = '99991231' OR begda >= lv_previous_date ).
SORT gt_item BY pernr.
*** 根據(jù)獲取的員工工號(hào),修改USR02表中的用戶鎖定狀態(tài) ***
IF gt_item[] IS NOT INITIAL."用于檢查變量是否為空或未初始化
"獲取用戶名并排除已鎖定用戶
SELECT bname INTO TABLE @DATA(lt_bname)
FROM usr02
WHERE uflag NOT IN (32,64,128).
SORT lt_bname BY bname.
ELSE.
WRITE: '在PA0000表中找不到離職的員工。'.
ENDIF.
LOOP AT gt_item ASSIGNING FIELD-SYMBOL(<gs_item>).
"類型轉(zhuǎn)換,先將pernr去除2個(gè)0 <gs_item>-bname = <gs_item>-pernr.
<gs_item>-bname = COND #( WHEN <gs_item>-pernr IS NOT INITIAL THEN <gs_item>-pernr+2(6) ELSE '' ).
READ TABLE lt_bname INTO DATA(ls_bname) WITH KEY bname = <gs_item>-bname BINARY SEARCH.
IF sy-subrc = 0.
"修改鎖定狀態(tài)邏輯
UPDATE usr02 SET uflag = 64 WHERE bname = ls_bname-bname.
IF sy-subrc = 0.
ADD 1 TO lv_count."將變量lv_count的值加1,用于統(tǒng)計(jì)更新的記錄數(shù)
WRITE: / '員工工號(hào)', ls_bname-bname, '已被鎖定。'.
COMMIT WORK."提交之前的事務(wù)處理,將進(jìn)行的數(shù)據(jù)庫(kù)操作永久保存
ENDIF.
ENDIF.
ENDLOOP.
WRITE: / '成功鎖定', lv_count, '個(gè)離職員工。'.
ENDFORM.
三、效果展示
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-607952.html
到了這里,關(guān)于SAP ABAP 用戶狀態(tài)鎖定案例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!