1

以下のように、ssjs ライブラリでグローバル変数を宣言して使用しました。

var backendDoc:NotesDocument = null;

function savedata () {
  print (backendDoc.getItemValueString("fieldname"));   // crash here  
}

ドキュメント モードを読み取りから編集に変更した直後に、[編集] ボタンでドキュメント オブジェクトを割り当てました。

backendDoc = document1.getDocument(); // document1 というデータソースからバックエンド ドキュメントを取得します

上記の関数のコードは、エラー NotesDocument.getItemValueString("string")) null を返します。どうやら、backendDoc は null です。

値を割り当ててssjsライブラリでグローバル変数を使用する方法はありますか? 前もって感謝します

4

2 に答える 2

5

コードには2つの問題があります。

  • Michaelが指摘したように、スコープ変数を使用する必要があります。スクリプトライブラリのグローバル変数は実際にはアプリケーショングローバルであり(applicationScopeと考えてください)、メモリが不足した場合はいつでもアンロードされる可能性があります(それらの動作はXPagesのバージョンによって異なります)

  • ここではNotesObjectsを使用できません。呼び出しの間に、JSオブジェクトをサポートするCオブジェクトが解放され、オブジェクトが無効になります。

NoteIdをスコープ変数に格納して毎回NotesDocumentを取得するか、実際にJSON構造を使用して目的の値を保持し、実際に必要な場合にのみ読み取り/書き込みを行うことができます(ロード/保存イベント)。お役に立てれば

于 2012-12-28T02:04:23.890 に答える
1

ドキュメントのユニバーサルIDを格納するスコープ変数を使用する必要があると思います。これを任意のスクリプトで使用して、バックエンド ドキュメントを初期化できます。

ssjs から put メソッドと get メソッドを使用してスコープ変数を設定し、変数を読み取ることができます。セッション スコープでスコープ変数を設定および読み取る例:

sessionScope.put(“myvar“,“myvalue“)
sessionScope.get(“myvar“)

スコープ変数の詳細については、 http://notesin9.com/index.php/2009/11/07/episode-4-intro-to-scoped-variables/をご覧ください。

于 2012-12-27T18:54:42.317 に答える