发生类型不匹配是因为您遇到 pValue 不是数组的情况。当您尝试引用不存在的 NotesItem 时,就会发生这种情况。即,doc.MissingItem。
您不应使用简写符号 doc.itemName。这很方便,但会导致编码草率。您应该按照其他人的建议使用 getItemValue ,还应该检查 NotesItem 是否存在。IE,
if doc.hasItem("myItem") then
lsaddress=doc.getItemValue("myItem")(0)
end if
Notes 和 Domino 是无模式的。除了您自己编写的内容之外,没有任何数据完整性检查。您可能认为该项目必须始终存在,但事实是,没有任何东西可以保证这一点,因此始终由您来编写代码,使其不承担任何责任。
顺便说一句:除了字段是否存在之外,您可能还需要执行其他检查。您可能还想检查字段的类型,但要做到这一点,需要在对象链上再上一层,并使用 getFirstItem 而不是 getItemValue,我不打算在这里讨论。再一次,原因是 Notes 和 Domino 是无模式的。您可能认为给定的项目必须始终是一个文本列表,但只需有人在一次性修复代理中编写草率的代码,您最终可能会得到一个该项目是数字的文档!
检查您的字段实际上是(有时)将您的字段访问封装在一个函数中的一个很好的理由,就像您尝试做的那样。我在上面添加“有时”的原因是您的代码对缺失字段的行为不一定总是相同,但是对于您只想在字段不存在时返回默认值的情况,您可以使用像这样的东西:
lsaddress ImsField("address","")
private function ImsField(fieldName,defaultValue)
if doc.hasItem(fieldName) then
lsaddress=doc.getItemValue(fieldName)(0)
else
lsaddress=defaultValue
end if
end function