xpages on click事件from view面板column-弹出对话框表单from view

xpages on click事件from view面板column-弹出对话框表单from view,xpages,xpages-ssjs,xpages-extlib,Xpages,Xpages Ssjs,Xpages Extlib,有两个数据源:Cdoc(doc.content)和Pdoc(在一个对话框中) 这两个数据源基于Cdoc'UNID链接在一起 我的主视图面板如下所示: [_A_common_field] from Cdoc1 and all Pdocs from Cdoc1 ( this column is categorized ) Cdoc1 Pdoc 1 from Cdoc1 Pdoc 2 from Cdoc1 [_A_common_

有两个数据源:
Cdoc
(doc.content)和
Pdoc
(在一个对话框中)

这两个数据源基于
Cdoc'UNID
链接在一起

我的主视图面板如下所示:

     [_A_common_field] from Cdoc1 and all Pdocs from Cdoc1 ( this column is categorized )   
        Cdoc1
        Pdoc 1 from Cdoc1
        Pdoc 2 from Cdoc1
     [_A_common_field] from Cdoc2 and all Pdocs from Cdoc2 ( this column is categorized )
        Cdoc2
        Pdoc 1 from Cdoc2
    <xp:table>

            <xp:repeat rows="30" id="repeatResults" var="resultDoc"
                repeatControls="false" first="0" indexVar="indexResults">
                <xp:this.value><![CDATA[#{javascript:if (viewEntry.isDocument()){
        var strUniqueID = viewEntry.getDocument().getItemValueString("Cdoc'UNID");    
        if(null != strUniqueID & ""!=strUniqueID) {
            var  teamsView = database.getView("All_PDocs4Cdoc");
            return  teamsView.getAllDocumentsByKey(strUniqueID);
            }
        }}]]></xp:this.value>
                <xp:tr>
                       <xp:td >Pdoc[j] from Cdoc[i]</xp:td>
                       <xp:td > modal or tooltip dialog link</xp:td>
                       <xp:td > Dialog - Form</p:td>
                </xp:tr>
        </xp:repeat>
    </xp:table>

考虑到我希望在对话框(创建时)中打开
Pdoc
,如何从我的
viewPanel1
计算目标属性和
Cdoc
以“clasical”模式打开,就像未添加
target
属性时一样?

此答案假定您正试图从对话框的视图面板打开所选文档。(本质上,打开一个对话框,其中包含嵌入视图中列出的文档中的值)

向前
我很可能只是在另一个窗口中打开文档,然后处理完它。但是如果你想在对话框中打开它,可以。如果在对话框本身中定义数据源,请注意,我个人在过去曾遇到过此类方法的问题,我认为应该在xpage视图级别定义数据源

回答
1.不允许视图中有任何链接。
2.在视图中有一个可用的复选框。
3.添加一个按钮,您将从中获取所选文档的NoteID,同时确保已选择文档。

var vwpnl = getComponent("homeViewPanel");
        var docIDArray = vwpnl.getSelectedIds();
        if(docIDArray.length != 1){
            view.postScript("alert('"+MessageController.getMessageForCurrentUser("msg_SelectOneDocument") +"')");
            return;
        }
        var firstID = docIDArray.length > 0 ? docIDArray[0] : "";
        return firstID;
(您可以忽略MessageController,因为它是语言特定用户消息的my helper类之一。)

4在计算对话框中的数据源时使用该noteID(无论是否在viewScope中),确保对话框具有正确的设置,如刷新等

编辑


将这种方法(性能放在一边)保留在工具箱中的好处在于,一旦获得文档本身的句柄,就可以计算任何内容。仅使用noteID设置对话框属性只是一个示例。您可以创建一个document对象,并使用这些值执行任何您想要的操作,包括打开另一个页面、其他操作,基本上是您想要的任何操作。它可能不是当前用例的最佳选项(您没有真正指定您的用例),但对于未来的读者来说,它将有望提供帮助。

您不需要视图面板目标函数。尝试使用dataView(xe:dataView),其中:
[\u A\u common\u field]
用于
分类列

