最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

TIPTOP ERP 用户自行修改密码程序

开发相关 bron1984 4640浏览

由于TIPTOP ERP 用户更改口令不是很方便,所以写了个程序用来更改用户口令

(按理来说不是自己亲自写的,是从别人那里要来改过后的,好东西总是要共享的嘛)

以前的修改界面如下:【输入的内容是看不到的,造成用户有时候不知所措】

运行p_pw界面及操作如下:

程序信息如下:(per文件与4gl文件)

*********************************************************************************************************************
程序编号: p_pw.4gl
程序说明:TIPTOP ERP用户密码修改
程序所在目录
4gl文件:/u1/topprod/topcust/czz/4gl/p_pw.4gl
per文件:/u1/topprod/topcust/czz/per/p_pw.per
*********************************************************************************************************************

 

.per文件

SCHEMA FORMONLY
LAYOUT
  VBOX
    FOLDER
      PAGE page01 (TEXT="Main")
        GRID
          {
           username       [username         ][name     ] 
           Oldpassword    [old              ] 
           Newpassword    [new              ] 
           REPassword     [renew            ] 
          }
        END --GRID
      END --PAGE
    END --FOLDER
 
  END --VBOX
END --LAYOUT
 
ATTRIBUTES
             username = FORMONLY.username,NOENTRY;
             name     = FORMONLY.name,NOENTRY;
             old      = FORMONLY.old;
             new      = FORMONLY.new; 
             renew    = FORMONLY.renew;
END

需要4fd文件的(新建一个文本文件,把后缀名改成4fd,再把下面代码帖上去,保存就行):

<?xml version="1.0" encoding="UTF-8" ?>
<ManagedForm databaseName="ds" gstVersion="21e00" name="Root" uid="{d2d69e16-5cac-4363-a355-c3bd7a498443}">
  <Record additionalTables="" joinLeft="" joinOperator="" joinRight="" name="Undefined" order="" uid="{03d2ee08-08bd-4b35-ad07-0b8a2fcd645c}" where="">
    <RecordField colName="" fieldIdRef="1" fieldType="NON_DATABASE" name="old" sqlTabName="" sqlType="VARCHAR" table_alias_name="" uid="{06fdf0e0-bc37-4f65-a6ac-75860be8ed74}"/>
    <RecordField colName="" fieldIdRef="2" fieldType="NON_DATABASE" name="new" sqlTabName="" sqlType="VARCHAR" table_alias_name="" uid="{d8ad8e3b-809b-4460-9f4c-ddf610599c85}"/>
    <RecordField colName="" fieldIdRef="3" fieldType="NON_DATABASE" name="renew" sqlTabName="" sqlType="VARCHAR" table_alias_name="" uid="{95caf056-d899-4100-9ecf-83ace3014a01}"/>
  </Record>
  <Form gridHeight="12" gridWidth="87" lstrtext="false" name="p_pw" spacing="normal" text="p_pw">
    <VBox gridHeight="10" gridWidth="78" name="vb2" posX="6" posY="1">
      <Grid gridHeight="6" gridWidth="78" lstrcomment="false" name="gr8" posX="0" posY="1">
        <Label gridHeight="1" gridWidth="6" posX="6" posY="1" text="text26"/>
        <Edit colName="" colorCondition="black" columnCount="" fieldId="1" fieldType="NON_DATABASE" gridHeight="1" gridWidth="30" lstrcomment="false" name="old" notNull="true" posX="15" posY="1" required="true" rowCount="" sqlTabName="" sqlType="VARCHAR" stepX="" stepY="" tabIndex="1" table_alias_name="" widget="Edit"/>
        <Label gridHeight="1" gridWidth="6" posX="6" posY="2" text="text27"/>
        <Edit colName="" colorCondition="black" columnCount="" fieldId="2" fieldType="NON_DATABASE" gridHeight="1" gridWidth="30" lstrcomment="false" name="new" notNull="true" posX="15" posY="2" required="true" rowCount="" sqlTabName="" sqlType="VARCHAR" stepX="" stepY="" tabIndex="2" table_alias_name="" widget="Edit"/>
        <Label gridHeight="1" gridWidth="23" posX="46" posY="2" text="(输入的字符必须大于或等于8位字母+数字组合)"/>
        <Label gridHeight="1" gridWidth="6" posX="6" posY="3" text="text28"/>
        <Edit colName="" colorCondition="black" columnCount="" fieldId="3" fieldType="NON_DATABASE" gridHeight="1" gridWidth="30" lstrcomment="false" name="renew" notNull="true" posX="15" posY="3" required="true" rowCount="" sqlTabName="" sqlType="VARCHAR" stepX="" stepY="" tabIndex="3" table_alias_name="" widget="Edit"/>
        <Label gridHeight="1" gridWidth="23" posX="46" posY="3" text="(输入的字符必须大于或等于8位字母+数字组合)"/>
      </Grid>
      <Grid gridHeight="2" gridWidth="78" lstrcomment="false" name="gr4" posX="0" posY="7"/>
    </VBox>
  </Form>
  <DiagramLayout>
    <![CDATA[AAAAAgAAAEwAewAwADMAZAAyAGUAZQAwADgALQAwADgAYgBkAC0ANABiADMANQAtAGEAZAAwADcALQAwAGIAOABhADIAZgBjAGQANgA0ADUAYwB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAEwAewA5ADUAYwBhAGYAMAA1ADYALQBkADgAOQA5AC0ANAAxADAAMAAtADkAZQBjAGYALQA4ADMAYQBjAGUAMwAwADEANABhADAAMQB9QBQAAAAAAABAUQAAAAAAAAAAAAAAAAAAAQAAAEwAewBkADgAYQBkADgAZQAzAGIALQA4ADAAOQBiAC0ANAA0ADYAMAAtADkAZgA0AGMALQBkAGQAZgA2ADEAMAA1ADkAOQBjADgANQB9QBQAAAAAAABARwAAAAAAAAAAAAAAAAAAAQAAAEwAewAwADYAZgBkAGYAMABlADAALQBiAGMAMwA3AC0ANABmADYANQAtAGEANgBhAGMALQA3ADUAOAA2ADAAYgBlADgAZQBkADcANAB9QBQAAAAAAABAOAAAAAAAAAAAAAAAAAAAAQ==]]>
  </DiagramLayout>
