0

以下の例を検討してください。PreferencesDoc は何も渡されません。この関数での割り当ては無視され、セットの後には何も残りません。tmpDoc は適切に設定されています。両方の割り当ては同一であるため、ビューの問題ではありません。明らかにパラメーターであるため、preferencesDoc の割り当てがブロックされています。エラーはなく、キーによるルックアップは正常に機能します。これは、tmpDoc の割り当てが成功したことで証明されています。

Function test(preferencesDoc As NotesDocument) 
    If preferencesDoc Is Nothing then
        Set preferencesDoc=docLookupView.getDocumentByKey("GENERAL_PREFERENCES", True)
    End if

    Dim tmpDoc As NotesDocument
    Set tmpDoc=docLookupView.getDocumentByKey("GENERAL_PREFERENCES", True)
End Function 

誰かがここで何が起こっているのか、どうすればいいのか説明できますか?

説明。

人々がアイデアを出しているのを見るのは素晴らしいことです。ただし、ここでのこの関数は、私の問題を説明するためのものであることを理解する必要があります。これは、問題を伝えるのに役立つ必要最小限の方法であり、実際のコードの一部ではありません。質問を続けてください。

繰り返しになりますが、preferenceDoc が何も渡されない場合、関数内でのその "修正" 割り当ては完全に無視されます。トデは何かに夢中になっているようです。設定されたpreferenceDocを渡すと、それを別のドキュメントに再割り当てできます。

答え

call test(Nothing) // will not work

---

Dim doc as NotesDocument
call test(doc) // will work

Tode のキーステートメント: パラメータとして "Nothing" を渡すと、何もないままになります。初期化されていない NotesDocument を渡すと、初期化されます。

Tode と Knut の両方が的を得ており、Rich は同じことをほのめかしていると思います。ありがとう。クヌートが最初だったと思うので、彼の功績を称えます。

何年もノーツでコーディングしてきましたが、この問題に遭遇したのはこれが初めてです。毎日何かを学んでいます。:)

4

3 に答える 3

1

これは、LotusScript では正常です。"nothing" を渡すと、これは NotesDocument タイプのオブジェクトではなく、単に "Nothing" になります。また、Nothing に値を割り当てることはできません。

しかし、あなたはすでに正しいことをしました: 関数を使用してください。

次のように関数を呼び出します。

Set preferenceDoc = test(preferenceDoc) 

正しい。しかし、あなたは書類を返送するのを忘れています。関数は次のようになります。

Function test(preferenceDoc as NotesDocument) As NotesDocument
  Dim docTemp as NoresDocument
  If preferenceDoc is Nothing then
    Set docTemp = docLkpView.GetDocumentBykey( "GENERAL_PREFERENCES", True )
  Else
    Set docTemp = preferenceDoc
  End If
  ' here comes the "magic"
  Set test=docTemp
End Function

もちろん、docTemp を完全に削除して、docTemp を対応する行の関数名に置き換えるだけで、最後の行は必要ありません...

于 2013-05-28T04:51:52.413 に答える
0

オブジェクトは参照によって渡されるため、説明している動作は明らかに奇妙に思えます。しかし、スタイルの問題として、とにかくそれを行うことはお勧めしません. 袖効果は、コードのロジックをあいまいにします。関数は NotesDocument を返すように宣言し、次の方法で呼び出す必要があります。

Set doc = test(doc)
于 2013-05-28T04:39:53.763 に答える