在Lotusscript中的方法RunStkCoerceVal中键入不匹配

时间:2013-01-22 15:51:51

标签: lotusscript

首先,我想说,我是开发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 但是我无法做出它的头或尾。

你能帮我一下吗?

3 个答案:

答案 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)