由于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 用户自行修改密码程序