关于生成文档序列号的问题,急!急!急!

wangdaoyuan 2003-06-27 10:54:29
客户单位要求我们实现如下的功能:
每当新建一个文档并保存后,文档的某个域的值就要加一,即实现文档序列号的功能
编程思路是:创建一个专门存储序列号的文档,每当新建一个文档的时候都从这个文档中取回下一个号码作为文档序列号。因为用户可能在保存之前退出这个新建文档,所以必须等到存储新建文档的时候对序列号文档加一。

以下为我从人民邮电出版社的《Notes编程疑难详解》中第75页找到的一段程序,有几个地方没有读懂,希望高手指点:

Option Public
Option Explicit
Const COUNTER_FOLDER_FROM_NAME$="(记数文档)"

Function SequentialNumber&(Byval CounterName$,Byval CounterToSave%)

On Error Goto SequentialNumberError

Dim CounterFieldName$
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim docNext As NotesDocument
Dim CounterValue&
Dim FieldValue As Variant
Dim Ret%
Dim item As NotesItem
Dim FolderToBeCreated%
CounterFieldName$="MB"+CounterName$

Set db=session.CurrentDatabase
Set view=db.GetView(COUNTER_FOLDER_FROM_NAME$)

If view Is Nothing Then
FolderToBeCreated%=True
End If

Do
If Not FolderToBeCreated% Then
view.Refresh
Set doc=Nothing
Set doc=view.GetFirstDocument()
End If

If doc Is Nothing Or FolderToBeCreated% Then
Set doc=New NotesDocument(db)
doc.Form=COUNTER_FOLDER_FROM_NAME$
Call doc.Save(True,False)
doc.PutInFolder COUNTER_FOLDER_FROM_NAME$
If FolderToBeCreated% Then
Set view=db.GetView(COUNTER_FOLDER_FROM_NAME$)
FolderToBeCreated%=False
End If
Else
Set item=doc.GetFirstItem(CounterFieldName$)
If item Is Nothing Then
Call doc.ReplaceItemValue(CounterFieldName$,0)
Call doc.Save(False,False)
Else
FieldValue=doc.GetItemValue(CounterFieldName$)
If Not CounterToSave% Then
CounterValue&=FieldValue(0)+1
Exit Do
Else
Call doc.ReplaceItemValue(CounterFieldName$,FieldValue(0)+1)
Ret%=doc.Save(False,False)
If Ret% Then
CounterValue&=FieldValue(0)+1
Exit Do
End If
End If
End If
End If
Loop

Set doc=view.GetNextDocument(doc)
Do While Not doc Is Nothing
Set docNext=view.GetNextDocument(doc)
Call doc.Remove(True)
Set doc=docNext
Loop

SequentialNumber&=CounterValue&

SequentialNumberExit:
Exit Function

SequentialNumberError:
Msgbox "SequentialNumber",Err,Error$
SequentialNumber&=-1
Goto SequentialNumberExit

End Function


书中写到:
函数的调用方式为:
SequentialNumber&(CounterName$,CounterToSave%)
此函数支持多个序列的序列号,CounterName$参数为要使用的序列号名称。CounterToSave%参数为True时,函数取回下一个序列号,并将该号码加一;当CounterToSave%参数为False时,函数只取回下一个序列号。

我的问题是:
1.函数调用时CounterName$参数应该以什么作为输入参数?
2.上面程序中的语句中的"MB"是何用意?
CounterFieldName$="MB"+CounterName$

...全文
60 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
scor 2003-07-13
  • 打赏
  • 举报
回复
实际上还有一个方法,一直忘记说了,不过很简单,很实用就是了
你在你创建文档 的表单里家一个COUNT域
里面写上公式
@Elements(@DbColumn("":"nocache";"":"";"这些文档的视图名";1))+1
这样就可以了
scor 2003-07-08
  • 打赏
  • 举报
回复
因为是用的是WebQueryOpen和WebQuerysave里调的代理
所以一定要签名才能使用
boy 2003-07-08
  • 打赏
  • 举报
回复
在WebQueryOpen或Queryopen使用以下代码:
Sub Initialize
Dim session As NotesSession
Set session = New NotesSession
Dim doc As NotesDocument
Set doc = session.DocumentContext
If doc.IsNewNote=True Then
Dim db as NotesDatabase
Dim view as NotesView
Dim OldDoc as NotesDocument
Set db = session.CurrentDatabase
Set view = db.GetView("ViewName")
Set OldDoc = view.GetLastDocument
If OldDoc Is Nothing then
doc.SID = 1
Else
doc.SID = Cint(OldDoc.SID(0))+1
End If
End If
End Sub
scor 2003-07-07
  • 打赏
  • 举报
回复
好的
我现在就给你发
wangdaoyuan 2003-07-07
  • 打赏
  • 举报
回复
To scor(紫菁铭):
那就麻烦你发个模块到我信箱里面吧,我解决问题马上开贴放分给你!
我的邮箱:wangdaoyuan@sohu.com
在下在此先深深谢过了!
BillyW 2003-07-06
  • 打赏
  • 举报
回复
建个视图,在文档号的域按从大到小排列。
新建文档的话,就去到这个视图里取第一个文档的文档号(自动编号)+1就是这个新建文档的编号了。

你可以试着做做
scor 2003-07-06
  • 打赏
  • 举报
回复
如果你急的话,联系我,我可以发一个模块给你,上面有这样的,你可以看看
scor111@163.com
wangdaoyuan 2003-07-05
  • 打赏
  • 举报
回复
希望那位高手解答一下,这个问题对我很重要呀!
wangdaoyuan 2003-06-27
  • 打赏
  • 举报
回复
书中还有一段介绍:
在QueryOpen事件中使用SequentialNumber(CounterName&,False)将下一个序列号显示在文档中。由于用户可能在保存之前退出新建的文档,所以应等到QuerySave事件中再使用SequentialNumber(CounterName&,True)时将序列号加一。

为此,我在QuerySave中填写了如下代码(其中,RegNo为文档中的存储序列号的域。
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim returnvalue
returnvalue=SequentialNumber&("1",True)
Call Source.FieldSetText("RegNo",returnvalue)

End Sub

但是却没有作用,请问这是怎么一回事呀?
jimmyvk 2003-06-27
  • 打赏
  • 举报
回复
一个建议,在webquerysave调用的代理中将存取文档序列号的文档中序列号该域的值加一,并在webqueryopen调用的代理中将该文档中该域的值导过来。

535

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 Exchange Server
社区管理员
  • 消息协作社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