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

本主题包含对使用业务数据目录和业务数据功能时出现的常见问题的解答。本主题并未完成,将定期根据您的问题进行更新。

问题:添加了元数据,但在实体选取器中看不到实体?

问题:BdcMetadata.XSD 文件在哪里?

问题:业务数据目录对象模型中的“应用程序注册表”是什么?

问题:怎样才能通过调用后端方法获得经安全修整的结果?

问题:在什么情况下要授予对实体的“查看”权限,但不授予对应用程序的任何权限?

问题:在元数据中可以使用 GUID 吗?

问题:服务器日志在哪里?怎样才能使用它们排除错误?

问题:如何才能通过业务数据目录显示存储图像数据的 BLOB 类型数据库字段?

问题:单个应用程序定义文件中是否可以有多个数据库或 Web 服务连接?位于不同应用程序定义文件中的实体之间是否可以有关联?

问题:如何使“业务数据选取器”对话框显示多个字段?

问题:添加了元数据,但在实体选取器中看不到实体?

列表和业务数据 Web 部件中的业务数据由业务数据目录权限决定。为了在客户端中使用实体,对实体所需的最小权限是“在客户端中可选”。

请注意 由于业务数据目录是在整个网站集范围内共享的共享服务,不能对其应用网站集级别安全设置。因此网站设置与业务数据目录权限几乎无关。

问题:BdcMetadata.XSD 文件在哪里?

业务数据目录提供一个架构定义文件 (XSD),其中定义 XML 文件中允许的架构,并定义业务应用程序的元数据。XML 文档符合此架构很重要。

可以在 Microsoft Office SharePoint Server 2007 安装的 \Bin 目录中找到 BdcMetadata.XSD 文件,这个目录通常为 <Root>\Program Files\Microsoft Office Server\12.0\Bin。

在 Microsoft Visual Studio 2005 中创作元数据时,请将 .xsd 文件复制到工作文件夹,并设置 XML 文件中的 SchemaReference 属性,使其指向工作文件夹中的 .xsd 文件。因此,Visual Studio 提供 IntelliSense,从而极大地简化了编辑过程。

问题:业务数据目录对象模型中的“应用程序注册表”是什么?

业务数据目录原来的名称为“应用程序注册表”。这就是在命名空间名称和对象模型中会看到“应用程序注册表”的原因。在这些上下文中看到名称“应用程序注册表”时,可以认为它与业务数据目录相同。

问题:怎样才能通过调用后端方法获得经安全修整的结果?

请参阅业务数据目录安全修整程序AccessChecker 示例获取详细信息。

UserContext筛选器将方法返回的实例限制到当前用户的上下文。此筛选器让业务数据目录将当前 Microsoft Windows 用户的域名和用户名附加到方法调用。

如果元数据创作者创建以用户名作为用户可控制的筛选器并返回敏感的个人数据,则一个用户可能会看到另一个用户的数据。若要避免此问题,请使用 UserContext 筛选器将用户名传入至方法调用。

有关详细信息,请参阅 FilterDescriptor

问题:在什么情况下要授予对实体的“查看”权限,但不授予对应用程序的任何权限?

有一些应用场景,其中适合向用户授予对实体的“查看”权限,但不应向该用户授予对应用程序的任何权限。请考虑委派管理的例子。管理员使用业务数据目录可以将任何对象的管理委派给另一个用户。例如,管理员(域\admin)可以授权“域\xyz”管理实体 ABC。为此,向“域\xyz”授予对实体 ABC 的“设置权限”权限。现在“域\xyz”可以向自己授予“查看”权限,这样就可以查看该实体的数据(实体实例)。“域\xyz”无须对其他对象(如应用程序或应用程序中的其他实体)拥有任何权限。

“查看”权限控制用户能否查看与实体关联的数据,而不是用户能否一直查看所有元数据对象。默认情况下在用户界面中可以查看应用程序和实体。“查看”权限等价于对实体或整个应用程序具有执行方法的“执行”权限。

问题:在元数据中可以使用 GUID 吗?

GUID 是第一类业务数据目录基元。可用作 Properties、DefaultValues 和 Identifiers。

问题:服务器日志在哪里?怎样才能使用它们排除错误?

如果尝试使用业务数据 Web 部件、业务数据列或对象模型时出错,请启用管理中心中的诊断日志记录,并检查 Windows 事件查看器或统一日志记录服务 (ULS) 服务器日志文件。业务数据目录将消息和运行时异常写入事件日志和 ULS 日志文件中。

ULS 日志文件包含事件日志信息和堆栈跟踪的副本。因此,可能会发现事件日志比 ULS 日志文件更易于使用和理解。但是,如果需要详细信息来调试错误,则 ULS 日志文件可能就会派上用场。

业务数据目录每隔 30 分钟创建一个 ULS 日志文件。可以在以下路径中找到日志文件:<drive>\Program Files\Common Files\Microsoft Shared\web server extensions\12\LOGS。ULS 日志文件包含有关所有运行时异常的有用信息,可以帮助您找出问题。在 ULS 日志文件中,消息经过分类,包含以下字段:

  • Timestamp

  • PID:在 w3wp.exe PID 下出现 Web 客户端错误。在 mssdmin.exe PID 下出现搜索和用户配置文件导入错误。

  • TID

  • Product

  • Category:(Category 字段为“Business Data”,表示与业务数据目录相关的错误)

  • EventID

  • Level

  • Message

  • Correlation

查找业务数据目录相关消息有一个简单的方法,就是在 Message 字段中搜索“metadataexception”、“ApplicationRegistry”或“Exception”,然后查看“业务数据”类别之下。

请参阅警告和错误消息获取某些常见的错误消息及其解决方法。

问题:如何才能通过业务数据目录显示存储图像数据的 BLOB 类型数据库字段?

不支持此功能。在 SharePoint Server 2007 中,业务数据目录对数据库不提供 BLOB 支持。

问题:单个应用程序定义文件中是否可以有多个数据库或 Web 服务连接?位于不同应用程序定义文件中的实体之间是否可以有关联?

都不可以。单个应用程序定义文件只能连接到一个数据库或 Web 服务。此外,关联中的 SourceEntity 和 DestinationEntity 对象应位于同一 LobSystem 对象中。

问题:如何使“业务数据选取器”对话框显示多个字段?

在返回参数的必填字段中使用 TypeDescriptor 元素的 ShowInPicker 属性。

ShowInPicker

System.Boolean

false

true

false

如果在返回参数的字段中将此属性设置为 true,则业务数据选取器中会显示该字段。业务数据目录显示定义了“ShowInPicker”属性的所有字段,以及业务数据选取器中的标题字段。如果没有此类字段,则它只显示标识符字段。

下面是一个示例:

         <Parameter Direction="Return" Name="Employees">
              <TypeDescriptor TypeName="System.Data.SqlClient.SqlDataReader, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" IsCollection="true" Name="EmployeeDataReader">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="System.Data.IDataRecord, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="EmployeeDataRecord">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.Int32" IdentifierName="EmployeeId" Name="EmployeeId">
                        <Properties>
                          <Property Name="ShowInPicker" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                      <TypeDescriptor TypeName="System.String" Name="EmployeeFirstName">
                        <Properties>
                          <Property Name="ShowInPicker" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                      <TypeDescriptor TypeName="System.String" Name="EmployeeLastName">
                        <Properties>
                          <Property Name="ShowInPicker" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                      <TypeDescriptor TypeName="System.Double" Name="Telephone">
                        <Properties>
                          <Property Name="HideInItemWebPartByDefault" Type="System.Boolean">true</Property>
                          <Property Name="HideInListWebPartByDefault" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>