有2个数据源:Cdoc
(文档内容)和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
考虑到我希望viewPanel1
在对话框中打开(创建时)和Pdoc
打开,我如何从Cdoc
计算目标属性没有添加target
属性的'clasical'模式?
答案 0 :(得分:1)
此答案假定您尝试从对话框的视图面板中打开所选文档。 (实质上,打开一个对话框,其中包含嵌入视图中列出的文档中的值)
转发强>
我很可能只是在另一个窗口中打开文档并完成它。但是如果你想在对话框中打开它,那很好。如果您在对话框本身中定义数据源,请注意我个人在过去遇到过此类方法的问题,我认为应该在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,因为那是我的语言特定用户消息的助手类之一。)
4在对话框中计算数据源时使用该noteID(无论是否在viewScope中),确保对话框具有正确的设置,如刷新等。
修改强>
关于在工具箱中保持这种方法(性能除外)的好处在于,一旦掌握了文档本身,就可以计算任何东西。使用noteID只是为了设置对话框属性只是一个例子。您可以创建一个文档对象并使用这些值来做任何你想做的事情,包括打开另一个页面,其他动作,基本上你想要的任何东西。它可能不是您当前用例的最佳选择(您没有真正指定您的用例),但对于未来的读者,它有望成为一种帮助。
答案 1 :(得分:1)
您不需要视图面板目标功能。尝试使用dataView(xe:dataview),其中:
[_A_common_field]
适用于categorieColumn
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列和重复控制的表。使用xe:repeat,您将创建PDoc到这样的tr:
<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打开到对话框的链接 - &gt;请参阅XPages扩展库演示/在上下文对话框中。
第3名。 td包含Pdoc的隐藏对话框表单。
第一顺便提一下。 td包含来自Pdoc [j]的值,例如受试者答案 2 :(得分:1)
根据我对你的问题的理解,这就是我要做的,如果我错了或在这里遗漏任何东西,请纠正我:
<?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>
<强>解释强>
我有一个简单的dominoView作为viewSource,在你的情况下,它将是一个分类视图,其中Cdoc和Pdoc作为响应文档。要确定当前单击的文档,可以使用一个简单的JavaScript:
if(level != null && level > 0)
return "Is a PDoc with document id "+ordnerData.getDocument().getUniversalID();
else
return "Is a CDoc with document id "+ordnerData.getDocument().getUniversalID();
现在,这允许您对不同的文档执行不同的计算。如果您看到我的示例,我只需打开一个新窗口,其中相应的文档处于编辑模式。您可以在此处根据您的要求获得条件(例如,对话框中的PDoc和窗口中的CDoc)。如果有任何不清楚或遗漏,请告诉我。对不起,迟到了。希望这能解决你的问题。