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中还有几个字段,我想在一些嵌入式视图中显示这些字段。