首先,我想说,我是开发Domino应用程序的初学者。所以在回答我可能愚蠢的问题时请考虑这个事实。
我有以下问题:
当我执行以下代码时,它会运行到第一个MsgBox
,它显示正常。
但它没有遇到第二个MsgBox
!相反,我收到以下错误消息:
Type mismatch in method RunStkCoerceVal in Lotusscript agent STRING found Null expected.
以下是代码:
Dim session As NotesSession
Dim db As NotesDatabase
Dim ws As New NotesUIWorkspace
Dim thisDoc As notesUIDocument
Dim docSMBPrivateProfile As notesDocument
Dim test As Variant
Set session = New NotesSession
Set db = session.CurrentDatabase
Set thisDoc = ws.CurrentDocument
Set docSMBPrivateProfile = db.GetDocumentByUNID(thisDoc.FieldGetText("SMB_PRIVATE_PROFILE_DOCUMENT_ID"))
Msgbox("This message will appear")
Set test = docSMBPrivateProfile.FieldGetText("DOCUMENT_ID_TEST")
Msgbox("This message won't appear")
请注意,来电thisDoc.FieldGetText("SMB_PRIVATE_PROFILE_DOCUMENT_ID")
正常工作正常。
我将test
的数据类型设置为Variant
,以避免类型不匹配问题。实际上我希望String
。
我在此处找到了有关此问题的唯一主题:http://www.secure-eserver.com/?p=3431 但是我无法做出它的头或尾。
你能帮我一下吗?
答案 0 :(得分:4)
由于docSMBPrivateProfile是NotesDocument对象。 NotesDocument类中不存在FieldGetText方法。 您可以使用以下代码获取字段值:
dim myStringVar as string
myStringVar = docSMBPrivateProfile.DOCUMENT_ID_TEST(0)
...
正如您所说,由于该错误,您仅使用变体。因此我建议使用带有上述代码的字符串。它不应该生成类型不匹配错误。
您的代码中的两个文档似乎有点混乱。您可以将FieldGetText用于第二个文档“thisDoc”,因为它是一个NotesUIDocument对象。 访问该领域的更好方法是(如Panu所建议的)
docSMBPrivateProfile.GetItemValue("DOCUMENT_ID_TEST")(0)
答案 1 :(得分:2)
docSMBPrivateProfile
基于NotesDocument
类,没有FieldGetText
方法。请改用test = docSMBPrivateProfile.GetItemValue("DOCUMENT_ID_TEST")(0)
。
答案 2 :(得分:0)
转到工具 - >调试LotusScript 菜单选项。然后运行代码。逐步查看相关行中究竟是什么失败。
实际上我期待一个String。
假设该字段存在,它将返回一个数组,而不是一个字符串。所以你需要做类似下面的事情(再次假设它只是字段中的一个字符串)。
Set test = docSMBPrivateProfile.FieldGetText("DOCUMENT_ID_TEST") (0)