XPage删除服务器上的文档并触发部分刷新

时间:2012-07-25 14:45:29

标签: xpages

我正在努力解决以下问题。

在我的XPage上,我有一个viewpanel组件,但它没有绑定到notesview数据源,而是绑定到viewScope中存储的hashmap。造成这种情况的原因超出了我的提问范围。

由于我视图中的行实际上并未链接到文档,因此我无法使用标准复选框和相关的getSelectedDocIds。但我想要一种方法来删除选定的文件。我有一个带有复选框的列,其中包含相应行的unid。

故事很长。我有一系列unids,并希望执行以下操作:

  • 显示要求确认的dijit.Dialog
  • 如果单击确定,则调用执行以下操作的函数:
    • 根据unids
    • 删除文档
    • 刷新viewpanel

我正在考虑以下两种解决方案,但不确定什么是最好的(可能是第三种,甚至更简单的解决方案?)

  1. 让dojo对话框的OK按钮调用一个对XAgent或普通旧LS代理执行XmlHttpRequest的函数

  2. 按照确定按钮触发在服务器上运行的事件处理程序,如JeremyHodge here所述。但是,如何将unids作为参数传递并在之后刷新视图?

  3. 谢谢!

3 个答案:

答案 0 :(得分:1)

你不能只使用带有对话框按钮控件的扩展库对话框。在此按钮控件中,您可以

第三个选项是在数据表/视图中添加一个包含复选框的列。在这些框的onchange事件中,您添加一个eventhander,它将值添加到viewScope变量。

页面底部(或顶部。)上的一个按钮,用于添加从散列映射中删除所选项目所需的代码,删除与所选ID相关联的文档。此按钮可以是普通按钮,在视图面板上进行部分刷新。当您遇到无法在对话框中使用按钮的错误时,请使用扩展库对话框控件,因为这样可以解决该问题。

如果当前用户没有正确的访问级别来删除文档,则可以使用sessionAsSigner global(假设设计元素的签名者具有正确的访问级别)。

这样您就不需要通过xmlthttprequest调用xAgent,并且可以使用默认的xpage方法。

我希望这在某种程度上有所帮助

答案 1 :(得分:1)

如果您使用一个扩展库,我会在@jjbsomhorst中使用扩展库。通常用户不会阅读对话框。因此,该方法将添加带有复选框的列,但不要打扰事件处理程序,而是将它们的值绑定到ONE scopeVariable。在提交时,该变量将包含具有所选UNID的数组。 然后渲染一个列出这些文档的页面并有一个确认按钮。虽然新页面提供了服务器往返的可能性,但用户实际关注的可能性更高。你能做什么:

拥有使用可编辑复选框呈现对话框的普通页面,当用户点击“删除”时,您设置类似viewScope.confirmDeleteMode=true;的内容并将其用作复选框的条件并将其设置为只读并设置类选定的行为“morituri”,在CSS中有.morituri { color: white; background-color : red; font-weight: bold } 和新按钮“确认删除”(并隐藏删除按钮)。

这样你只需要一个页面来处理。

答案 2 :(得分:1)

我选择了2,它可以提供部分刷新ID。我将unids作为提交值传递给了:

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