业务数据目录:体系结构

业务数据目录是 Microsoft Office SharePoint Server 2007 的一种共享服务。它存储 Office SharePoint Server 2007 之外的业务应用程序的相关信息,并允许业务数据功能和自定义解决方案使用该信息在门户网站上显示业务数据,而无需另外增加代码。

业务数据目录的组件

业务数据目录包含一个元数据数据库和一个对象模型,它们为各种业务应用程序中的业务逻辑提供了简单、一致的面向对象的编程接口。

下图是业务数据目录的高级体系结构图解,展示了业务数据源、元数据数据库和业务数据功能及解决方案之间的交互。

业务数据目录的高级体系结构

业务数据目录的高级体系结构

备注

可以使用业务数据目录通过 Web 服务或数据库连接到任何后端企业应用程序。

下图展示业务数据目录的低级体系结构,包括元数据数据库和运行时对象模型及管理对象模型之间的交互。

业务数据目录的低级体系结构

业务数据目录的低级体系结构

元数据数据库

业务数据目录使用元数据来描述业务应用程序的 API。在业务数据目录中注册外部 API 描述后,它提供与后端数据的动态数据访问连接,而无需另外增加代码。例如,若要在 SharePoint 列表和 Web 部件中显示 AdventureWorks 数据库的数据,可为用于访问 AdventureWorks 数据库数据的 SQL 查询定义元数据。

元数据作者通过定义与应用程序交互的业务实体,以及定义业务应用程序中可用的方法,为每个数据源定义元数据。在 AdventureWorks 示例中,您可能会决定为以下实体定义元数据:Customer、SalesOrder 和 Product。对于希望在业务数据目录中可用的每个实体,可为将用于从后端服务器应用程序获取数据的方法定义元数据。

元数据模型抽象化基础物理源,并为处理不同种类的业务应用程序的元数据作者提供一致和简单的模型。

元数据模型通过定义语义元数据(例如为 API 增添含义的实体和关系)简化了元数据的使用。编写元数据之后,使用业务数据目录编写自定义解决方案程序的开发人员不需要了解后端 API,而可以改用简化的业务数据目录对象模型。举例而言,运行时对象模型提供多个调用,例如 System.Entity、Entity.FindFiltered 和 Entity.FindAssociated,它们使您能够非常直观地获得所需的后端数据。利用这种设计,元数据作者和开发人员可以更轻松地使用通常具有复杂 API 的业务线 (LOB) 应用程序。

业务数据目录在元数据数据库中存储元数据。因为 Office SharePoint Server 2007 将业务数据目录作为共享服务实现,所以,元数据数据库是 Office SharePoint Server 2007 部署中的 SharedServices#DB 数据库。共享服务数据库是关系数据库,而且是标准的 Microsoft SQL Server 数据库。共享服务数据库包含特定于业务数据目录的几个表,这些表存储元数据模型的不同元素。

备注

元数据数据库不包含业务数据;它仅包含有关业务应用程序的元数据。

有关详细信息,请参阅业务数据目录:元数据模型

运行时对象模型

运行时对象模型设计用于业务数据目录客户端和应用程序。运行时对象模型具有两个主要功能。

  • 它提供直观、面向对象的接口,此接口抽象化基础数据源。运行时对象模型使客户端无需了解特定于应用程序的编码范例,并允许客户端以一种简化的方式来访问所有业务应用程序。由于运行时对象模型的缘故,在 SAP 应用程序上调用方法非常类似于在 Siebel 上调用方法或在 SQL 中执行查询。

    备注

    业务数据目录并不实际执行方法,也不执行后端联结。它只是将客户端调用委托给相应的 ADO.NET 提供程序(对于数据库)和 Web 服务代理(对于 Web 服务)。

  • 利用它可以读取元数据数据库中的元数据对象并执行该处描述的业务逻辑。运行时对象模型被存入缓存,而且速度很快,因此,只需要查询元数据数据库以获取元数据信息的客户端将使用运行时对象模型。

运行时对象模型在 Microsoft.SharePoint.Portal.dll 中的以下命名空间中定义:

