1

首先,我想说的是,我是开发 Domino 应用程序的初学者。因此,在回答我可能很愚蠢的问题时,请考虑这个事实。

我有以下问题:
当我执行以下代码时,它运行到第MsgBox一个显示正常的地方。但它并没有跑到第 2 位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")按预期正常工作。

我将数据类型设置为testVariant避免类型不匹配问题。事实上,我期待一个String.

我在这里找到了关于这个问题的唯一主题:http ://www.secure-eserver.com/?p=3431 但我无法确定它的头或尾。

你能给我任何帮助吗?

4

3 回答 3

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)
于 2013-01-22T16:28:22.087 回答
2

docSMBPrivateProfile基于NotesDocument没有FieldGetText方法的类。改为使用test = docSMBPrivateProfile.GetItemValue("DOCUMENT_ID_TEST")(0)

于 2013-01-22T16:20:40.370 回答
0

转到工具->调试 LotusScript菜单选项。然后运行代码。逐步检查它,看看有问题的行中到底是什么失败了。

事实上,我期待一个字符串。

假设该字段存在,它将返回一个数组,而不是字符串。因此,您需要执行以下操作(再次假设它只是该字段中的一个字符串)。

Set test = docSMBPrivateProfile.FieldGetText("DOCUMENT_ID_TEST") (0)
于 2013-01-22T16:04:35.210 回答