1

VB6 を使用してロータス ノート ドキュメントを読み込もうとしています。

元; Lotus Notes の住所フィールド

lsaddress=ImsField(doc.address)

private function ImsField(pValue)
ImsField=pValue(0)
end function

このように、残りのフィールドを読み取っていますが、特定の時点で実行時エラー「13」タイプの不一致エラーがスローされました。

手動で再初期化する必要があります

 set doc=view.getdocumentbykey(doclist)
4

3 に答える 3

1

pValue が配列ではないケースが発生しているため、型の不一致が発生しています。これは、存在しない NotesItem を参照しようとしたときに発生します。つまり、doc.MissingItem.

短縮表記 doc.itemName は使用しないでください。便利ですが、ずさんなコーディングにつながります。他の誰もが示唆しているように getItemValue を使用する必要があります。また、 NotesItem が存在するかどうかを確認する必要があります。すなわち、

if doc.hasItem("myItem") then
  lsaddress=doc.getItemValue("myItem")(0)
end if

Notes と Domino はスキーマレスです。自分で書いたもの以外のデータ整合性チェックはありません。アイテムは常にそこにある必要があると思うかもしれませんが、真実はそれを保証するものは何もないので、何も仮定しないようにコードを書くのは常にあなた次第です。

ところで:フィールドが存在するかどうか以外にも、実行したいチェックがあります。フィールドのタイプも確認したい場合がありますが、そのためには、オブジェクト チェーンをもう 1 レベル上に移動し、getItemValue の代わりに getFirstItem を使用する必要があります。これについてはここでは説明しません。もう一度言いますが、ノーツとドミノにはスキーマがないからです。与えられた項目は常にテキスト リストでなければならないと考えるかもしれませんが、誰かが 1 回限りの修正エージェントでずさんなコードを書いているだけで、その項目が数値であるドキュメントが作成される可能性があります。

フィールドをチェックすることは、実際には、フィールドへのアクセスを関数にカプセル化する正当な理由です (場合によっては)。上記で「時々」を追加した理由は、欠落しているフィールドに対するコードの動作が常に同じになるとは限らないためですが、フィールドが存在しないときにデフォルト値を返したい場合は、次を使用できますこのようなもの:

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
于 2013-05-21T16:03:37.190 に答える