Lotus Notes 8.5 - 使用按钮向表添加行

时间:2014-09-26 16:03:30

标签: lotus-notes lotus-domino lotusscript

我是一名实习生,目前正在学习LotusNotes,所以我还不是很流利。

我的问题是,如何编写动作按钮以在LotusNotes 8.5中的现有表中添加行?

我已尝试过以下代码,但它对我没用,


Sub Click(Source As Button)
Dim uiw As New NotesUIWorkspace
Dim uidoc As NotesUIDocument 
Set uidoc = uiw.CurrentDocument
Dim doc As NotesDocument
Set doc = uidoc.Document    

Dim Body As NotesRichTextItem
Set body = doc.GetFirstItem("Body")
If body Is Nothing Then
Msgbox "Click on the Reset the demo action to create the table first."
End If

Dim rows As Integer, rownumber As Integer, numrowstoadd As Integer
Dim strrownumber As String, strrowstoadd As String

Dim rtnav As NotesRichTextNavigator 
Set rtnav = body.CreateNavigator 
Dim rttable As NotesRichTextTable
Set rttable = rtnav.GetFirstElement(RTELEM_TYPE_TABLE)
If rttable Is Nothing Then
Msgbox "No table created - use the Reset the demo action first."
Else
rows=rttable.RowCount
strrowstoadd = Inputbox("Enter the number of rows to add.")
If Isnumeric( strrowstoadd ) Then
numrowstoAdd = Cint(strrowstoAdd)
If numrowstoAdd <= 0 Then
Msgbox "Enter a number greater than zero."
Exit Sub
End If
Else
Msgbox ("Enter a integer number only.")
Exit Sub
End If

strrownumber = Inputbox("Enter the number corresponding to the row to start adding at, no greater than " & rows & ".")
If Isnumeric( strrownumber ) Then
rownumber = Cint(strrownumber)
If rownumber < 0 Or rownumber > rows Then
Msgbox ("You entered too high a number or a number less than zero, try again.")
Exit Sub
End If
Else
Msgbox ("Enter a integer number only.")
Exit Sub
End If

Call rttable.AddRow(numrowstoadd, rownumber)    
End If  

doc.save True, True
uidoc.Close
Call uiw.EditDocument(False,doc)
End Sub

任何帮助都会很棒。谢谢!

2 个答案:

答案 0 :(得分:2)

如果不仔细查看您的代码,我相信您面临的根本问题很可能是NotesRichText类是我们称之为&#34;后端类的一部分&#34;用于备注。这意味着它是以其存储格式表示来自NSF文件的内存中数据的对象之一,这与&#34;前端类&#34;不同。这些是表示用户查看和编辑的数据的对象。您可以通过前缀NotesUI为所有前端类从后端类告诉前端。

问题是,前端类和后端中的对象保持同步除了以用于富文本,这意味着您对NotesRichText对象所做的更改确实发生在内存中,如果调用NotesDocument.save(),它们将保存到NSF文件中,但在您从后端重新加载前端数据之前,它们不会反映在屏幕上显示的内容中。这是指向wiki page that demonstrates a technique for doing that的链接。

答案 1 :(得分:0)

你写道“但它对我不起作用”。我尝试了你的代码,它的工作原理。我建议您进行一些更改,以使其更好地工作: 在使用RT(后端)中的表之前关闭文档 Dim Body As NotesRichTextItem

uidoc.save 'to save any change done
doc.saveoptions = "0"'to avoid do you want to save
uidoc.Close True

取代最后3行:

doc.Save True, True
Call uiw.EditDocument(True,doc)

注意,您必须在“单击重置演示操作以首先创建表格”之后和“无表创建”之后添加 退出子