</ManagedForm>

 

.4gl文件

# Prog. Version..: '3.10.02-06.08.23(00005)'     #
# Pattern name...: p_pw.4gl
# Descriptions...: 可视化界面修改用户密码
# Date & Author..: 2012/09/26 By XXXX
 
DATABASE ds
 
GLOBALS "../../config/top.global"
 
DEFINE p_row,p_col     SMALLINT,
       g_oldpwd        VARCHAR(50),      
       g_newpwd        VARCHAR(50),     
       g_repwd         VARCHAR(50),
       g_zx02          LIKE zx_file.zx02    
MAIN
 
    OPTIONS                                     #改变一些系统预设值      
        FORM LINE     FIRST + 2,                #画面开始的位置             
        MESSAGE LINE  LAST,                     #讯息显示的位置             
        PROMPT LINE   LAST,                     #提示讯息的位置              
        INPUT NO WRAP                           #输入的方式: 不打转          
        DEFER INTERRUPT                         #撷取中断键, 由程式处理    
   IF (NOT cl_user()) THEN                       
      EXIT PROGRAM
   END IF
 
   WHENEVER ERROR CALL cl_err_msg_log
 
   IF (NOT cl_setup("CZZ")) THEN
      EXIT PROGRAM
   END IF
 
   LET p_row = ARG_VAL(1)
   LET p_col = ARG_VAL(2)
     CALL  cl_used(g_prog,g_time,1) RETURNING g_time #No:MOD-580088  HCN 20050818  #No.FUN-6A0081
 
   OPEN WINDOW p_pw_w AT p_row,p_col WITH FORM "czz/42f/p_pw"
       ATTRIBUTE (STYLE="chpw", TEXT="chpw") #No:FUN-580092 HCN
 
   CALL cl_ui_init()
 
   LET g_action_choice = ""
##显示用户账号和姓名*******************************************
   SELECT zx02 INTO g_zx02 FROM zx_file WHERE zx01=g_user
   IF (SQLCA.SQLCODE) THEN
      DISPLAY g_user CLIPPED," has no data in zx_file."
      RETURN FALSE
   END IF
   DISPLAY g_user TO FORMONLY.username ATTRIBUTE(REVERSE,BOLD,GREEN) 
   DISPLAY g_zx02 TO FORMONLY.name     ATTRIBUTE(REVERSE,BOLD,GREEN) 
##END**********************************************************
   CALL p_pw_i()
   CALL p_pw_menu()
 
   CLOSE WINDOW p_pw_w
     CALL  cl_used(g_prog,g_time,2) RETURNING g_time #No:MOD-580088  HCN 20050818  #No.FUN-6A0081
END MAIN
 
 
FUNCTION p_pw_menu()
    MENU ""
        BEFORE MENU
 
        ON ACTION pwd
            CALL p_pw_modify()
        ON ACTION exit
            LET g_action_choice = "exit"
            EXIT MENU
        ON ACTION controlg
            CALL cl_cmdask()
        ON IDLE g_idle_seconds
           CALL cl_on_idle()
           CONTINUE MENU
        COMMAND KEY(INTERRUPT)
            LET INT_FLAG=FALSE
            LET g_action_choice = "exit"
            EXIT MENU
    END MENU
END FUNCTION
 
