1. 如何编写一个 Connector
github 上的例子链接
https://github.com/imodeljs/itwin-connector-sample#ways-to-sync-data-to-an-itwin
1.1. iTwin Connector
iTwin Connector(之前用名 Bridge)在使 Bentley 和第三方设计应用程序能够为 iTwin 做出贡献方面发挥重要作用。
Bentley iTwin Connector,以支持广泛的设计应用程序,以确保所有工程数据都可以聚合到 iModel 中的数字孪生环境中。
可用 iTwin Connector 的完整列表可以在 iTwin Services 社区的 Wiki 中找到。
iTwin 连接器包括:
图
但是在某些情况下,如果没有涵盖特定格式,则可以使用 iModel.js 软件 SDK
图
作为 iModeljs SDK 的一部分,imodel-bridge-packeage 使得编写 iTwin Connector 更加容易,注意,使用此依赖库徐奥支持 es2017 的 javaScript 引擎。
1.2. 如何编写 Connector
图
连接器需要执行三个主要步骤,将数据带入 Digital Twin
- 从输入源中提取数据
- 数据转换并对齐到 Digital Twin
- 生成变更集并加载到 iModel 中。
本例以 COBie 数据格式为例,提供了一个 iTwin Connector,用于同步来自 COBie 工作表的数据。以下各节简要介绍了创建 iTwin Connector 的各个部分。有关示例实现的更多信息可以在 COBie Connector 的 readme 文档中找到。
1.2.1. 提取
本例对于 cobie Connector,本例演示了如何将 cobie 表数据提取到 sqlite 数据库中
图
1.3. 映射
iModel 连接器必须小心地将源数据转换为 iModel 中基于 BIS 的数据,因此每个连接器都是为特定的数据源编写的。数据从源映射到 iModel.
通常,连接器存储有关源数据的足够信息,以检测作业运行之间源数据的差异。以这种方式,tge 连接器生成发送到 iModelHub 的变更集。这是连接器和一次性转换器之间的关键区别。
每个作业在 iModel 中生成与所有其他作业数据隔离的数据。生成的组合 iModel 在 iModel 的主题级别进行分区;每个连接器作业都有自己的主题。
对于每个 iTwin 连接器的作者来说,总是有两个相互冲突的目标:
以这样一种方式转换数据,使其在编写应用程序的用户看来合乎逻辑且“正确”。
以这样的方式转换数据,使得来自不同创作应用程序的数据看起来是一致的, 即符合 BIS 的描述。
适当平衡这两个相互冲突的目标并非易事。但是,如果存在清晰的 BIS 模式类型,则应始终使用它们。