Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lotus notes 在不同lotus notes数据库中的文档之间创建多对多关系_Lotus Notes_Lotusscript - Fatal编程技术网

Lotus notes 在不同lotus notes数据库中的文档之间创建多对多关系

Lotus notes 在不同lotus notes数据库中的文档之间创建多对多关系,lotus-notes,lotusscript,Lotus Notes,Lotusscript,我正在进行“传统的”LotusNotes编程(与R5相同),需要实现驻留在不同数据库中的两种文档类型(表单)之间的链接 数据库(A)中类型(A)的文档可以引用数据库(B)中类型(B)的多个文档。 文档(B)也应该显示它与文档(A)的关系,因为文档(B)可以与不同的文档(A)相关。 我们有多对多的关系 目前仅在一侧实施(一对多): 文件格式(A)包含特殊文件的嵌入视图 驻留在数据库A中的“链接”文档。当用户从数据库(B)中选择文档时,此链接文档由lotusScript创建。当用户单击此嵌入视图中的

我正在进行“传统的”LotusNotes编程(与R5相同),需要实现驻留在不同数据库中的两种文档类型(表单)之间的链接

数据库(A)中类型(A)的文档可以引用数据库(B)中类型(B)的多个文档。 文档(B)也应该显示它与文档(A)的关系,因为文档(B)可以与不同的文档(A)相关。 我们有多对多的关系

目前仅在一侧实施(一对多): 文件格式(A)包含特殊文件的嵌入视图 驻留在数据库A中的“链接”文档。当用户从数据库(B)中选择文档时,此链接文档由lotusScript创建。当用户单击此嵌入视图中的项目时,它将打开文档(B)

客户希望能够在任何一方编辑此关系,这样,如果他在表格(A)中编辑它,表格(B)就会更新。 表单(B)应具有相同类型的嵌入视图或类型(a)的相关文档列表

实施它的最佳方式是什么

客户机的基础架构是LotusDomino8.5.2+LotusNotes8.5.2,所以理论上,复合应用程序方法可能是一种选择

我问这个问题的原因是,据我所知,在Notes中没有好的方法来嵌入来自另一个数据库的视图。 要求是数据库应该出现在工作区中,以某种不可靠的列表形式显示。 能够通过服务器和replicaID为嵌入式视图指定目标数据库将非常好,但是我们有一个奇怪的随机工作区数据库列表

实施它的最佳方式是什么

正如您所提到的,创建复合应用程序可能允许您这样做,但仅限于windows,而不是表单中的设计级别

例如

[窗口A]——触发器-->[窗口B]

如果你不熟悉这个系统,我做了一个教程来解释基本原理

尽管本教程将调用同一个数据库,但指向另一个数据库是很容易的


就我个人而言,我会通过XPages来完成。我个人认为,通过经典风格的notes设计/comp应用程序实现起来要容易得多。它还允许您在同一屏幕区域内显示设计元素

主要问题是Notes的设计不是为了处理数据库之间的关系(也不是为了处理父子关系之外的任何关系)。因此,解决方案必须是创造性的

我想到了几个(离谱的,可能很糟糕的)想法。一种是将引用存储在文档本身中,并在保存文档时进行更新。这一切都可以在LotusScript中完成,并且需要搜索其他数据库的文档来更新它们的引用

好处是,阅读文档时的性能会非常好。如果数据库B不可用,则在读取数据库A时不会出现问题。它将数据保存在每个数据库的本地。缺点包括保存冲突的可能性,以及如果文档不是“保存”而是通过代理更新,引用可能会失去同步的危险,等等

另一个想法是使用代理按计划管理链接。如果您不需要实时更新引用,可以运行一个代理来扫描数据库B并更新数据库A中的引用。使用此方法,您可以选择更新数据库A文档本身,也可以选择创建一组显示在嵌入式视图中的链接文档。后者消除了保存冲突问题

还有一个想法是在数据库中打开文档时隐藏任何引用,但提供一个“显示”或“更新”引用的按钮。当您单击该按钮时,它将启动LotusScript来搜索数据库B并动态构建一个列表。这可能会在少于10000个文档的情况下快速工作。该函数可以更新存储在为嵌入式视图提供数据的同一数据库上的链接文档


希望这有帮助

正如您已经听说的,lotusnotes没有内置的引用完整性约束,您必须自己做

我不会依赖文档链接,因为它们是围绕UNID的,如果剪切和粘贴同一个文档,可能会发生变化,从而丢失链接。试试这个

1/在每个文档上创建一个“ID”字段。您可以通过在计算字段中使用生成ID来填充它,并将其保存到两个数据库中的文档中。您可以在lotusScript(LS)或formula中创建一个代理来执行此操作。(如果在LS中执行,请考虑使用该语句)

2/在每个数据库中创建一个按新ID列出文档的查找视图(别忘了设置ID列的“排序顺序”)

3/使用可为两个数据库配置的操作按钮,您可以创建一个LS函数,该函数将打开对立数据库视图并返回ID字段。(这是拾取文档的最简单方法,否则您可以构建一个。将结果列表存储在名为“linkedID”的字段中。)作为多值列表

4/您可能需要存储更多信息,如文档标题或作者,因此您需要使用并查询屏幕上显示信息所需的字段来获取这些文档的句柄

5/您还可以在所引用的目标文档上添加一个新字段,称之为“refererId”,这是引用当前文档的文档列表。这将保持双向关系

存储链接的字段必须是多值字段,否则在链接文档ID列表中循环并管理它们会变得相当麻烦

这种方法