运行时命名空间中有以下两个关键对象。

  • IEntityInstance。从概念上讲,可以将实体实例想像为从业务数据目录中的后端业务应用程序返回的一行数据。IEntityInstance 接口抽象化基础数据源,并使客户端无需了解特定于应用程序的编码范例,它允许客户端以一种简化的方式来访问所有业务数据。由于 IEntityInstance 接口的缘故,可以按照使用 Web 服务返回的复杂 .NET 结构的同一方式使用数据库中的一行数据。

    业务数据目录中的实体实例附带了特殊的语义。例如,它能够知道行中的哪些字段表示实体实例的标识符,并允许您在该实体实例上调用多种方法,例如 GetAssociated()、GetIdentifierValues() 和 Execute()。

    业务数据目录实体实例

  • IEntityInstanceEnumerator。枚举器可用于读取集合中的数据,但它们不能用于修改基础集合。IEntityInstanceEnumerator 支持流式处理,因此在后端返回大量数据时非常有用。

    业务数据目录运行时对象模型

管理对象模型

利用管理对象模型,可以在共享服务数据库中创建、读取、更新和删除元数据对象。在业务数据目录更新部署中的所有前端 Web 服务器和应用程序服务器中的缓存之前,此模型具有相对较高的滞后时间和长达一分钟的延迟。在您进行更改的服务器上,更改会立即生效。

业务数据目录管理用户界面的开发人员和用户使用管理对象模型来创建和编辑元数据。

备注

利用运行时对象模型,可以只从元数据数据库读取元数据对象。因为它被存入缓存,而且速度很快,所以,只需要查询元数据数据库以获取元数据信息的客户端应使用运行时对象模型。

管理对象模型在 Microsoft.SharePoint.Portal.dll 中的 Microsoft.Office.Server.ApplicationRegistry.Administration 命名空间中定义。

Infrastructure 组件

如前面的业务数据目录低级体系结构图解所示,运行时对象模型依赖业务数据目录的 Infrastructure 组件来创建和管理与物理数据源的连接。Infrastructure 组件为业务数据目录客户端提供运行时连接管理和共享安全服务。

Infrastructure 组件在 Microsoft.SharePoint.Portal.dll 中的 Microsoft.Office.Server.ApplicationRegistry.Infrastructure 命名空间中定义。

执行方法:业务数据解决方案中的控制流

为了了解业务数据功能和自定义解决方案如何使用业务数据目录,请考虑下面的情况。假设您需要一个业务数据 Web 部件来显示 SAP 应用程序的信息。为此,此 Web 部件必须具有与它将调用的方法和后端方法将接受的参数相关的信息。为了获取该信息,此 Web 部件使用运行时对象模型来查询业务数据目录用于存储 BAPI 信息的元数据数据库。此 Web 部件再次使用运行时对象模型来调用 BAPI 并在页面上显示数据。

下图展示在执行方法时出现的高级控制流。

执行方法时的控制流

执行方法时的控制流

元数据缓存

为了提供更好的性能,业务数据目录缓存所有元数据对象。这样一来,它通过缓存具体化所有元数据对象,并将它们同时提供给运行时对象模型,而不是为每个方法调用而来回访问元数据数据库。元数据缓存使调用元数据对象的客户端能够更快速地访问这些对象。

备注

通过使用对象模型,可以在个别元数据对象的级别上启用或关闭缓存,这样便无需缓存很少使用的对象。

在第一次加载对象时,业务数据目录会缓存对象。每台服务器上运行的计时器会查找对元数据对象的任何更改,频率为每分钟一次。如果计时器发现对元数据对象的更改,它会清除并重新加载缓存。因此,在更改元数据后,您必须等待一分钟之久才能使更改传播到服务器场中的所有服务器。在您进行更改的服务器上,更改会立即生效。

下图是业务数据目录的部署关系图,它演示了缓存如何工作。

业务数据目录中的部署和缓存

业务数据目录中的部署和缓存

See Also

任务

AdventureWorks SQL Server 2000 示例

如何:管理对象模型使用入门

如何:初步使用运行时对象模型

概念

业务数据目录:元数据模型

常见问题解答:业务数据目录

业务数据目录:术语表

其他资源

业务数据目录