模型和资源文件

上次修改时间: 2010年4月15日

适用范围: SharePoint Server 2010

Business Data Connectivity (BDC) Service 现在支持两种类型的 XML 应用程序定义文件:"模型"和"资源"。模型定义文件包含系统的基本 XML 元数据。资源文件使您能够仅导入或导出任意组合的本地化名称、属性和权限。以下是资源文件的类型:

  • LocalizedNames   包含元数据对象在特定区域设置中的本地化名称。导入此文件时,它的信息将与元数据存储中的现有元数据合并。如果已存在该区域设置的本地化名称,则会用 LocalizedNames 文件中的信息覆盖它。

  • Properties   包含元数据对象的属性。导入此文件时,它的信息将与元数据存储中的现有元数据合并。如果某个属性已存在,则会用 Properties 文件中的信息覆盖它的值。

  • Permissions   包含元数据对象的访问控制列表 (ACL)。导入此文件时,它的信息将与元数据存储中的现有元数据合并。但是,如果已存在某对象的访问控制项 (ACE),则会用 Permissions 文件中的信息覆盖它的值。例如,如果现有的应用程序定义只包含有权访问实体 A 的用户 A,而您导入了只包含有权访问实体 A 的用户 B 的 Permissions 文件,则会删除实体 A 的现有 ACL,并仅为用户 B 创建新的 ACL。

如果导入某应用程序的模型文件,则 BDC 会覆盖该应用程序的任何现有元数据。但是,如果导入包含任意组合的本地化名称、属性或权限的资源文件,BDC 会执行合并操作。它仅将资源文件的内容与该应用程序的现有元数据进行合并。

这在某些情况下非常有用。例如,假设已为复杂的企业资源规划 (ERP) 系统导入了一个应用程序定义文件。考虑以下三种情况:

  • 后端连接信息发生更改。若要更新连接信息,可以创建简单的 Properties 资源文件(它仅包含 LobSystemInstance 对象中已更改的属性)并导入它。BDC 将此信息与现有的 LobSystemInstance 属性进行合并,而且,如果某属性已存在,则会用 Properties 资源文件中的新信息覆盖它的值。

  • 贵公司开拓了某个新地区的市场,您的应用程序现在必须支持一种新的本地化语言。在这种情况下,可以创建 LocalizedNames 资源文件(它仅包含此新语言的本地化名称)并导入它。BDC 将此信息与现有的元数据进行合并,从而解决此问题。

  • 某特许企业必须在其环境中使用您的应用程序。在这种情况下,该企业可以创建一个 Permissions 资源文件(它仅包含该特许企业中的用户的 ACL)并导入它。BDC 将删除现有的 ACL 并用新的信息创建 ACL,从而解决此问题。

按照以上情况中所述使用资源文件是一种比更新模型文件更好的方法。如果您改为利用本地化名称或属性来更新模型文件,则 BDC 会删除现有的元数据,而用新的信息覆盖现有的元数据。这种做法不一定恰当,而且可能涉及到额外的测试和工作。例如,每次导入模型文件时,BDC 都将删除所有元数据对象及其 ID,因此,在搜索时将需要执行元数据对象的完全爬网。

重要注释重要说明

单个应用程序定义文件可包含任意组合的模型和资源文件。SharePoint 管理中心在"导入和导出"用户界面 (UI) 中支持此做法,而对象模型通过使用位或 OR (|) 运算符支持此做法。

代码示例

了解应用程序定义文件功能的最简单方法是,利用 SharePoint 管理中心 UI 中的"导出应用程序定义"选项来进行试验。利用"导出应用程序定义"选项,可以导出任意组合的模型和/或资源文件中的元数据。

下面的示例演示 AdventureWorks2000 元数据的 Permissions 和 Properties 元数据。

备注

在示例中,domain name 和 username 的特定值将由通用值替换。

Permissions

