我有两种形式,组织和联系。联系人是对组织的响应,每个表单都有一个XPage,表单可以填写,保存等。联系也显示在组织下。使用dataTable嵌入视图。在org.xsp上,我有一个包含2个事件的按钮。第一个保存org.xsp。第二个是"创建响应文档"以父ID为当前组织文档创建新响应的事件,并将用户发送到contact.xsp。
<xp:button value="Create Contact" id="button3">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="dialog1">
<xp:this.action>
<xp:actionGroup>
<xp:actionGroup>
<xp:saveDocument var="orgDoc"></xp:saveDocument>
<xp:createResponse name="/contact.xsp"
parentId="#{javascript:orgDoc.getDocument().getUniversalID()}">
</xp:createResponse>
</xp:actionGroup>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:button>
在contact.xsp上,我有一个包含2个事件的按钮。第一个保存contact.xsp。第二个是&#34; openPage&#34;将用户发送到org.xsp的事件。文档ID为:
contactDoc.getDocument().getParentDocumentUNID()
保存新的contact.xsp时,一切正常,重定向到正确的父文档(org.xsp),响应文档(contact.xsp)显示在org.xsp的dataTable中。
在dataTable中,我有一个链接,可以让我打开并编辑contact.xsp:
<xp:link escape="true" id="link1">
<xp:this.text><![CDATA[#{javascript:contactView.getColumnValue("contactName")}]]> </xp:this.text>
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<xp:openPage name="/contact.xsp" target="openDocument"documentId="#{javascript:orgDoc.getDocument().getParentDocumentUNID()}">
</xp:openPage>
</xp:this.action>
</xp:eventHandler>
</xp:link>
我现在可以编辑contact.xsp以使用以下代码进行保存后,我被重定向到错误的父文档或空文档。
<xp:button value="Save Contact" id="button11">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete" immediate="false" save="true">
<xp:this.action>
<xp:actionGroup>
<xp:saveDocument var="contactDoc"></xp:saveDocument>
<xp:openPage name="/org.xsp" target="editDocument">
<xp:this.documentId><![CDATA[# {javascript:contactDoc.getDocument().getParentDocumentUNID()
}]]></xp:this.documentId>
</xp:openPage>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:button>
我如何解决这个问题或使用哪个写文档ID?
contactDoc.getDocument().getParentDocumentUNID()
答案 0 :(得分:1)
使用文档数据源的名称,例如document1
代替currentDocument
。
由于您在contact.xsp中定义了多个文档数据源,因此不确定您是否获得了currentDocument
的联系人文档。如果你使用
document1.getDocument().getParentDocumentUNID()
XPages确切地知道你的意思是哪个文档数据源。
答案 1 :(得分:0)
您在dataTable的链接中打开了错误的文档。您想要打开响应文档,而是打开currentDocument.getDocument().getParentDocumentUNID()
,它是组织文档的父级(就我理解您的数据模型而言,它不存在)。
相反,您希望使用相关响应文档的文档ID。假设您的dataTable使用名为responseDoc的var,您应该执行以下操作:
<xp:link escape="true" id="link1">
<xp:this.text><![CDATA[#{javascript:contactView.getColumnValue("contactName")}]]> </xp:this.text>
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<xp:openPage name="/contact.xsp" target="openDocument" documentId="#{javascript:responseDoc.getUniversalID()}">
</xp:openPage>
</xp:this.action>
</xp:eventHandler>
</xp:link>
更新:我发现您已更新了问题。据我所知,您的问题不是首先创建响应文档,而是从dataTable打开响应文档,然后保存响应文档会将您带到错误的父文档。回到父文档时,请参阅上面的答案,使用正确的文档ID。