我有一个未绑定到dataSource的XPage。 XPage包含两个自定义控件,每个自定义控件都绑定到不同的数据源,例如mainDoc和transDoc。从transDoc中的操作按钮我需要获取主自定义控件的dataSource和dataSource“mainDoc”的句柄。此Action按钮需要在mainDoc上执行保存以及其他一些操作。我有一些逻辑“隐藏”mainDoc自定义控件并显示transDoc控件。然后,用户在transDoc Control中填写一些信息,然后单击需要先保存mainDoc然后保存transDoc的操作。保存的顺序至关重要。在某些情况下,我们可能会隐藏transDoc控件并取消隐藏mainDoc控件而不保存,我有一部分工作,因为我不需要获取dataSource句柄来执行此操作。
我似乎依稀记得在某个地方读过这样的东西,但现在似乎无法找到它。
答案 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()