zoukankan      html  css  js  c++  java
  • BDC-用户锁定及有效期设置程序

    *&---------------------------------------------------------------------*
    *& Report ZPMRP032
    *&---------------------------------------------------------------------*
    *&用户锁定及有效期设置程序--Creat by Bruce King220200527
    *&将ZPMRP029及ZPMRP030结合起来,并使用BDC录屏形式控制程序*
    *&增加了新建后不立即登录的排除*
    *&---------------------------------------------------------------------*
    REPORT ZPMRP032.
    TABLES:USR02.
    TYPES:BEGIN OF TY_DATA,
            BNAME TYPE USR02-BNAME,
            TRDAT TYPE USR02-TRDAT,
          END OF TY_DATA.
    DATA:LT_BNAME TYPE STANDARD TABLE OF TY_DATA.
    
    DATA:ITAB_BDCTAB TYPE TABLE OF BDCDATA WITH HEADER LINE.
    DATA:P_MODE TYPE CHAR1 VALUE 'N',
         P_UPDA TYPE CHAR1 VALUE 'L'.
    DATA LV_MESS TYPE STRING.
    DATA BEGIN OF MESSTAB OCCURS 10.
    INCLUDE STRUCTURE BDCMSGCOLL.
    DATA END OF MESSTAB.
    DATA:ZTIME TYPE USR02-GLTGB.
    ZTIME = SY-DATUM.
    
    PARAMETERS:P_BACK AS CHECKBOX."后台
    SELECT-OPTIONS:S_BNAME FOR USR02-BNAME."前台用户名
    
    START-OF-SELECTION.
      IF P_BACK NE 'X'.
        LOOP AT S_BNAME.
          PERFORM USER_LOCK USING S_BNAME-LOW."用户锁定
          PERFORM MODIFY_DATE USING S_BNAME-LOW SY-DATUM."用户有效期设置
          CLEAR:S_BNAME.
        ENDLOOP.
      ELSE.
        PERFORM GET_NAME."取得三个月前到现在当前时间没有登录的用户名
        LOOP AT LT_BNAME ASSIGNING FIELD-SYMBOL(<FS_BNAME>).
          PERFORM USER_LOCK USING <FS_BNAME>-BNAME.
          PERFORM MODIFY_DATE USING <FS_BNAME>-BNAME SY-DATUM.
        ENDLOOP.
      ENDIF.
    FORM USER_LOCK USING P_S_BNAME TYPE USR02-BNAME.
      DATA:MSG1 TYPE STRING.
      DATA:MSG2 TYPE STRING.
      REFRESH ITAB_BDCTAB[].
      REFRESH MESSTAB[].
      PERFORM BDC_DYNPRO      USING 'SAPLSUID_MAINTENANCE' '1050'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
            'SUID_ST_BNAME-BNAME'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
            '=LOCK'.
      PERFORM BDC_FIELD       USING 'SUID_ST_BNAME-BNAME'
            P_S_BNAME.
      PERFORM BDC_DYNPRO      USING 'SAPLSUID_MAINTENANCE' '1500'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
            'G_STATTEXT'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
            '=LOCK'.
    *PERFORM bdc_transaction USING 'SU01'.
    
      CALL TRANSACTION 'SU01' USING ITAB_BDCTAB
            MODE      P_MODE
            UPDATE    P_UPDA
            MESSAGES INTO MESSTAB.
    
      READ TABLE MESSTAB WITH KEY MSGTYP = 'E'.
      IF P_BACK NE 'X'.
        IF SY-SUBRC EQ 0.
          MSG1 = |用户{ S_BNAME-LOW }锁定失败|.
          MESSAGE MSG1 TYPE 'I'.
        ELSE.
          MSG2 = |用户{ S_BNAME-LOW }锁定成功|.
          MESSAGE MSG2 TYPE 'I'.
        ENDIF.
        CLEAR:MSG1,MSG2.
      ENDIF.
    ENDFORM.
    
    FORM MODIFY_DATE USING P_S_BNAME TYPE USR02-BNAME P_DATE TYPE SY-DATUM.
      DATA:MSG3 TYPE STRING.
      DATA:MSG4 TYPE STRING.
      REFRESH ITAB_BDCTAB[].
      REFRESH MESSTAB[].
      PERFORM BDC_DYNPRO      USING 'SAPLSUID_MAINTENANCE' '1050'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
            'SUID_ST_BNAME-BNAME'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
            '=CHAN'.
      PERFORM BDC_FIELD       USING 'SUID_ST_BNAME-BNAME'
            P_S_BNAME.
      PERFORM BDC_DYNPRO      USING 'SAPLSUID_MAINTENANCE' '1100'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
            '=LOGO'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
            'SUID_ST_NODE_PERSON_NAME_EXT-TITLE_MEDI'.
    *  PERFORM bdc_field       USING 'SUID_ST_NODE_PERSON_NAME-NAME_LAST'
    *        record-NAME_LAST_002.
      PERFORM BDC_DYNPRO      USING 'SAPLSUID_MAINTENANCE' '1100'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
            '=UPD'.
      PERFORM BDC_FIELD       USING 'BDC_CURSOR'
            'SUID_ST_NODE_LOGONDATA-GLTGB'.
    *  PERFORM bdc_field       USING 'SUID_ST_NODE_LOGONDATA-USTYP'
    *        record-USTYP_003.
      PERFORM BDC_FIELD       USING 'SUID_ST_NODE_LOGONDATA-GLTGB'
            P_DATE.
      CALL TRANSACTION 'SU01' USING ITAB_BDCTAB
            MODE      P_MODE
            UPDATE    P_UPDA
            MESSAGES INTO MESSTAB.
      IF P_BACK NE 'X'.
        READ TABLE MESSTAB WITH KEY MSGTYP = 'E'.
        IF SY-SUBRC EQ 0.
          MSG3 = |用户{ S_BNAME-LOW }有效期修改失败|.
          MESSAGE MSG3 TYPE 'I'.
        ELSE.
          MSG4 = |用户{ S_BNAME-LOW }有效期修改成功|.
          MESSAGE MSG4 TYPE 'I'.
        ENDIF.
        CLEAR:MSG3,MSG4.
      ENDIF.
    ENDFORM.
    
    FORM BDC_DYNPRO  USING   NAME VALUE.
      CLEAR ITAB_BDCTAB.
      ITAB_BDCTAB-PROGRAM = NAME.
      ITAB_BDCTAB-DYNPRO  = VALUE.
      ITAB_BDCTAB-DYNBEGIN = 'X'.
      APPEND ITAB_BDCTAB.
    ENDFORM.                    "BDC_DYNPRO
    *&---------------------------------------------------------------------*
    *&      FORM  BDC_FIELD
    *&---------------------------------------------------------------------*
    FORM BDC_FIELD  USING    NAME VALUE.
      CLEAR ITAB_BDCTAB.
      ITAB_BDCTAB-FNAM = NAME.
      ITAB_BDCTAB-FVAL = VALUE.
      APPEND ITAB_BDCTAB.
    ENDFORM.                    "BDC_FIELD
    
    FORM GET_NAME .
      DATA:ZDATE TYPE SY-DATUM.
      CALL FUNCTION 'CCM_GO_BACK_MONTHS'
        EXPORTING
          CURRDATE   = SY-DATUM
          BACKMONTHS = 3
        IMPORTING
          NEWDATE    = ZDATE.
      SELECT BNAME TRDAT FROM USR02 INTO CORRESPONDING FIELDS OF TABLE LT_BNAME
        WHERE TRDAT < ZDATE AND GLTGB = '00000000' AND UFLAG <> '64' AND ERDAT < ZDATE."增加被锁定的不取出来,继续增加建立后不立即登录的排除
    ENDFORM.
  • 相关阅读:
    Oracle11g 修改内存配置
    七.从按键输入到GPIO通用驱动
    三.C语言版本的LED驱动试验
    五.NXP恩智浦官方SDK使用
    前期准备——1.Makefile的使用及基本语法
    八.主频及时钟配置
    四.指针形式对寄存器进行操作(类似STM32效果)
    二.I.MX6U的启动方式
    六.蜂鸣器驱动
    六.项目的BSP工程管理
  • 原文地址:https://www.cnblogs.com/BruceKing/p/14790252.html
Copyright © 2011-2022 走看看