我最近有个问题让我很头疼。
在我的XPage中有一个视图显示一些文档(假设Pdoc
作为数据源),我在<xe:dialog>
中打开/创建它们。这个对话框只有Pdoc
声明为数据源,它从Xpage数据源继承了一些值。我的可点击列公式是:
// some var declarations
var formName = rowData.getDocument().getItemValueString("Form");
if ( formName == "fmP" )
{ viewScope.put("dlgDocUnid", pe.getUniversalID())
getComponent("exampleDialog").show(); }
在同一个XPage上,我可以通过按钮New Pdoc
使用相同的对话框创建新的Pdoc
。
问题是:当我打开一个现有的Pdoc
,然后只是保存它或关闭它,然后我使用按钮创建一个newNote =>旧/以前(已经保存的Pdoc
)显示…
如果我首先创建了一个新的注释Pdoc
,它工作,它显示了一个新的空Pdoc.
<xp:this.data>
<xp:dominoDocument var="Pdoc" formName="fmPersContact"
ignoreRequestParams="true" scope="request" action="editDocument">
<xp:this.documentId><![CDATA[#{javascript:viewScope.get("dlgDocUnid");}]]></xp:this.documentId>
</xp:dominoDocument>
</xp:this.data>
我使用.documentId
从viewPanel打开方法。我认为这就是问题所在。我认为,(我不确定),我应该以这样的方式计算这个文档id,当我创建一个newNote这个文档id不应该再是viewScope.get("dlgDocUnid")
。感谢您的宝贵时间。
如果我理解正确的话,您在XPage中定义了两个数据源,并尝试在对话框中使用它们,对吗?相反,我建议在xe:dialog
的面板中定义单个数据源。
我在博客上写过一个类似的例子。在这个例子中,工具提示对话框已经被使用,但它是相同的逻辑,你可以用xe:dialog
代替xe:tooltipDialog
。
http://lotusnotus.com/lotusnotus_en.nsf/dx/mini -模式- - xpages参数-编辑-与-对话框- 1. - htm
这里的想法是使用viewScope
变量命名为noteId
。要打开现有文档,请将此变量设置为现有文档的注释id。要创建新文档,将该值设置为NEW
。然后根据以下变量在对话框中定义数据源:
<xe:dialog>
<xp:panel style="width:500.0px">
<xp:this.data>
<xp:dominoDocument
var="document1"
formName="Parameter"
action="#{viewScope.noteId eq 'NEW'?'createDocument':'editDocument'}"
documentId="#{viewScope.noteId eq 'NEW'?'':viewScope.noteId}"
ignoreRequestParams="true">
</xp:dominoDocument>
</xp:this.data>
..... Dialog content ....
</xp:panel>
</xe:dialog>
当您将数据源放在对话框中时,在启动对话框之前,您不会刷新页面以加载或准备数据源,我猜这是您当前的问题。
可能是您忘记禁用忽略请求参数的标志。听起来对话框总是与当前文档相关联,而不是与docid