0

document1extlib ダイアログ ボックスで呼び出されるデータ ソースとして開いているドキュメントにバインドするパネルを取得しました。ボタンの保存時に、バックエンド ドキュメントと の間のすべてのフィールド値を比較したいdocument1。ただし、バックエンド ドキュメントのすべてのフィールド値は更新されているように見えるため、それらのフィールド値は で同じですdocument1。比較は の前に行われdocuemnt1.save()ます。

私の理解でdocument1.getDocument()は、元の/現在のデータがすべて含まれるバックエンド ドキュメントを取得する必要があります。 document1.getDocument(true)すべての新しいデータを取得する必要があります。すべてのフィールド値がバックエンド ドキュメントで更新されていることgetDocumentByIDがわかりました。document1.saveまだ実行されていない のでわかりません。

バックエンド ドキュメントが保存前に新しいデータで更新されるのはなぜですか?

元の/現在のデータがすべて含まれるバックエンド ドキュメントを取得するより良い方法はありますか?

4

1 に答える 1

2

getDocumentメソッドでパラメーターtrueを使用している場合、データソースに対して行われたすべての変更は、データソースのデータストアに一時的に書き込まれます。

XPages エンジンは、 NotesDocumentオブジェクトの複数のインスタンスがすべて同じバックエンド文書を参照していることを認識できるほど「スマート」です。これで、データソースのデータストアからキャッシュされたデータが返されます。そのため、すべてのオブジェクトがバックエンド ドキュメントに格納されている値ではなく、更新された値を返すようになりました (複数のデータ ソースを使用しても同じ結果が得られます)。

バックエンド ドキュメントからデータにアクセスするには、ビューで@DbLookupを使用し、すべてのドキュメントを UNID で並べ替えます。

@DbLookup("","AllByUNID", document1.getDocument( true ).getUniversalID(), "FIELD")
于 2013-01-02T11:00:13.800 に答える