2012-12-27 111 views
1

我宣佈和使用如下SSJS庫中的全局變量:SSJS全局變量似乎不工作

var backendDoc:NotesDocument = null; 

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

我分配了一個文檔對象給它的編輯按鈕剛剛從讀改變docuemnt模式進行編輯後, :

backendDoc = document1.getDocument(); //從數據源獲取後端文檔document1

上述函數中的代碼返回錯誤NotesDocument.getItemValueString(「string」))null。顯然,後端Doc是空的。

任何想法如何分配值和在ssjs庫中使用全局變量?在此先感謝

回答

1

我認爲你必須使用一個scoped變量,其中存儲該文檔的universalid。這可以用於任何腳本來初始化後端文檔。

從ssjs你可以使用put方法和get方法來設置一個scoped變量來讀取變量。例如設置和讀取會話範圍範圍變量:

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

要了解更多有關範圍的變量看這個 http://notesin9.com/index.php/2009/11/07/episode-4-intro-to-scoped-variables/

+0

我試圖使用sessionScope.backendDoc = document1.getDocument(); –

+0

謝謝邁克爾。我確實嘗試首先使用sessionScope.backendDoc = document1.getDocument()。然後嘗試訪問它sessionScope.backendDoc.getItemValueString('fieldname'),但它總是返回null。您將UNID存儲在範圍變量中並將其用於檢索後端文檔的建議無疑是可行的。我只是不想通過這種方式來檢索文檔。無論如何,非常感謝 –

+0

我忘了提及的是,你不能在任何這些範圍內存儲多米諾骨牌對象...我認爲它也在notesin9.com視頻中提到。 –

5

有2個問題,你的代碼:

  • 邁克爾指出:你應該使用一個範圍變量。腳本庫中的全局變量實際上是應用程序全局變量(請考慮applicationScope),並且如果內存變得緊張(行爲取決於XPages版本),可能會隨時卸載它。

  • 您不能在此處使用NotesObjects。在調用之間,支持JS對象的C對象被釋放,並且對象變爲無效。

您可以在NoteId存儲在一個範圍變量,每一次檢索的NotesDocument或實際使用的JSON結構,讓你有興趣的值,僅讀/寫時實際需要(加載/保存事件)。希望這有助於

+0

感謝您提供有價值的信息。 –

+0

隨時接受答案 – stwissel