在lotus的B/S开发中,经常可以看到新手提一些这样那样的问题。我也只是接触了一两个月,就改做.net了,经验谈不上,有些东西也是在网上收集的,但尽量就自己的理解结合原理来讲。
一、B/S下用户的登陆界面制作问题
1、在服务器设置中Internet协议->Domino Web引擎->HTTP会话->会话验证选择为单服务器或多服务器,然后在服务器控制台内键入: tell http restart (重启HTTP服务)。
2、用服务器端高级模板domcfg5.ntf,也就是Domino Web 服务器配置数据库模板,在/domino/data/ 目录下新建数据库:domcfg.nsf 。
3、用notes打开新建好的domcfg.nsf数据库,点击“登陆表单映射”视图,再从菜单中选择“创建”-->“映射登陆表单”,在里面添上目标数据库文件名,即domcfg.nsf,和目标表单名:CustomLoginForm,保存并关闭文档。
4、用designer打开domcfg.nsf数据库,创建名称为CustomLoginForm的表单,那么,当web服务器要求浏览器用户提供名字和口令时,便会显示该表单。如果你没有创建映射登录表单,则系统缺省显示$$LoginUserForm表单。
二、定制了自己的登录表单,那么就该开始人员注册了。
注册的步骤是什么样子的呢?,当你用admin在服务器注册人员时,做了些什么?在这里主要用到的Lotuscript类是notesregistration.
当进入注册页面,打开的数据库是names.nsf,就是通常中文翻译为通讯录的库。而人员视图默认的当然是people view.当你开始注册人员时,先要使用验证字,默认的一般是Cert.id,也要输入密码的。然后就是指定人员的姓名,密码,邮件,ID的期限等等。在lotuscript中的大致过程也是如此。见部分代码:(代码还在公司机器的自己的库里,下次拷回来再贴了,写日记真的比学技术还痛苦。)
Sub Initialize
Dim session As New NotesSession
Dim curdoc As NotesDocument
Dim tempdoc As notesdocument
Dim db As NotesDatabase
Dim namedb As NotesDatabase
Dim peopleview As NotesView
Dim reg As New NotesRegistration
Set Namedb = New NotesDatabase( "","names.nsf" )
Set PeopleView = Namedb.GetView("People")
Set curdoc=session.DocumentContext
Set db=session.CurrentDatabase
PeopleView.AutoUpdate = True
Set Tempdoc = PeopleView.GetDocumentByKey( Curdoc.UserName(0),True )
If Not (tempdoc Is Nothing) Then
Print "用户已存在!"
Print "<INPUT TYPE=button onClick='history.go(-1)' VALUE='返 回'>"
Else
dt = Datenumber(Year(Today)+1, Month(Today), Day(Today))
reg.RegistrationServer=curdoc.servername(0)
reg.CreateMailDb =True
reg.CertifierIDFile ="E:\Lotus\Domino\Data\cert.id"
reg.Expiration = dt
reg.IDType = ID_HIERARCHICAL
reg.MinPasswordLength = 5
reg.IsNorthAmerican = True
reg.OrgUnit = curdoc.org(0)
reg.RegistrationLog = "log.nsf"
reg.UpdateAddressBook = True
reg.StoreIDInAddressBook = True
Call reg.RegisterNewUser(curdoc.username(0), _ ' last name
"E:\Lotus\notes\data\ids\people\"&curdoc.username(0)&".id", _ ' file to be created
"CN="&curdoc.servername(0)&"/O="&curdoc.org(0), _ ' mail server
"", _ ' first name
"", _ ' middle initial
"lgyw20040708", _ ' certifier password
"office", _ ' location field
"", _ ' comment field
"E:\Lotus\Domino\Data\mail\"&curdoc.username(0)&".nsf", _ ' mail file
"", _ ' forwarding domain
curdoc.password(0), _ ' user password
NOTES_DESKTOP_CLIENT) ' user
Call curdoc.Save(False,False)
Print "您已成功注册!"
Print "<a href=javascript:history.back()>返回</a>"
End If
End Sub
如何在代理中添加角色?见代码吧:)
Sub Initialize
Dim session As New notesSession
Dim db As notesDatabase
Dim acl As notesacl
Dim roles As String
Set db=session.currentDatabase
Set acl=db.acl
Call acl.addrole("管理")
Call acl.save
Print "角色已经添加"
End Sub
要注意的是该代理的安全必须设为:3、allow restricted operations with full administration
三、分页表单的制作
在OA的系统应用中,显示多项记录结果一般都是通过分页视图来实现。分页视图的实现方案如下:
1、表单中嵌入视图
最为直接的把视图和表单联系在一起的方法是简单地创建一个表单并在其中插入一个内嵌视图元素。另外一个在表单中嵌入视图的方法是创建一个名为$$ViewBody的域,它的默认值是视图的名字。在早期的Domino版本中,这是表单中嵌入视图的唯一方法。
在Web服务器中,可以通过查看以下资源来决定显示的行数:
Ø 如果URL包含&count参数则使用这个数字
Ø 如果没有指定,则查看“嵌入视图”属性框中指定的数字。
Ø 如果以上没有指定,则用服务器范围内通用缺省值。
2、通过通用HTML设计外观
选择视图属性中“view”|“advanced”,点击“Web Access”附签,选中:“Treat view contents as HTML”。然后在表单中将嵌入视图的属性确定为在Web访问时使用HTML来显示。
可在表单页面中添加CSS与HTML代码,美化页面。视图中显示内容的表格如下处理:
首先在页面中添加HTML代码
[<table width="306" border=1px;
<tr>
<td width="74">id</th> <td width="74">姓名</th> <td width="74">公司</th> <td width="74">电话</th></tr>
使用嵌入视图
</table>]
其次在视图各行的属性公式中添加相应HTML代码。
Id的value为:
"<td width=\"74\" ><a href=\""+url+"\">"+id+"</a></th>"
姓名的value为:
"<td width=\"74\">"+name+"</td>"
3、使用&count,&start等URL后缀,显示起始行,得到当前页面,控制页面流转。(代码中设置的视图每页显示5行)
表单中设置的域有:
Ø query_string_decoded 的值为query_string_decoded
Ø start的值为start:=@Right(query_string_decoded;"start=");@If(start="";"1";start)
Ø count的值为@Elements(@DbColumn("":"nocache";"";"info";1))
Ø page的值为@If((count/5)-@Round(count/5)>0;@Round(count/5)+1;@Round(count/5))
页面跳转的javascript代码如下:
var pathname = window.location.pathname;
function prev()
{
var tmpstart=eval(document.forms[0].start.value)-5;
var tmpallpage=document.forms[0].page.value;
if (tmpstart <0)
{
alert("已经是第一页!");
}
else
{
location.href=pathname+"?openform&start="+tmpstart
}
}
function next()
{
var tmpstart=eval(document.forms[0].start.value)+5;
var tmpallpage=document.forms[0].page.value;
if (tmpstart > tmpallpage*5)
{
alert("已经是最后一页!");
}
else
{
location.href=pathname+"?openform&start="+tmpstart
}
}
function last()
{
var tmpstart=(document.forms[0].page.value-1)*5+1;
location.href=pathname+"?openform&start="+tmpstart
}
4、通过文档ID对文档进行操作
给文档中ID项添加该文档链接,直接设置视图中ID的域公式即可。公式如下
db:=@ReplaceSubstring(@Subset(@DbName;-1);"\\";"/");
unid:=@Text(@DocumentUniqueID);
url:="/"+db+"/info/"+unid+"?opendocument";
"<td width=\"74\" ><a href=\""+url+"\">"+id+"</a></th>"
}