壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 991|回复: 4

[Domino B/S开发] 自写的代理程序,大家指点,共同进步!!!

[复制链接]
发表于 2003/9/27 16:25:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
表单中有reader多值域,内容可以是:"管理员组";“测试员组”;“dirl”;“wintellzbh”....也就是可以是群组和个人用户。现在的目的是吧群组里的用户逐一读出来,原来的个人用户不变,然后写到表单域“Unread”多值域中。
Sub Initialize
        On Error Goto Errorhandler
        Dim ws As New notesuiworkspace
        Dim uidoc As notesuidocument
        Dim doc As notesdocument
        Set uidoc = ws.currentdocument
        Set doc = uidoc.document
       
        Dim s As New notessession
        Dim db As notesdatabase
        Dim vw As notesview
        Dim namedoc As notesdocument       
        Set db = s.getdatabase("","names.nsf")
        Set vw = db.getview("Group")
        Set namedoc = vw.getfirstdocument
       
        Dim U As Variant
        Dim temp As Variant
        Dim i As Integer
        U = doc.Reader
        i = 0
        While U(i)<>""
                &#39;判断U(i)是否为群组
                While (Not namedoc Is Nothing)
                        If U(i) = namedoc.listname(0) Then
                                temp = Arrayappend(namedoc.members,temp)
                                U(i) = ""
                        End If
                        Set namedoc = vw.getnextdocument(namedoc)
                Wend
                Set namedoc = vw.getfirstdocument
                i = i+1
        Wend
        U = Fulltrim(U)
        U = Arrayappend(U,temp)
        doc.UnRead = ArrayUnique(U)
        Call doc.save(True,False)
        Exit Sub
Errorhandler:
        Print "Error" & Str$(Err) ":"& Error$
End Sub
&#39;ArrayUnique()函数用于去除重复的用户(有可能原来用户在群组中)
Function ArrayUnique(Array As Variant)
        Dim i As Integer
        Dim j As Integer
        Dim max As Integer
        If Isarray(Array) Then
                max = Ubound(Array)       
                For i = 0 To max
                        For j=i+1 To max
                                If array(i) = array(j) Then
                                        array(j) = ""
                                End If
                        Next
                Next
                ArrayUnique = Fulltrim( array )
        Else
                ArrayUnique = array
        End If
End Function

请大家看看,我是新手,也许错误很低级,别笑我哦。^_^
还没调试成功:出现的错误是Error 217:Error creating product object。

 楼主| 发表于 2003/9/27 16:50:46 | 显示全部楼层
补充:代理运行在webQuerySave中,目的是对用户新建文档进行操作。刚才试了,好像是在定义时出的错。具体还不知道。
 楼主| 发表于 2003/9/27 17:36:35 | 显示全部楼层
程序前部分应该写成(因为我在web上使用代理),开始的错误就解决了

Dim s As New notessession
Dim db As notesdatabase
Dim vw As notesview
Dim doc As notesdocument
Dim namedoc As notesdocument
Set doc = s.documentcontext
Set db = s.getdatabase("","names.nsf")
Set vw = db.getview("群组")
Set namedoc = vw.getfirstdocument

现在出现subscript out of range的错误。不知道为何?

有那位大侠知道怎么知道是第几行出的错啊!
 楼主| 发表于 2003/9/28 11:30:45 | 显示全部楼层
虽然没有人告诉我那里出错,但是我还是从浏览的人数感觉到大家对我的支持。经过早上一个小时的努力,终于把程序调试好了,其中收获不少。现在贴出来给大家共享,如果大家有什么意见看法,请告诉我。^_^
Sub Initialize
        Dim s As New notessession
        Dim db As notesdatabase
        Dim vw As notesview
        Dim doc As notesdocument
        Dim namedoc As notesdocument
        Set doc = s.documentcontext
        Set db = s.getdatabase("","names.nsf")
        Set vw = db.getview("群组")
        Set namedoc = vw.getfirstdocument
       
        Dim U As Variant
        Dim temp As Variant
        Dim i As Integer
        Dim members As Variant
        Dim max As Variant
        U = doc.Reader
        max = Ubound(U)
        &#39;对reader域中的值进行搜索,是群组的拆开。
        For i = 0 To max
                While (Not namedoc Is Nothing)
                        If U(i) = namedoc.listname(0) Then
                                members = namedoc.members
                                temp = Arrayappend(members,temp)
                                U(i) = ""
                        End If
                        Set namedoc = vw.getnextdocument(namedoc)
                Wend
                Set namedoc = vw.getfirstdocument
        Next
        U = Fulltrim(U)
        U = Arrayappend(U,temp)
        doc.UnRead = U
        doc.UnRead = ArrayUnique(U)
        Call doc.save(True,False)
End Sub

子函数不变。subscript out of range是数组溢出,一开始的程序判断U(i)是,循环到最后一个数就溢出了,后来的做法是用Ubound算出个数再循环就没有问题了。如果domino的web调试能够给我们提供一个工具就不用这么辛苦的调试了!希望IBM能在以后的产品中提供。

发表于 2003/10/10 12:56:11 | 显示全部楼层
个人感觉(写的有点复杂):
1.判断reader域中是否包含群组
2.是群组的就用个函数返回所有的人员,用Forall xx In XXX
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 00:22 , Processed in 0.016559 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表