从配置文件中获取值时遇到一些问题。为了创作,我遵循了以下指示: 创建个人资料表单 1.使用字段创建表单以保存要存储在配置文件中的值。 2.选择设计 - 表单属性并取消选择"包括在菜单中。和"包含在搜索构建器中#34; 3.保存表格。 4.不要在任何视图中包含表格。
在表单中,我只有一个字段,在编写时计算(数字),计算值为" 0"
但是使用此代码我无法检索字段值:
Dim session as New NotesSession
Dim db as NotesDatabase
Dim doc as NotesDocument
Set db=session.CurrentDatabase
Set doc=db.GetProfileDocument("nameofprofiledoc")
dim number as integer
number=doc.fieldname(0)
Isprofile返回true,但数字总是""。由于某种原因,它永远不会得到值
答案 0 :(得分:1)
也许是因为您尚未将文档保存到数据库中。您可以创建一个操作按钮,让您编辑文档然后保存它:
@Command( [EditProfile] ; formname );
答案 1 :(得分:1)
调用GetProfileDocument时不会执行计算字段公式。那是因为GetProfileDocument是一个“后端”方法。具有各种字段定义和公式的表单由“前端”使用。 (有一个例外:后端类中有一个ComputeWithForm方法。)无论如何。 GetProfileDocument可以加载以前保存的配置文件,也可以创建一个基本上为空的新文档。 @Ken的答案告诉您如何手动创建配置文件并保存它,以便您的代码能够找到它。作为替代方案,您可以在代码中进行初始化,如下所示:
if ! doc.hasItem("fieldname") then
doc.replaceItemValue("fieldname",0)
end if
number=doc.fieldname(0)
这样您就不会依赖手动创建配置文件的人。但是如果您从代码中的多个位置访问配置文件,并且无法预测哪个代码可能首先执行,那么您可能希望创建一个包含函数(或类)的脚本库并将GetProfileDocument包装在你自己的函数(或方法),以确保所有代码路径都能正确地进行初始化。
答案 2 :(得分:0)
正如Richard所提到的那样,当您调用方法GetProfileDocument
时,如果在数据库中找不到,则配置文件将创建为空白文档(它只会包含一些包含配置文件名称的初始字段,冲突操作,最后编辑)..
1)编写Form的QuerySave事件,将所有项目复制到配置文件(然后取消保存,以避免将数据存储在常规文档中)。
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim db As NotesDatabase
Dim curdoc As NotesDocument
Dim profile As NotesDocument
Set curdoc = Source.Document
Set db = curodc.ParentDatabase
Set profile = db.GetProfileDocument(curdoc.Form(0))
Call curdoc.CopyAllItems(profile, True)
Call profile.Save(True, False)
Continue = False 'Don't allow the form to be saved to a regular document.
End Sub
2)调用GetProfileDocument
创建一个新的配置文件或获取旧的配置文件(您可以通过检查IsNewNote
属性来区分它。然后为其分配一个表单名称,并使用此表单计算它
在代理人或行动中:
Sub InitializeProfile
Dim s As New NotesSession
Dim db As NotesDatabase
Dim profile As NotesDocument
Set db = s.CurrentDatabase
Set profile = db.GetProfileDocument("MyForm")
If profile.IsNewNote Then
Call profile.ReplaceItemValue("Form", "MyForm")
Call profile.ComputeWithForm(False, False) 'This will create the computed fields with their default values in the profile.
Call profile.Save(True, False)
End If
End Sub