关于Domino客户端部分操作通过B/S模式实现的可行性分析

        最近在项目中遇到客户需要在C/S客户端上在一个界面中同时显示视图和表单,即在左面的视图中点击文档,在右面打开,这种布局在Domino 8.0的复合应用中是很容易实现的,不过在7.0中,试了好多方法,都不能实现,于是想到了通过B/S模式来实现C/S下的审批操作,我是通过定义了2张表单,一张for 客户端的

Sub Postopen(Source As Notesuidocument)
 Dim ws As New NotesUIWorkspace
 Dim doc As NotesDocument
 Set doc=source.Document
 unid = doc.UniversalID

 url = doc.db_server(0)+doc.db_Path(0)+"/viewname/"+unid+"?EditDocument"
 ws.URLOpen(url)
 Call Source.Close
End Sub

在 Postopen的时候通过ws.URLOpen来打开for Web的那张同名表单,这样客户的需求是显示了,不过就性能和技术方面,下面做了一下分析。

        首先遇到的问题是服务器的HTTP服务器需要开启,这个因为我是B/S与C/S模式集合的一个系统,所以HTTP服务是开启的,接着就是权限的问题,在C/S下可以通过设置读者和作者域来控制文档的权限,但在B/S中,如果对文档的权限进行控制,则会弹出用户登录框,这里有2种解决方法,一种是在URLOpen中设置webusername和webpassword来自动登录,这样的局限性是不够灵活,我的方法是把读者和作者都设成"*",通过在视图的 Queryrecalc中运行代理来控制文档的查看权限

Sub Queryrecalc(Source As Notesuiview, Continue As Variant)
 Dim session As New NotesSession
 Dim agent As NotesAgent
 Dim db As NotesDatabase 
 
 Set db=session.CurrentDatabase 
 
 Set eProfile = db.GetProfileDocument("Enviroment Profile")
 If eProfile.IsNewNote Then Print "环境设定简要表没有配置!"
 
 eProfile.txtUserID=session.UserName
 
 Call eProfile.save(True,True)
 
 Set agent = db.GetAgent("根据权限修改视图公式")
 If Not(agent Is Nothing) Then
  If Not agent.RunOnServer() = 0 Then
   Messagebox "代理运行错误!",16,"提示"
   Exit Sub
  End If
 Else
  Messagebox "代理没有找到!",16,"提示"
  Exit Sub
 End If
End Sub

代理为:

Sub Initialize
 Dim session As New NotesSession
 Dim doc As NotesDocument
 Dim agent As NotesAgent
 Dim db As NotesDatabase
 Dim view As NotesView
 Dim formula As String
 
 Set db = session.CurrentDatabase
 Set agent = session.CurrentAgent
 
 Set eProfile = db.GetProfileDocument("Enviroment Profile")
 If eProfile.IsNewNote Then Print "环境设定简要表没有配置!"
 
 Set view=db.GetView("viewname")
 If view Is Nothing Then
  Msgbox "数据库缺少视图‘viewname’。",48,"提示"
  Exit Sub
 End If
 
 If eProfile.txtUserID(0)="CN=SystemAdmin/O=CHENGTOU" Then
  formula = {SELECT Form = "formname"}
 Else
  formula={eng_NextApproverID="}+eProfile.txtUserID(0)+{"}
  formula = {SELECT Form = "formname"&(}+formula+{)}
 End If
 
 view.SelectionFormula = formula
 
 Call view.Refresh
 
End Sub

这样就能控制每个文档的读权限,每个用户只能看到自己的文档,同时还需要在数据库Script中在postopen的时候运行这个代理。保证用户登录客户端这张视图只看到自己的文档。

           最后就是性能的问题,由于C/S模式是基于局域网的,所以在表单打开速度方面还是比较快的,不过在安全性方面总是会存在一定的隐患,有待解决。

           不过这样实现是实现了客户要求的功能,不过花的精力相当大,个人不是很推荐这种做法,毕竟8.0中IBM也考虑到了这个问题,复合应用的出现还是相当好的解决了这个问题。

转载于:https://www.cnblogs.com/sleeplessC/articles/1612958.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值