gpt4 book ai didi

xpages - 数据源名称中使用replicaid时如何强制使用本地数据库?

转载 作者:行者123 更新时间:2023-12-02 05:19:59 24 4
gpt4 key购买 nike

我有一个 XPiNC 本地复制(不在服务器上)的应用程序,其数据源位于自定义控件上,如下所示:

 <xp:dominoDocument var="document1"
formName="demo"
databaseName="#{javascript:getDemoData();}"
action="openDocument"
documentId="#{compositeData.unid}">
</xp:dominoDocument>

在我的 JavaScript 中,我有以下功能:

    function getDemoData() {
return "12345678:9ABEDEFF";
}

返回包含我的数据的数据库的replicaID(在实际代码中,它不是硬编码的,而是从配置中读取的,但这不是这里的问题)。

据我所知(可能有问题),在提供此副本语法时我无法指定服务器名称。事实证明这是一场机会游戏。有时数据库在服务器上打开,有时在客户端上打开。我认为它基于desktop8.dsk,并且哪个复制图标堆叠在顶部(?)。

我的问题:
如果本地副本可用,如何确保首先打开本地副本?

说明:
本地计算机上的 NotesDatabase.getFilePath() 返回该文件的绝对文件路径(在服务器上它是相对路径)。一旦使用 dirlink 文件,绝对路径就不再像相对路径了。示例:C:\Notes\Data 以及包含 E:\customers\stuffdevelopment.dir 文件需要添加为路径 development\shiny.nsfNotesDatabase.getFilePath 将返回 E:\customers\stuff\shiny。所以看来(?)我必须读取注册表才能从 Notes.ini 中找到数据路径,然后对照文件路径进行检查,当没有匹配项时,就去寻找 dir 文件,直到找到匹配项。
接受更好的想法:-)

最佳答案

更新:

将基于 session.getDbDirectory() 的代码更改为基于 db.openByReplicaID() 的更好解决方案,如 Christian 建议的那样。添加了测试 @ClientType() != 'Web'

此代码将查找数据库的本地副本,如果数据库本地存在,则返回“!!filePath”。否则它返回replicaId

<xp:this.databaseName><![CDATA[#{javascript:
var replicaId = getDemoData();
if (@ClientType() != 'Web') {
var db = session.getDatabase(null, null);
try {
if (db.openByReplicaID("", replicaId)) {
return "!!" + db.getFilePath();
}
} catch (err) {
}
}
return replicaId
}]]></xp:this.databaseName>

此代码适用于 XPiNC 和浏览器,但它只会查找 XPiNC 的本地副本。代码可以在本地数据库或服务器上的数据库中运行。

关于xpages - 数据源名称中使用replicaid时如何强制使用本地数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17376266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com