在同一XPage上的两个dataSource之间进行通信

时间:2013-08-10 20:04:31

标签: datasource xpages

我有一个未绑定到dataSource的XPage。 XPage包含两个自定义控件,每个自定义控件都绑定到不同的数据源,例如mainDoc和transDoc。从transDoc中的操作按钮我需要获取主自定义控件的dataSource和dataSource“mainDoc”的句柄。此Action按钮需要在mainDoc上执行保存以及其他一些操作。我有一些逻辑“隐藏”mainDoc自定义控件并显示transDoc控件。然后,用户在transDoc Control中填写一些信息,然后单击需要先保存mainDoc然后保存transDoc的操作。保存的顺序至关重要。在某些情况下,我们可能会隐藏transDoc控件并取消隐藏mainDoc控件而不保存,我有一部分工作,因为我不需要获取dataSource句柄来执行此操作。

我似乎依稀记得在某个地方读过这样的东西,但现在似乎无法找到它。

1 个答案:

答案 0 :(得分:2)

从另一个自定义控件访问数据源的简便方法是使用范围变量

在第一个自定义控件中将视图范围变量设置为mainDoc事件中的数据源beforePageLoad

<xp:this.beforePageLoad>
    <![CDATA[#{javascript:viewScope.sourceMainDoc = mainDoc}]]>
</xp:this.beforePageLoad>

然后,您可以使用此视图范围进行第二次自定义控制,例如保存mainDoc

<xp:this.action>
    <![CDATA[#{javascript:viewScope.sourceMainDoc.save()}]]>
</xp:this.action>

替代

使用Sven Hasselbach's方式从自定义控件获取数据源。您将获得实例com.ibm.xsp.model.domino.DominoDocumentData的对象。如果要使用与普通数据源Domino Document对象(= NotesXspDocument)相同的方法,则必须首先使用com.ibm.xsp.model.domino.wrapped.DominoDocument获取实例getDataObject()的对象。你可以这样做:

function getDatasource( componentId:String, dataSourceName:String ):com.ibm.xsp.model.domino.DominoDocumentData {
    ...
}
var mainDoc:com.ibm.xsp.model.domino.wrapped.DominoDocument = getDatasource("idDSComponent", "mainDoc").getDataObject();
mainDoc.save()