以下 XML 显示了包含权限的资源文件的示例。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<LobSystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://schemas.microsoft.com/office/2006/03/BusinessDataCatalog BDCMetadataResource.xsd" Name="AdventureWorksSample" xmlns="https://schemas.microsoft.com/office/2006/03/BusinessDataCatalog">
  <AccessControlList>
    <AccessControlEntry Principal="domainname\username">
      <Right BdcRight="Edit" />
      <Right BdcRight="Execute" />
      <Right BdcRight="SetPermissions" />
      <Right BdcRight="SelectableInClients" />
    </AccessControlEntry>
  </AccessControlList>
  <LobSystemInstances>
    <LobSystemInstance Name="AdventureWorksSampleInstance" />
  </LobSystemInstances>
  <Entities>
    <Entity Name="Product">
      <AccessControlList>
        <AccessControlEntry Principal="domainname\username">
          <Right BdcRight="Edit" />
          <Right BdcRight="Execute" />
          <Right BdcRight="SetPermissions" />
          <Right BdcRight="SelectableInClients" />
        </AccessControlEntry>
      </AccessControlList>
      <Identifiers>
        <Identifier Name="ProductID" />
      </Identifiers>
      <Methods>
        <Method Name="GetProducts">
          <AccessControlList>
            <AccessControlEntry Principal="domainname\username">
              <Right BdcRight="Edit" />
              <Right BdcRight="Execute" />
              <Right BdcRight="SetPermissions" />
              <Right BdcRight="SelectableInClients" />
            </AccessControlEntry>
          </AccessControlList>
          <FilterDescriptors>
            <FilterDescriptor Name="ID" />
            <FilterDescriptor Name="Name" />
            <FilterDescriptor Name="ProductNumber" />
          </FilterDescriptors>
          <Parameters>
            <Parameter Name="@MinProductID">
              <TypeDescriptor Name="MinProductID" />
            </Parameter>
            <Parameter Name="@MaxProductID">
              <TypeDescriptor Name="MaxProductID" />
            </Parameter>
            <Parameter Name="@Name">
              <TypeDescriptor Name="Name" />
            </Parameter>
            <Parameter Name="@ProductNumber">
              <TypeDescriptor Name="ProductNumber" />
            </Parameter>
            <Parameter Name="Products">
              <TypeDescriptor Name="ProductDataReader">
                <TypeDescriptors>
                  <TypeDescriptor Name="ProductDataRecord">
                    <TypeDescriptors>
                      <TypeDescriptor Name="ProductID" />
                      <TypeDescriptor Name="Name" />
                      <TypeDescriptor Name="ProductNumber" />
                      <TypeDescriptor Name="ListPrice" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Name="ProductFinderInstance">
              <AccessControlList>
                <AccessControlEntry Principal="domainname\username">
                  <Right BdcRight="Edit" />
                  <Right BdcRight="Execute" />
                  <Right BdcRight="SetPermissions" />
                  <Right BdcRight="SelectableInClients" />
                </AccessControlEntry>
              </AccessControlList>
            </MethodInstance>
            <MethodInstance Name="ProductSpecificFinderInstance">
              <AccessControlList>
                <AccessControlEntry Principal="domainname\username">
                  <Right BdcRight="Edit" />
                  <Right BdcRight="Execute" />
                  <Right BdcRight="SetPermissions" />
                  <Right BdcRight="SelectableInClients" />
                </AccessControlEntry>
              </AccessControlList>
            </MethodInstance>
          </MethodInstances>
        </Method>
        <Method Name="ProductIDEnumerator">
          <AccessControlList>
            <AccessControlEntry Principal="domainname\username">
              <Right BdcRight="Edit" />
              <Right BdcRight="Execute" />
              <Right BdcRight="SetPermissions" />
              <Right BdcRight="SelectableInClients" />
            </AccessControlEntry>
          </AccessControlList>
          <Parameters>
            <Parameter Name="ProductIDs">
              <TypeDescriptor Name="Products">
                <TypeDescriptors>
                  <TypeDescriptor Name="Product">
                    <TypeDescriptors>
                      <TypeDescriptor Name="ProductID" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Name="ProductIDEnumeratorInstance">
              <AccessControlList>
                <AccessControlEntry Principal="domainname\username">
                  <Right BdcRight="Edit" />
                  <Right BdcRight="Execute" />
                  <Right BdcRight="SetPermissions" />
                  <Right BdcRight="SelectableInClients" />
                </AccessControlEntry>
              </AccessControlList>
            </MethodInstance>
          </MethodInstances>
        </Method>
      </Methods>
      <Actions>
        <Action Name="Search on MSN">
          <ActionParameters>
            <ActionParameter Name="Name" />
          </ActionParameters>
        </Action>
        <Action Name="View Profile">
          <ActionParameters>
            <ActionParameter Name="ProductID" />
          </ActionParameters>
        </Action>
      </Actions>
    </Entity>
    <Entity Name="SalesOrder">
      <AccessControlList>
        <AccessControlEntry Principal="domainname\username">
          <Right BdcRight="Edit" />
          <Right BdcRight="Execute" />
          <Right BdcRight="SetPermissions" />
          <Right BdcRight="SelectableInClients" />
        </AccessControlEntry>
      </AccessControlList>
      <Identifiers>
        <Identifier Name="SalesOrderID" />
      </Identifiers>
      <Methods>
        <Method Name="GetSalesOrders">
          <AccessControlList>
            <AccessControlEntry Principal="domainname\username">
              <Right BdcRight="Edit" />
              <Right BdcRight="Execute" />
              <Right BdcRight="SetPermissions" />
              <Right BdcRight="SelectableInClients" />
            </AccessControlEntry>
          </AccessControlList>
          <FilterDescriptors>
            <FilterDescriptor Name="ID" />
            <FilterDescriptor Name="SalesOrderNumber" />
          </FilterDescriptors>
          <Parameters>
            <Parameter Name="@MinSalesOrderID">
              <TypeDescriptor Name="MinSalesOrderID" />
            </Parameter>
            <Parameter Name="@MaxSalesOrderID">
              <TypeDescriptor Name="MaxSalesOrderID" />
            </Parameter>
            <Parameter Name="@SalesOrderNumber">
              <TypeDescriptor Name="SalesOrderNumber" />
            </Parameter>
            <Parameter Name="SalesOrders">
              <TypeDescriptor Name="SalesOrderDataReader">
                <TypeDescriptors>
                  <TypeDescriptor Name="SalesOrderDataRecord">
                    <TypeDescriptors>
                      <TypeDescriptor Name="SalesOrderID" />
                      <TypeDescriptor Name="OrderDate" />
                      <TypeDescriptor Name="IndividualID" />
                      <TypeDescriptor Name="SubTotal" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Name="SalesOrderFinderInstance">
              <AccessControlList>
                <AccessControlEntry Principal="domainname\username">
                  <Right BdcRight="Edit" />
                  <Right BdcRight="Execute" />
                  <Right BdcRight="SetPermissions" />
                  <Right BdcRight="SelectableInClients" />
                </AccessControlEntry>
              </AccessControlList>
            </MethodInstance>
            <MethodInstance Name="SalesOrderSpecificFinderInstance">
              <AccessControlList>
                <AccessControlEntry Principal="domainname\username">
                  <Right BdcRight="Edit" />
                  <Right BdcRight="Execute" />
                  <Right BdcRight="SetPermissions" />
                  <Right BdcRight="SelectableInClients" />
                </AccessControlEntry>
              </AccessControlList>
            </MethodInstance>
          </MethodInstances>
        </Method>
      </Methods>
      <Actions>
        <Action Name="View Profile">
          <ActionParameters>
            <ActionParameter Name="SalesOrderID" />
          </ActionParameters>
        </Action>
      </Actions>
    </Entity>
    <Entity Name="Customer">
      <AccessControlList>
        <AccessControlEntry Principal="domainname\username">
          <Right BdcRight="Edit" />
          <Right BdcRight="Execute" />
          <Right BdcRight="SetPermissions" />
          <Right BdcRight="SelectableInClients" />
        </AccessControlEntry>
      </AccessControlList>
      <Identifiers>
        <Identifier Name="IndividualID" />
      </Identifiers>
      <Methods>
        <Method Name="GetCustomers">
          <AccessControlList>
            <AccessControlEntry Principal="domainname\username">
              <Right BdcRight="Edit" />
              <Right BdcRight="Execute" />
              <Right BdcRight="SetPermissions" />
              <Right BdcRight="SelectableInClients" />
            </AccessControlEntry>
          </AccessControlList>
          <FilterDescriptors>
            <FilterDescriptor Name="ID" />
            <FilterDescriptor Name="Name" />
          </FilterDescriptors>
          <Parameters>
            <Parameter Name="@MinIndividualID">
              <TypeDescriptor Name="MinIndividualID" />
            </Parameter>
            <Parameter Name="@MaxIndividualID">
              <TypeDescriptor Name="MaxIndividualID" />
            </Parameter>
            <Parameter Name="@Name">
              <TypeDescriptor Name="Name" />
            </Parameter>
            <Parameter Name="Customers">
              <TypeDescriptor Name="CustomerDataReader">
                <TypeDescriptors>
                  <TypeDescriptor Name="CustomerDataRecord">
                    <TypeDescriptors>
                      <TypeDescriptor Name="IndividualID" />
                      <TypeDescriptor Name="FirstName" />
                      <TypeDescriptor Name="LastName" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Name="CustomerFinderInstance">
              <AccessControlList>
                <AccessControlEntry Principal="domainname\username">
                  <Right BdcRight="Edit" />
                  <Right BdcRight="Execute" />
                  <Right BdcRight="SetPermissions" />
                  <Right BdcRight="SelectableInClients" />
                </AccessControlEntry>
              </AccessControlList>
            </MethodInstance>
            <MethodInstance Name="CustomerSpecificFinderInstance">
              <AccessControlList>
                <AccessControlEntry Principal="domainname\username">
                  <Right BdcRight="Edit" />
                  <Right BdcRight="Execute" />
                  <Right BdcRight="SetPermissions" />
                  <Right BdcRight="SelectableInClients" />
                </AccessControlEntry>
              </AccessControlList>
            </MethodInstance>
          </MethodInstances>
        </Method>
        <Method Name="GetSalesOrdersForCustomer">
          <AccessControlList>
            <AccessControlEntry Principal="domainname\username">
              <Right BdcRight="Edit" />
              <Right BdcRight="Execute" />
              <Right BdcRight="SetPermissions" />
              <Right BdcRight="SelectableInClients" />
            </AccessControlEntry>
          </AccessControlList>
          <Parameters>
            <Parameter Name="@IndividualID">
              <TypeDescriptor Name="IndividualID" />
            </Parameter>
            <Parameter Name="SalesOrders">
              <TypeDescriptor Name="SalesOrderDataReader">
                <TypeDescriptors>
                  <TypeDescriptor Name="SalesOrderDataRecord">
                    <TypeDescriptors>
                      <TypeDescriptor Name="SalesOrderID" />
                      <TypeDescriptor Name="OrderDate" />
                      <TypeDescriptor Name="IndividualID" />
                      <TypeDescriptor Name="SubTotal" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
        </Method>
      </Methods>
      <Actions>
        <Action Name="Send Email">
          <ActionParameters>
            <ActionParameter Name="FirstName" />
          </ActionParameters>
        </Action>
        <Action Name="View Profile">
          <ActionParameters>
            <ActionParameter Name="IndividualID" />
          </ActionParameters>
        </Action>
      </Actions>
    </Entity>
  </Entities>
  <Associations>
    <Association Name="CustomerToSalesOrder">
      <AccessControlList>
        <AccessControlEntry Principal="domainname\username">
          <Right BdcRight="Edit" />
          <Right BdcRight="Execute" />
          <Right BdcRight="SetPermissions" />
          <Right BdcRight="SelectableInClients" />
        </AccessControlEntry>
      </AccessControlList>
    </Association>
  </Associations>