Cdoc1
用于
summaryColumn
,系统将为Cdoc创建OpenLink

<xe:dataView id="dataView2" columnTitles="true"
    pageName="/Cdoc_Write.xsp" rowStyleClass="xspHtmlTrView"
    openDocAsReadonly="true" collapsibleDetail="true"
    collapsibleRows="true" var="viewEntry">...
。。。
然后创建一个新的customControl(CC)并将其粘贴到Details部分

在CC中,需要一个包含3列的表和一个Repeat控件。使用xe:repeat,您将在tr中创建PDoc,如下所示:

     [_A_common_field] from Cdoc1 and all Pdocs from Cdoc1 ( this column is categorized )   
        Cdoc1
        Pdoc 1 from Cdoc1
        Pdoc 2 from Cdoc1
     [_A_common_field] from Cdoc2 and all Pdocs from Cdoc2 ( this column is categorized )
        Cdoc2
        Pdoc 1 from Cdoc2
    <xp:table>

            <xp:repeat rows="30" id="repeatResults" var="resultDoc"
                repeatControls="false" first="0" indexVar="indexResults">
                <xp:this.value><![CDATA[#{javascript:if (viewEntry.isDocument()){
        var strUniqueID = viewEntry.getDocument().getItemValueString("Cdoc'UNID");    
        if(null != strUniqueID & ""!=strUniqueID) {
            var  teamsView = database.getView("All_PDocs4Cdoc");
            return  teamsView.getAllDocumentsByKey(strUniqueID);
            }
        }}]]></xp:this.value>
                <xp:tr>
                       <xp:td >Pdoc[j] from Cdoc[i]</xp:td>
                       <xp:td > modal or tooltip dialog link</xp:td>
                       <xp:td > Dialog - Form</p:td>
                </xp:tr>
        </xp:repeat>
    </xp:table>

来自Cdoc[i]的Pdoc[j]
模式或工具提示对话框链接
对话框-窗体
第二列列出了将PDoc打开到对话框的链接->请参见XPages扩展库演示/上下文对话框

三号。td包含Pdoc的隐藏对话框表单


顺便说一句,1号。td包含来自Pdoc[j]的值,例如主题

根据我从您的问题中了解到的情况,这是我将要做的,如果我错了或遗漏了任何内容,请纠正我:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom">
    <xp:this.data>
        <xp:dominoView var="dominoView" viewName="ADR2"
            search="#{javascript:param.searchValue}" dataCache="full">
        </xp:dominoView>
    </xp:this.data>
<xp:table id="viewPanela" styleClass="xspRepeatTable" cellpadding="0" cellspacing="0" style="width:98%">
<xp:tr styleClass="xspHeaderRow">
        <xp:td style="width:2%"></xp:td>
        <xp:td><xp:label value="Title" id="label1"></xp:label></xp:td>
        <xp:td><xp:label value="Abteilung" id="label3"></xp:label></xp:td>
