要在浏览器中直接修改用户口令,首先要在数据库中建立一个表单,如图1所示,表单中包含ShortName,HttpPassword, Newpass1,Newpass2等4个可编辑文本域,分别用来让用户输入用户名,用户口令,第一次输入新口令,第二次输入新口令。另外,在表单中创建一个“确定”按钮,单击“确定”按钮以后所发生的事件就是保存表单——“@COMMAND([FILESAVE])”。再在WEBQUERYSAVE事件中调用一个代理 ChangePass——“@COMMAND([TOOLSRUNMACRO],”ChangePass”)”,这样,每当用户单击“确定”按钮时,系统就会自动调用代理 ChangePass,因此修改用户口令的关键代码就全部写在代理ChangePass中。 |
三.代理ChangePass说明。 |
1. 在代理ChangePass中所使用的Notes类及方法有: |
GetDatabase 成员函数 |
在NotesSession类中给出的成员函数。创建代表位于服务器上,文件名已指定的数据库的 NotesDatabase 对象。如果在指定服务器的指定位置上存在该数据库,则打开该数据库。 |
DocumentContext 属性 |
在NotesSession类中给出的属性。只读,由外部程序通过 Notes API 创建的驻留内存的文档。外部程序首先创建一个驻留内存文档,然后运行一个代理。这个代理可以使用本属性访问驻留内存文档。 |
Search 成员函数 |
在NotesDatabase类中给出的成员函数。根据给出的文档选择标准,在整个数据库的所有文档中进行搜索,返回数据库中所有符合该标准的文档。 |
在Notes中,所有用户的信息均被保存在Domino的默认数据库目录Data下的数据库Names.nsf中。并且,每一个用户在 Names.nsf中均有一个对应的文档,文档中有几十个数据项,分别用来保存用户的名字、EMAIL地址、家庭住址、组织关系和口令等等信息,全部是在用户注册时产生的。其中用户在WEB浏览器中的用户名保存在数据项ShortName中,口令保存在数据项HttpPassword中。所以在代理ChangePass中的主要功能就是在数据库Names.nsf中根据给定的用户名以及口令,找到记录用户信息的对应文档,将文档中的数据项HttpPassword保存的原有口令改为新口令的值,就一切 OK了。 |
2.代理ChangePass的源代码。 |
Sub Initialize |
Dim dt As New Notesdatetime("") |
‘注释——获取当前的系统时间 |
Dim Session As New NotesSession |
‘注释——获取当前的Session |
Dim NamesDb As Notesdatabase |
Dim docs As NotesDocumentCollection |
Dim doc As Notesdocument,Namesdoc As Notesdocument |
Dim formula As String |
Dim new_pass As String |
On Error Goto ErrProc |
‘注释——出错则跳转到ErrProc |
Set NamesDb = Session.GetDatabase("","names.nsf") |
‘注释——打开数据库names.nsf |
Set doc = Session.DocumentContext |
‘注释——获取当前文档 |
If doc.new_pass(0) <> doc.new_pass1(0) Then |
Print "<strong>新口令输入有误,请重新输入! </stron>" |
Exit Sub |
End If |
new_pass = doc.new_pass(0) |
Formula = "Form = 'Person' & ShortName='" + doc.ShortName(0) + "' & HttpPassword= '"+doc.HttpPassword(0)+"' " |
‘注释——产生文档搜索标准 |
Set docs = NamesDb.Search(Formula,dt,0) |
‘注释——得到文档搜索结果 |
If docs.count <> 1 Then |
Print "<strong>用户名或口令出错,请检查! </stron>" |
Else |
Set Namesdoc = docs.Getfirstdocument |
‘注释——获得记录用户信息的文档 |
Namesdoc.HttpPassword = New_Pass |
Call namesdoc.save(True,False) |
‘注释——修改用户的口令,并保存文档 |
Print "<strong>口令修改成功! </stron>" |
End If |
Exit Sub |
ErrProc : |
Print "系统错误" |
End Sub |