Xpages如何在SSJS中获得CSJS确认

时间:2015-04-28 12:31:58

标签: xpages xpages-ssjs

我有一个重复控件,其中包含一个按钮,用于处理用户选择的文档。我的第一个用例是删除。我检测用户是否选择了至少一个文档,如果没有,则使用view.postScript发布错误消息。

我想添加一个确认对话框,确认用户想要对文档执行操作(比如删除它们)但无法找到方法。

理想情况下,我想在目前的SSJS中完成所有这些操作。

我的代码如下,有一个存根,我想要求用户确认。

非常感谢任何帮助。

//Did the user select a document
var hasSelected:Boolean = false;
for (var id in SelectedDocs.getSelectedIDs()) {     
        hasSelected = true;
        break
}

//If false then set a warning
if (hasSelected == false)
{
x="alert('Error\\n\\nPlease select one or more documents to delete.\\n\\n');";
view.postScript(x)
return
}

//If true then ask confirmation
if (hasSelected == true)
{
}

var rspView:NotesView = database.getView("(dbAllRpPCTasks)")

for (var id in SelectedDocs.getSelectedIDs()) {     

        //Get each selected doc
        var doc:NotesDocument = database.getDocumentByID(id);

        //Get child docs and delete them
        var key:String = doc.getItemValueString("ID");
        var dc:NotesDocumentCollection = rspView.getAllDocumentsByKey(key);
        if (dc.getCount() != 0) 
            {dc.removeAll(true);}

        //Delete the selected doc
        doc.remove(true)
        doc.recycle();
        SelectedDocs.setSelectedState(id,false);
}

感谢所有建议。我在回答弗兰克的回答。尝试编写CSJS,确定用户是否选择了文档然后继续。

在CSJS中我的按钮的点击事件中,我有以下内容:

var dtList = document.getElementsByName("#{id:dataView1.getSelectedIds()}");
confirm("What is the length?" + dtList.length);
confirm("Can I get an item?" + dtList.item(0));

返回零长度,项目未定义。

3 个答案:

答案 0 :(得分:1)

与LotusScript不同,XPage代码不能等待用户输入。可以把它想象为调用代理在服务器上运行并在其中添加UIWorkspace.prompt()(这将引发错误,因为不允许用户交互)。

最好的建议是将确认提示作为CSJS添加到用户最初点击的按钮,例如。

return confirm("Are you sure?");

如果他们选择了文件,他们会在继续之前被提示。如果他们没有,它可能会提示某些用户无论如何都要选择文档。很难对没有选择任何文件的用户的投诉表示同情,点击他们想要继续的文件,然后抱怨再次进行对话。

答案 1 :(得分:0)

一点理论 - 每个行动都可以有这些组合:

  • CSJS
  • CSJS + SSJS
  • CSJS + SSJS + CSJS
  • SSJS
  • SSJS + CSJS

因此,您必须结合一个或多个动作来完成您想要做的事情。可用于链接呼叫的技术:

  • XSP.partialRefreshGet /后
  • view.postscript(结合以上内容)
  • onComplete event' s property
  • 内联CSJS在呈现阶段计算
  • 由CSJS发起的隐藏按钮(postscript / onComplete)
  • ExtLib RPC调用

我对您的用例的建议是在事件的CSJS中检测(执行前)用户是否选择了任何文档(DOM操作)。如果没有,请使用return false;来停止事件执行(在CSJS提示中有正确的解释)。

编辑:确切的用例 将您的用例划分为两个问题:条件和执行。

<强> 1。条件

你真的需要打电话给SSJS来获取这些信息吗?这取决于您使用什么来选择文档 - 您的SelectedDocs对象是什么?在某些情况下,您可以将(字面上)所选文档的数量呈现给DOM(假设选择触发部分/完全刷新)并在调用SSJS之前在CSSJ中使用它。所以重新考虑你的需求/方法。

<强> 2。执行

它真的需要SSJS + CSJS + SSJS组合吗?我对此表示怀疑。

以下是基于SSJS(+ CSJS)的用例示例。它模拟50:50显示提示或删除文档的机会。您明白了,只需更新第一个操作组即可获得所选的计数。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xp_1="http://www.ibm.com/xsp/coreex">
    <xp:button
        value="Label"
        id="button1">
        <xp:eventHandler
            event="onclick"
            submit="true"
            refreshMode="partial" refreshId="button1">
            <xp:this.action>
                <xp:actionGroup>
                    <xp:actionGroup>
                        <xp:executeScript
                            script="#{javascript:requestScope.docnum = @Integer( @Random() * 2 );}">
                        </xp:executeScript>
                    </xp:actionGroup>
                    <xp:actionGroup
                        condition="#{javascript:requestScope.docnum == 0;}">
                        <xp:executeScript>
                            <xp:this.script><![CDATA[#{javascript:view.postScript('alert("No documents selected...");');}]]></xp:this.script>
                        </xp:executeScript>
                    </xp:actionGroup>
                    <xp:actionGroup
                        condition="#{javascript:requestScope.docnum != 0;}">
                        <xp:executeScript
                            script="#{javascript:// delete documents}">
                        </xp:executeScript>
                    </xp:actionGroup>
                </xp:actionGroup>
            </xp:this.action>
        </xp:eventHandler>
    </xp:button>
</xp:view>

答案 2 :(得分:0)

您是否尝试过使用简单操作按钮?我使用“确认操作”来验证用户没有意外点击按钮(遗憾的是这是一个常见问题)。接下来,我验证我的表单并在自定义消息区域(Thanks to Tommy Valand)中显示任何消息,但您可以使用正常的消息区域。

创建一个Action Group并将SSJS表达式(或EL)置于有条件的执行状态。在页面中显示消息而不是弹出窗口。

Example Action Group Setup

相关问题