2012-07-25 60 views
0

我正在努力滿足以下要求。XPage刪除服務器上的文檔並觸發部分刷新

在我的XPage上,我有一個viewpanel組件,但它不綁定到notesview數據源,而是綁定到存儲在viewScope中的hashmap。這個原因超出了我的質疑範圍。

由於我的視圖中的行並未實際鏈接到文檔,所以我無法使用標準複選框和相關的getSelectedDocIds。不過我想要一種方法來刪除選定的文件。我有一個帶有複選框的列,其中包含相應行的單元。

這麼長話短說。我有unids的數組,要執行,做一個動作如下:

  • 顯示dijit.Dialog要求確認
  • 如果OK點擊調用執行以下功能:
    • 刪除基於該unids文件
    • 刷新viewPanel中

我想到的以下2個解決方案,但無疑這將是最好的(也許第三,即使是簡單的解決方案?)

  1. 有道場對話框調用的OK按鈕,做一個XMLHttpRequest來的XAgent或純老LS功能代理

  2. 確定按鈕觸發一個在服務器上運行的事件處理程序,如JeremyHodge here所述。但是,我將如何傳遞單一參數作爲參數,然後刷新視圖?

謝謝!

回答

1

我去了選項2,它有可能提供部分刷新ID。我通過unids像一個submitvalue:

function doRemove(unids){ 

    XSP.executeOnServer(ISP.UI.removeEventID, ISP.UI.removeRefreshID, { 

     params: { 
      '$$xspsubmitvalue': unids 
     }, 
     onComplete : function() { 
      //alert('test') 
     } 
    }); 

} 

的ISP.UI.removeEventID執行以下代碼:

var unids = context.getSubmittedValue(); 
removeDocuments(unids); //SSJS function performing the actual delete 
viewScope.reload = 'reload' //triggers the hashmap to be rebuild based on new documentcollection 
1

不能使用擴展庫對話框和對話框按鈕控件。在這個按鈕控件中,您可以然後

第三個選項是將列添加到包含複選框的數據表/視圖。在這些框的onchange事件上添加一個eventshader,它將值添加到viewScope變量中。

頁面底部(或頂部)的一個按鈕,用於添加您從哈希映射中刪除所選項目所需的代碼,刪除與選定ID關聯的文檔。這個按鈕可以是一個普通的按鈕,在viewpanel上進行局部刷新。當您遇到無法使用對話框中的按鈕的錯誤時,請使用擴展庫對話框控件,因爲這可以解決您的問題。

如果當前用戶沒有正確的訪問級別來刪除文檔,則可以使用sessionAsSigner全局(假設設計元素的簽名者具有正確的訪問級別)。

這種方式你不需要通過xmlthttprequest去調用xAgent,並可以使用默認的xpage方法。

我希望這有助於以某種方式

+0

感謝您的答覆。我同意最好從對話框中使用標準的Xpages功能。 但是,在我們的應用程序中,我們使用客戶端函數生成dijit.dialog客戶端,傳遞文本參數以便在OK上執行的腳本以及在Cancel上執行的腳本。這些參數是_ahum_評估的。 現在就開始使用由Jeremy Hodge executeOnServer方法觸發的事件。 計劃取代CSJS只有道場確認與更多的XPage類似的方式。但不知道什麼是最好的辦法。 – BvG013 2012-07-26 08:36:57

1

我會在使用擴展庫對話框的第二@jjbsomhorst - 如果你使用一個在所有。通常用戶不會閱讀對話框。因此,這種方法將添加帶有複選框的列,但不要打擾事件處理程序,但將它們的值與它們的值綁定到一個scopeVariable。提交後,變量將保存具有所選UNID的數組。 然後呈現列出這些文檔並具有確認按鈕的頁面。雖然新的頁面提供了服務器往返的可能性,但用戶真正關注的卻更高。你可以做什麼:

讓普通頁面呈現帶有可編輯複選框的對話框,當用戶點擊「刪除」時,你設置了類似於viewScope.confirmDeleteMode=true;的東西,並將其用作複選框的條件並使其成爲只讀並將其設置爲所選行的類爲「morituri」,在你的CSS裏有.morituri { color: white; background-color : red; font-weight: bold }和一個新的「確認刪除」按鈕(並隱藏刪除按鈕)。

這樣你只有一個頁面來處理。

+0

感謝您的回覆。我喜歡突出顯示行並用確認替換刪除的想法。然而,應用程序在整個應用程序中使用客戶端生成的dijit.dialogs,我確實需要一致的行爲。此外,視圖中的圖像按鈕位於組合框中。所以我不能更換按鈕或標題。 – BvG013 2012-07-26 08:28:29

+0

對話框不是WEB :-) - 你需要遲早重構 - 特別是對於移動 – stwissel 2012-07-26 23:32:40