2014-10-30 60 views
2

xpages包含SAVE按鈕。 xpages還包含InternetAddres字段。 當用戶單擊SAVE按鈕時,需要首先檢查names.nsf - 如果在names.nsf視圖中未找到InternetAddress值,則保存成功「($ Users)」 - 如果在names.nsf視圖中找到InternetAddress值,則保存失敗「( $ Users)「xpages保存文檔時運行腳本

如何編寫腳本來做到這一點?

這是腳本的LotusScript版本:

Set namesview = namesdb.GetView("($Users)") 
Set namesdoc = namesview.GetDocumentByKey(Lcase(doc.CurrentInternetAddress(0)), True) 
If (namesdoc Is Nothing) Then '-- Create New Doc 

如何在XPages中移動?

+0

接受符合您的目的的答案或評論丟失的內容被認爲是禮貌的 – stwissel 2014-10-31 03:16:51

回答

0

在你的數據源中是一個querySave事件。你在那裏寫JS。它幾乎是相同的代碼。只需{}和;

備註:當有多個地址簿

  • 您的應用程序將打破,所以你你想使用@NameLookup這是相當快,並檢查所有addressbooks。
  • ,除非你所需要的文檔getEntry比getDocument

在SSJS你的功能應該是這樣的速度更快:

function continueWithValidUser(namesDB, addressCandidate) { 
    var success = false; 
    try { 
     var view = namesDB.getView("($Users)"); 
     var doc = view.getDocumentByKey(addressCandidate); 
     success = (doc != null); 
     doc.recycle(); 
     view.recycle(); 
    } catch (e) { 
     print(e.message); 
    }   
    return success; 

}

這應該做的伎倆

+0

由於變量名稱是成功的,因此您需要「返回成功」而不是「返回結果」,以防未曾已接。 – 2014-10-30 09:05:33

+0

修正了錯字,thx @PaulStephenWithers – stwissel 2014-10-30 09:58:31

5

的最新版本的OpenNTF Domino API爲View類添加了checkUnique()方法。它有兩個參數,第一個是檢查視圖的鍵(例如字符串或字符串列表),第二個是當前文檔。畢竟,如果您正在檢查預先存在的文檔,您不希望僅僅因爲它在視圖中找到此文檔而失敗。

因此,假設CurrentInternetAddress是一個單值字段,該代碼將是:

function continueWithValidUser(namesDB, doc) { 
    var success = false; 
    try { 
     var view = namesDB.getView("($Users)"); 
     success = view.checkUnique(doc.getItemValue("CurrentInternetAddress"),doc); 
    } catch (e) { 
     print(e.message); 
    }   
    return success; 
} 

OpenNTF的Domino API回收所有句柄到Domino對象,因此不需要再循環()調用。

相關問題