步骤 2:定义实体、方法和筛选器

在业务数据目录中注册的业务线 (LOB) 应用程序可定义实体、可在实体中执行的方法和用于启用最终用户筛选的筛选器。实体是业务对象,如 LOB 应用程序中的 Customer 或 Product。方法是与实体相关的操作,筛选器帮助限制从方法返回的实体实例的数量。

在业务数据目录中,实体属于单个 LOB 系统,必须具有唯一名称。实体包含标识符、方法、筛选器和操作。

在此步骤中,您需要在 AdventureWorks2000 数据库中定义一个名为“产品”的实体,并定义一个用于获取产品列表的名为 GetProducts 的方法。您还需要添加通配符和比较筛选器,使用户可以根据 ID、名称和 ProductNumber 字段进行筛选。

先决条件

步骤 1:连接到 AdventureWorks2000 数据库

定义实体、方法和筛选器

  1. 在步骤 1 中打开 AdventureWorks2000.XML 元数据 XML 文件。

  2. 插入下面的 XML 以替换该文件中 <!--Insert Entity XML Here --> 部分:

    <Entity EstimatedInstanceCount="10000" Name="Product">
          <!-- EstimatedInstanceCount is an optional attribute-->
          <Properties>
            <Property Name="Title" Type="System.String">Name</Property>
          </Properties>
          <Identifiers>
            <Identifier Name="ProductID" TypeName="System.Int32" />
          </Identifiers>
          <Methods>
            <!-- Defines a method that brings back Product data from the 
            back-end database.-->
            <Method Name="GetProducts">
              <Properties>
                <Property Name="RdbCommandText" Type="System.String">
                  SELECT ProductID, Name, ProductNumber, ListPrice FROM Product WHERE (ProductID &gt;= @MinProductID) AND (ProductID &lt;= @MaxProductID) AND (Name LIKE @Name) AND (ProductNumber LIKE @ProductNumber)
                </Property>
                <Property Name="RdbCommandType" Type="System.Data.CommandType">Text</Property>
                <!-- For database systems, can be Text, StoredProcedure, 
                or TableDirect. -->
              </Properties>
              <FilterDescriptors>
                <!-- Define the filters supported by the back-end method 
               (or sql query) here. -->
                <FilterDescriptor Type="Comparison" Name="ID" >
                  <Properties>
                    <Property Name="Comparator" Type="System.String">Equals</Property>
                  </Properties>
                </FilterDescriptor>
                <FilterDescriptor Type="Wildcard" Name="Name">
                  <Properties>
                    <Property Name="UsedForDisambiguation" Type="System.Boolean">true</Property>
                  </Properties>
                </FilterDescriptor>
                <FilterDescriptor Type="Wildcard" Name="ProductNumber" />
              </FilterDescriptors>
              <Parameters>
                <Parameter Direction="In" Name="@MinProductID">
                  <TypeDescriptor TypeName="System.Int32" IdentifierName="ProductID" AssociatedFilter="ID" Name="MinProductID">
                    <DefaultValues>
                      <DefaultValue MethodInstanceName="ProductFinderInstance" Type="System.Int32">0</DefaultValue>
                    </DefaultValues>
                  </TypeDescriptor>
                </Parameter>
                <Parameter Direction="In" Name="@MaxProductID">
                  <TypeDescriptor TypeName="System.Int32" IdentifierName="ProductID" AssociatedFilter="ID" Name="MaxProductID">
                    <DefaultValues>
                      <DefaultValue MethodInstanceName="ProductFinderInstance" Type="System.Int32">99999999</DefaultValue>
                    </DefaultValues>
                  </TypeDescriptor>
                </Parameter>
                <Parameter Direction="In" Name="@Name">
                  <TypeDescriptor TypeName="System.String" AssociatedFilter="Name" Name="Name">
                    <DefaultValues>
                      <DefaultValue MethodInstanceName="ProductFinderInstance" Type="System.String">%</DefaultValue>
                      <DefaultValue MethodInstanceName="ProductSpecificFinderInstance" Type="System.String">%</DefaultValue>
                    </DefaultValues>
                  </TypeDescriptor>
                </Parameter>
                <Parameter Direction="In" Name="@ProductNumber">
                  <TypeDescriptor TypeName="System.String" AssociatedFilter="ProductNumber" Name="ProductNumber">
                    <DefaultValues>
                      <DefaultValue MethodInstanceName="ProductFinderInstance" Type="System.String">%</DefaultValue>
                      <DefaultValue MethodInstanceName="ProductSpecificFinderInstance" Type="System.String">%</DefaultValue>
                    </DefaultValues>
                  </TypeDescriptor>
                </Parameter>
                <Parameter Direction="Return" Name="Products">
                  <TypeDescriptor TypeName="System.Data.IDataReader, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" IsCollection="true" Name="ProductDataReader">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.Data.IDataRecord, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="ProductDataRecord">
                        <TypeDescriptors>
                          <TypeDescriptor TypeName="System.Int32" IdentifierName="ProductID" Name="ProductID">
                            <LocalizedDisplayNames>
                              <LocalizedDisplayName LCID="1033">ID</LocalizedDisplayName>
                            </LocalizedDisplayNames>
                          </TypeDescriptor>
                          <TypeDescriptor TypeName="System.String" Name="Name" >
                            <!-- Do not use the AssociatedFilter 
                            attribute in return parameters.-->
                            <LocalizedDisplayNames>
                              <LocalizedDisplayName LCID="1033">Name</LocalizedDisplayName>
                            </LocalizedDisplayNames>
                            <Properties>
                              <Property Name="DisplayByDefault" Type="System.Boolean">true</Property>
                            </Properties>
                          </TypeDescriptor>
                          <TypeDescriptor TypeName="System.String" Name="ProductNumber">
                            <LocalizedDisplayNames>
                              <LocalizedDisplayName LCID="1033">Product Number</LocalizedDisplayName>
                            </LocalizedDisplayNames>
                            <Properties>
                              <Property Name="DisplayByDefault" Type="System.Boolean">true</Property>
                            </Properties>
                          </TypeDescriptor>
                          <TypeDescriptor TypeName="System.Decimal" Name="ListPrice">
                            <LocalizedDisplayNames>
                              <LocalizedDisplayName LCID="1033">List Price</LocalizedDisplayName>
                            </LocalizedDisplayNames>
                          </TypeDescriptor>
                        </TypeDescriptors>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                </Parameter>
              </Parameters>
              <MethodInstances>
                <MethodInstance Name="ProductFinderInstance" Type="Finder" ReturnParameterName="Products" />
                <MethodInstance Name="ProductSpecificFinderInstance" Type="SpecificFinder" ReturnParameterName="Products" />
              </MethodInstances>
            </Method>
          </Methods>
          <!-- Enter your Action XML here -->
        </Entity>
    
  3. 保存 XML 文件。

  4. 将应用程序定义添加到业务数据目录中。有关详细信息,请参阅如何:将应用程序定义添加到业务数据目录

  5. 通过创建业务数据列表 Web 部件、详细信息 Web 部件、类型的业务数据列、产品或这些项的任意组合,来测试元数据。有关详细信息,请参阅测试元数据

Next Steps

步骤 3(可选):定义操作

See Also

任务

AdventureWorks SQL Server 2000 示例

概念

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