FUNCTION p_pw_i()
 
  INPUT g_oldpwd,g_newpwd,g_repwd FROM old,new,renew
      BEFORE INPUT
         CALL cl_set_comp_entry("old,new,renew",TRUE)
 
      AFTER FIELD renew
         IF g_repwd <> g_newpwd THEN
            CALL cl_err('','czz-101',1)
            NEXT FIELD new
         END IF
      ON ACTION CANCEL
         LET g_action_choice = "exit"
         CALL cl_set_act_visible("pwd", FALSE)
         EXIT INPUT
   END INPUT
   
   IF INT_FLAG THEN
    LET INT_FLAG = 0
    CLOSE WINDOW p_pw_w
    CALL cl_used(g_prog,g_time,2) RETURNING g_time  
     EXIT PROGRAM 
  END IF  
END FUNCTION
 
FUNCTION p_pw_modify()
DEFINE 
       l_script    STRING,      
       l_execute   STRING,      
       l_return    STRING
 
DEFINE  
  ch                            base.Channel,       
  l_status                      SMALLINT,
  l_index                       SMALLINT,
  l_temp                        STRING,
  l_text                        STRING 
 
    RUN "rm -rf /u1/topprod/tiptop/azz/4gl/pwd"
    RUN "rm -rf /u1/topprod/tiptop/azz/4gl/pwd.log"
 
    LET l_script = '#!usr/bin/expect ','\n',
                   '  set old [lindex $argv 0]','\n',
                   '  set new [lindex $argv 1]','\n',
                   '  spawn   passwd ','\n',
                   '  expect "password:" ','\n',
                   '  send "$old\\r"   ','\n',
                   '  sleep 1','\n',
                   '  expect "password:"','\n',
                   '  send "$new\\r"       ','\n',
                   '  sleep 1        ','\n',
                   '  expect "password:"','\n',
                   '  send "$new\\r"  ','\n',
                   '  expect eof','\n',
                   '  exit'
 
    RUN "echo '"||l_script||"' > /u1/topprod/tiptop/azz/4gl/pwd"
 
    RUN "chmod 777 /u1/topprod/tiptop/azz/4gl/pwd"
    RUN "chmod 777 /u1/topprod/tiptop/azz/4gl/pwd.log"
   
    LET l_execute = "expect /u1/topprod/tiptop/azz/4gl/pwd ",g_oldpwd," ",g_newpwd," > /u1/topprod/tiptop/azz/4gl/pwd.log"
    RUN l_execute
    SLEEP 2
   
     LET ch = base.Channel.create()
     CALL ch.openFile('/u1/topprod/tiptop/azz/4gl/pwd.log','r')
     LET l_status = ch.read(l_temp)
     WHILE l_status 
       LET l_text = l_text.trim(),l_temp.trim()
       LET l_status = ch.read(l_temp) 
     END WHILE  
    
     LET l_index = 0
     LET l_index = l_text.getIndexOf('successfully',1)
     IF l_index > 0 THEN
        CALL cl_err('successfully','!',1)
        EXIT PROGRAM
     ELSE
        LET l_index = l_text.getIndexOf('Authentication token manipulation error',1)
        IF l_index > 0 THEN
           CALL cl_err('','czz-102',1)        #认证令牌操作错误
        ELSE
           LET l_index = l_text.getIndexOf('too short',1)
           IF l_index > 0 THEN
              CALL cl_err('','czz-103',1)     #新输入的密码太短
           ELSE
              LET l_index = l_text.getIndexOf('Password unchanged',1)
              IF l_index > 0 THEN
                 CALL cl_err('','czz-108',1)  #密码未改变
              ELSE
                 LET l_index = l_text.getIndexOf('too similar to the old',1)
                 IF l_index > 0 THEN
                    CALL cl_err('','czz-107',1) #新密码与旧密码太相似了
                 ELSE
                    LET l_index = l_text.getIndexOf('not contain enough DIFFERENT characters',1)
                    IF l_index > 0 THEN
                       CALL cl_err('','czz-104',1)  #密码不包含足够的不同字符
                    ELSE
                       LET l_index = l_text.getIndexOf('too simplistic',1)
                       IF l_index > 0 THEN
                          CALL cl_err('','czz-105',1) #新密码太过简单化
                       ELSE
                          LET l_index = l_text.getIndexOf('based on a dictionary word',1)
                          IF l_index > 0 THEN
                             CALL cl_err('','czz-106',1) #新密码包含了基于字典中的单词
                          ELSE
                             CALL cl_err(l_text,'!',1)
                          END IF
                       END IF
                    END IF
                 END IF
              END IF
           END IF
        END IF
       #CALL cl_err(l_text,'!',1)
        CALL p_pw_i()
        IF g_action_choice = "exit" THEN
           CALL cl_set_act_visible("pwd", FALSE)
        END IF
        CALL p_pw_menu()
        IF INT_FLAG OR g_action_choice = "exit" THEN
           EXIT PROGRAM
        END IF
     END IF 
END FUNCTION

 

 

转载请注明:赫非域 » TIPTOP ERP 用户自行修改密码程序