</LobSystem>

Properties

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<LobSystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://schemas.microsoft.com/office/2006/03/BusinessDataCatalog BDCMetadataResource.xsd" Name="AdventureWorksSample" xmlns="https://schemas.microsoft.com/office/2006/03/BusinessDataCatalog">
  <Properties>
    <Property Name="WildcardCharacter" Type="System.String">%</Property>
  </Properties>
  <LobSystemInstances>
    <LobSystemInstance Name="AdventureWorksSampleInstance">
      <Properties>
        <Property Name="AuthenticationMode" Type="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAuthenticationMode">PassThrough</Property>
        <Property Name="DatabaseAccessProvider" Type="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAccessProvider">SqlServer</Property>
        <Property Name="RdbConnection Data Source" Type="System.String">ServerNameHere</Property>
        <Property Name="RdbConnection Initial Catalog" Type="System.String">AdventureWorks2000</Property>
        <Property Name="RdbConnection Integrated Security" Type="System.String">SSPI</Property>
        <Property Name="RdbConnection Pooling" Type="System.String">false</Property>
      </Properties>
    </LobSystemInstance>
  </LobSystemInstances>
  <Entities>
    <Entity Name="Product">
      <Properties>
        <Property Name="DefaultAction" Type="System.String">View Profile</Property>
        <Property Name="Title" Type="System.String">Name</Property>
      </Properties>
      <Identifiers>
        <Identifier Name="ProductID" />
      </Identifiers>
      <Methods>
        <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, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">Text</Property>
          </Properties>
          <FilterDescriptors>
            <FilterDescriptor Name="ID" />
            <FilterDescriptor Name="Name">
              <Properties>
                <Property Name="UsedForDisambiguation" Type="System.Boolean">true</Property>
              </Properties>
            </FilterDescriptor>
            <FilterDescriptor Name="ProductNumber" />
          </FilterDescriptors>
          <Parameters>
            <Parameter Name="@MinProductID">
              <TypeDescriptor Name="MinProductID" />
            </Parameter>
            <Parameter Name="@MaxProductID">
              <TypeDescriptor Name="MaxProductID" />
            </Parameter>
            <Parameter Name="@Name">
              <TypeDescriptor Name="Name" />
            </Parameter>
            <Parameter Name="@ProductNumber">
              <TypeDescriptor Name="ProductNumber" />
            </Parameter>
            <Parameter Name="Products">
              <TypeDescriptor Name="ProductDataReader">
                <TypeDescriptors>
                  <TypeDescriptor Name="ProductDataRecord">
                    <TypeDescriptors>
                      <TypeDescriptor Name="ProductID" />
                      <TypeDescriptor Name="Name">
                        <Properties>
                          <Property Name="DisplayByDefault" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                      <TypeDescriptor Name="ProductNumber">
                        <Properties>
                          <Property Name="DisplayByDefault" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                      <TypeDescriptor Name="ListPrice" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Name="ProductFinderInstance" />
            <MethodInstance Name="ProductSpecificFinderInstance" />
          </MethodInstances>
        </Method>
        <Method Name="ProductIDEnumerator">
          <Properties>
            <Property Name="RdbCommandText" Type="System.String">SELECT ProductID FROM Product WHERE ProductID &gt; 1200 AND ProductID &lt; 1300</Property>
            <Property Name="RdbCommandType" Type="System.Data.CommandType, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">Text</Property>
          </Properties>
          <Parameters>
            <Parameter Name="ProductIDs">
              <TypeDescriptor Name="Products">
                <TypeDescriptors>
                  <TypeDescriptor Name="Product">
                    <TypeDescriptors>
                      <TypeDescriptor Name="ProductID" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Name="ProductIDEnumeratorInstance" />
          </MethodInstances>
        </Method>
      </Methods>
      <Actions>
        <Action Name="Search on MSN">
          <ActionParameters>
            <ActionParameter Name="Name" />
          </ActionParameters>
        </Action>
        <Action Name="View Profile">
          <ActionParameters>
            <ActionParameter Name="ProductID" />
          </ActionParameters>
        </Action>
      </Actions>
    </Entity>
    <Entity Name="SalesOrder">
      <Properties>
        <Property Name="DefaultAction" Type="System.String">View Profile</Property>
      </Properties>
      <Identifiers>
        <Identifier Name="SalesOrderID" />
      </Identifiers>
      <Methods>
        <Method Name="GetSalesOrders">
          <Properties>
            <Property Name="RdbCommandText" Type="System.String">SELECT SalesOrderID, OrderDate, SubTotal, IndividualID FROM SalesOrderHeader, Individual WHERE (SalesOrderID &gt;= @MinSalesOrderID) AND (SalesOrderID &lt;= @MaxSalesOrderID) AND (SalesOrderNumber LIKE @SalesOrderNumber) AND SalesOrderHeader.CustomerID = Individual.CustomerID</Property>
            <Property Name="RdbCommandType" Type="System.Data.CommandType, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">Text</Property>
          </Properties>
          <FilterDescriptors>
            <FilterDescriptor Name="ID" />
            <FilterDescriptor Name="SalesOrderNumber" />
          </FilterDescriptors>
          <Parameters>
            <Parameter Name="@MinSalesOrderID">
              <TypeDescriptor Name="MinSalesOrderID" />
            </Parameter>
            <Parameter Name="@MaxSalesOrderID">
              <TypeDescriptor Name="MaxSalesOrderID" />
            </Parameter>
            <Parameter Name="@SalesOrderNumber">
              <TypeDescriptor Name="SalesOrderNumber" />
            </Parameter>
            <Parameter Name="SalesOrders">
              <TypeDescriptor Name="SalesOrderDataReader">
                <TypeDescriptors>
                  <TypeDescriptor Name="SalesOrderDataRecord">
                    <TypeDescriptors>
                      <TypeDescriptor Name="SalesOrderID" />
                      <TypeDescriptor Name="OrderDate">
                        <Properties>
                          <Property Name="DisplayByDefault" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                      <TypeDescriptor Name="IndividualID">
                        <Properties>
                          <Property Name="DisplayByDefault" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                      <TypeDescriptor Name="SubTotal">
                        <Properties>
                          <Property Name="DisplayByDefault" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Name="SalesOrderFinderInstance" />
            <MethodInstance Name="SalesOrderSpecificFinderInstance" />
          </MethodInstances>
        </Method>
      </Methods>
      <Actions>
        <Action Name="View Profile">
          <ActionParameters>
            <ActionParameter Name="SalesOrderID" />
          </ActionParameters>
        </Action>
      </Actions>
    </Entity>
    <Entity Name="Customer">
      <Properties>
        <Property Name="DefaultAction" Type="System.String">View Profile</Property>
        <Property Name="Title" Type="System.String">FirstName</Property>
      </Properties>
      <Identifiers>
        <Identifier Name="IndividualID" />
      </Identifiers>
      <Methods>
        <Method Name="GetCustomers">
          <Properties>
            <Property Name="RdbCommandText" Type="System.String">SELECT * FROM Individual WHERE (IndividualID &gt;= @MinIndividualID) AND (IndividualID &lt;= @MaxIndividualID) AND ((FirstName+' '+LastName) LIKE @Name)</Property>
            <Property Name="RdbCommandType" Type="System.Data.CommandType, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">Text</Property>
          </Properties>
          <FilterDescriptors>
            <FilterDescriptor Name="ID" />
            <FilterDescriptor Name="Name" />
          </FilterDescriptors>
          <Parameters>
            <Parameter Name="@MinIndividualID">
              <TypeDescriptor Name="MinIndividualID" />
            </Parameter>
            <Parameter Name="@MaxIndividualID">
              <TypeDescriptor Name="MaxIndividualID" />
            </Parameter>
            <Parameter Name="@Name">
              <TypeDescriptor Name="Name" />
            </Parameter>
            <Parameter Name="Customers">
              <TypeDescriptor Name="CustomerDataReader">
                <TypeDescriptors>
                  <TypeDescriptor Name="CustomerDataRecord">
                    <TypeDescriptors>
                      <TypeDescriptor Name="IndividualID" />
                      <TypeDescriptor Name="FirstName">
                        <Properties>
                          <Property Name="DisplayByDefault" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                      <TypeDescriptor Name="LastName">
                        <Properties>
                          <Property Name="DisplayByDefault" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Name="CustomerFinderInstance" />
            <MethodInstance Name="CustomerSpecificFinderInstance" />
          </MethodInstances>
        </Method>
        <Method Name="GetSalesOrdersForCustomer">
          <Properties>
            <Property Name="RdbCommandText" Type="System.String">SELECT SalesOrderID, OrderDate, SubTotal,Individual.IndividualID FROM SalesOrderHeader,Individual WHERE SalesOrderHeader.CustomerID=Individual.CustomerID and Individual.IndividualID=@IndividualID</Property>
            <Property Name="RdbCommandType" Type="System.Data.CommandType, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">Text</Property>
          </Properties>
          <Parameters>
            <Parameter Name="@IndividualID">
              <TypeDescriptor Name="IndividualID" />
            </Parameter>
            <Parameter Name="SalesOrders">
              <TypeDescriptor Name="SalesOrderDataReader">
                <TypeDescriptors>
                  <TypeDescriptor Name="SalesOrderDataRecord">
                    <TypeDescriptors>
                      <TypeDescriptor Name="SalesOrderID" />
                      <TypeDescriptor Name="OrderDate">
                        <Properties>
                          <Property Name="DisplayByDefault" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                      <TypeDescriptor Name="IndividualID">
                        <Properties>
                          <Property Name="DisplayByDefault" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                      <TypeDescriptor Name="SubTotal">
                        <Properties>
                          <Property Name="DisplayByDefault" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
        </Method>
      </Methods>
      <Actions>
        <Action Name="Send Email">
          <ActionParameters>
            <ActionParameter Name="FirstName" />
          </ActionParameters>
        </Action>
        <Action Name="View Profile">
          <ActionParameters>
            <ActionParameter Name="IndividualID" />
          </ActionParameters>
        </Action>
      </Actions>
    </Entity>
  </Entities>
  <Associations>
    <Association Name="CustomerToSalesOrder" />
  </Associations>
</LobSystem>