</xp:tr>
    <xp:repeat id="repeatList" value="#{javascript:dominoView}"
        var="ordnerData" rows="10" indexVar="repeatIndex">
        <xp:tr id="tr1">
            <xp:td><xp:image id="image1" style="width:12px" url="#{javascript:return findImage(ordnerData.getColumnValue('aIcon'));}"></xp:image></xp:td>
            <xp:td>
                <xp:div id="div1">
                    <xp:this.style>
                        <![CDATA[#{javascript:var level = ordnerData.getIndentLevel(); 
                            if(level != null && level > 0){
                                    return "padding-left:" + (level * 10) + "px !important";
                            }else{
                                    return "";
                            }}]]>
                    </xp:this.style>
                    <xp:link id="link1">
                        <xp:this.rendered><![CDATA[#{javascript:ordnerData.getChildCount() > 0}]]></xp:this.rendered>
                        <xp:eventHandler event="onclick" submit="true"
                            refreshMode="partial" refreshId="viewPanela" immediate="true">
                            <xp:this.action><![CDATA[#{javascript:ordnerData.toggleExpanded()}]]></xp:this.action>
                        </xp:eventHandler>
                        <xp:image id="image5" alt="Toggle Row">
                            <xp:this.url><![CDATA[#{javascript:if(ordnerData.isExpanded()){
                                            return("/tree_minus.gif");
                                        }else{
                                            return("/tree_plus.gif");
                                        }}]]></xp:this.url>
                        </xp:image>
                    </xp:link>
                    <xp:text escape="true" id="computedField3">
                        <xp:this.value><![CDATA[#{javascript:return "  " +ordnerData.getColumnValue('$92')}]]></xp:this.value>
                    </xp:text>
                </xp:div>
            </xp:td>
            <xp:td><xp:text escape="true" id="computedField4" value="#{javascript:ordnerData.getColumnValue('$95')}"></xp:text></xp:td>
            <xp:eventHandler event="ondblclick" submit="false">
                <xp:this.script><![CDATA[var docid="#{javascript:ordnerData.getDocument().getUniversalID()}";
var link="";
var typ="#{javascript:ordnerData.getDocument().getItemValueString('aTyp')}";
link='xx_openPageN.xsp?aTyp='+typ+'&action=openDocument&documentId='+docid;
window.open(link,'New','width=1000, height=650, left=250px, top=250px, menubar=no, resizable=0, scrollbars=yes');
]]></xp:this.script>
            </xp:eventHandler>
        </xp:tr>
    </xp:repeat>
<xp:tr styleClass="xspPagerRow">
        <xp:td colspan="4" align="right" style="width:100%">
            <xp:pager xp:key="headerPager" for="repeatList"
                id="pagerTop" partialRefresh="true"
                style="font-weight:inherit;margin-right:0.0px"
                layout="SeparatorPage Status FirstArrow Separator PreviousArrow Separator SeparatorPage Group Separator NextArrow Separator LastArrow">
            </xp:pager>
        </xp:td>
</xp:tr>
</xp:table>
</xp:view>

现在,这允许您对不同的文档执行不同的计算。如果您看到我的示例,我只是在编辑模式下打开一个包含相应文档的新窗口。您可以根据您的需求在此处设置条件(例如,对话框中的PDoc和窗口中的CDoc)。如果有什么不清楚或遗漏,请告诉我。对不起,我来晚了。希望这能解决你的问题

嗯,我不知道如何引用数据源的名称。我想要实现的“伪代码”是这样的:如果数据源是Cdoc,那么_target=???else _target=显示对话框。非常感谢您的帮助,您可以查看文档的表单名称Real code rocks!您可能希望使用“使用与表单关联的XPages”或使用与移动设备更兼容的内联表单查看有一个数据源我的方法:根据参数,使CSJS函数“打开”重定向到URL(对于Cdoc)或弹出/对话框(对于Pdoc)。然后,视图将包含如下调用:“{row.id}”,“{{rov.form}”)我并没有试图打开对话框中的所有文档,只有某些文档:其中文档数据源是Pdoc。谢谢你的帮助。Pdoc不是对Cdoc的响应文件。另外,Pdoc是在一个对话框中创建的,这就是我想要所有文档的原因。要在对话框中打开的Pdoc。Cdoc我希望以经典的方式打开:在同一个窗口中,而不是在新窗口中。我没有使用重复的控件,只是一个视图面板。您提到视图是根据Cdoc和Pdoc中的公共字段进行分类的。所以,它是一个以Cdoc作为父文档的分类视图,对吗?另外,对于在对话框中打开,我不建议使用数据源。相反,只需根据传递的文档id获取字段值,并以相同的方式保存(如果需要进一步说明,请告诉我)。我想这是我的错,我不太理解。因此,Cdoc和Pdoc是绑定到两个表单的两个数据源:每个表单都是文档类型,而不是响应文档。这个对话框(Pdoc)只包含几个与Cdoc相同的字段。另外,Pdoc中还有几个字段,我想在一些嵌入式视图中显示这些字段。