XPages REST控件。如何获取外部数据库的句柄

XPages REST控件。如何获取外部数据库的句柄,xpages,xpages-ssjs,xpages-extlib,Xpages,Xpages Ssjs,Xpages Extlib,我使用XPages REST控件访问数据库中的资源,该数据库与REST控件本身所在的数据库不同。这很简单,我只是使用databaseName属性 在SSJS中,我希望获得外部数据库(databaseName属性中提到的那个)的句柄,这似乎相当具有挑战性 在这种特殊情况下,我需要视图列公式中的句柄来访问父文档上的数据。如果没有涉及外部数据库,我只会使用global database属性,但在这种情况下,这将不起作用,因为它指向承载REST控件的数据库。我强烈推荐Frank van der Lind

我使用XPages REST控件访问数据库中的资源,该数据库与REST控件本身所在的数据库不同。这很简单,我只是使用databaseName属性 在SSJS中,我希望获得外部数据库(databaseName属性中提到的那个)的句柄,这似乎相当具有挑战性
在这种特殊情况下,我需要视图列公式中的句柄来访问父文档上的数据。如果没有涉及外部数据库,我只会使用global database属性,但在这种情况下,这将不起作用,因为它指向承载REST控件的数据库。

我强烈推荐Frank van der Linden在评论中建议的方法,将其设置为xsp属性,它可以被您使用的任何获取属性的方法/函数轻松引用,并且具有很好的副作用,使您的数据连接调用能够在应用程序之间轻松复制/粘贴

例如:

我在
工作中:


confBean
应用
com.myApp.config.AppUtil
这意味着我的AppUtil bean将属性设置为db路径:

ExtLibUtil.getXspContext().getProperty("xsp.local.data", "MyApp_data.nsf")
*注意:第一个参数是属性名,第二个是“默认”(故障转移)值,如果找不到属性值

然后,要获取xe:restService的完整路径,只需插入值,如下所示(假设使用相同的服务器,示例显示了一个带有默认列的xe:viewJsonService):


[更新]

正如svenhasselbach在下面的评论中指出的那样,托管属性将获得大致相同的结果,而无需编辑xsp属性文件,并将该属性(对于应用程序来说是显式的)与托管bean定义保持内联。根据他的回答,以下是Sven如何使用托管属性执行相同操作的示例:

faces config.xml中


蚕豆
ch.hasselba.xpages.MyBean
应用
数据库名
我的名字
java.lang.String
在他的配置bean中,它被定义为具有私有属性和公共getter/setter的任意属性(一个lapojo):

/。。。
私有字符串dbName;
public void setDbName(字符串dbName){
this.dbName=dbName;
}
公共字符串getDbName(){
返回dbName;
}
//...
与任何托管bean属性一样可用:



[/Update]

在我最初的问题中没有指出,但我有一个配置servlet,它定义了到外部数据库的路径

问题更多的是以一种不会产生太多开销的方式获取数据库对象的句柄。昨天在slack(OpenNTF频道)与Paul Winters讨论之后,我现在确信在视图列中打开外部db是完全可以的

我没有在服务中寻找外部源的句柄,而是在需要时在代码中打开db,因此最终解决方案的代码归结为几行简单的代码:


var pid=rowData.getColumnValue(“r_companyid”);
var path=configBean.getDbPath(no.mycompany.myapp.Configuration.DB\u path\u联系人);
var contactsDb:NotesDatabase=session.getDatabase(database.getServer(),path);
var docParent:NotesDocument=contactsDb.getDocumentByUNID(pid);
retVal=docParent.getItemValueString(“公司名称”);

不确定这是否有帮助,但这就是我连接Bluemix中的外部数据库以创建可搜索REST服务的方式-将此外部数据库名存储在xsp.properties或自己的属性文件中。因此,整个应用程序都可以从这个参数中获益,这对它来说是一个很好的用途,特别是因为这个示例只关注一个属性,而且它是一种将
静态final
值注入托管bean属性的好方法。我已将其添加到我的答案中。谢谢,请查看我自己对以下问题的答案。也许在最初的问题中不清楚,但我更关心的是如何处理db对象本身,而不是到数据库的路径db@GunnarAlmas啊,是的,这和我以为你要找的有点不同。
ExtLibUtil.getXspContext().getProperty("xsp.local.data", "MyApp_data.nsf")