Model ファイルと Resource ファイル

最終更新日: 2010年4月15日

適用対象: SharePoint Server 2010

Business Data Connectivity (BDC) service で、Model および Resource という 2 種類の XML アプリケーション定義ファイルがサポートされるようになりました。Model 定義ファイルには、システムの基本 XML メタデータが含まれます。Resource ファイルを使用すると、ローカライズされた名前、プロパティ、および権限のみを、任意の組み合わせでインポートまたはエクスポートできます。以下に Resource ファイルの種類を示します。

  • LocalizedNames   特定のロケールにおけるメタデータ オブジェクトのローカライズされた名前が格納されています。このファイルをインポートすると、それらの情報はメタデータ ストア内の既存のメタデータと結合されます。そのロケール用にローカライズされた名前が既に存在する場合、LocalizedNames ファイルの情報で上書きされます。

  • Properties   メタデータ オブジェクトのプロパティが格納されています。このファイルをインポートすると、それらの情報はメタデータ ストア内の既存のメタデータと結合されます。プロパティが既に存在する場合、プロパティの値は Properties ファイルの情報で上書きされます。

  • Permissions   メタデータ オブジェクトのアクセス制御リスト (ACL) が格納されています。このファイルをインポートすると、それらの情報はメタデータ ストア内の既存のメタデータと結合されます。ただし、オブジェクトのアクセス制御エントリ (ACE) が既に存在する場合、ACE の値は Permissions ファイルの情報で上書きされます。たとえば、既存のアプリケーション定義に、エンティティ A へのアクセスを持つユーザー A のみがある場合、エンティティ A へのアクセスを持つユーザー B のみがある Permissions ファイルをインポートすると、エンティティ A の既存の ACL は削除され、ユーザー B のみがある ACL が作成されます。

アプリケーションの Model ファイルをインポートすると、そのアプリケーションの既存のメタデータは BDC によって上書きされます。ただし、ローカライズされた名前、プロパティ、または権限を含む Resource ファイルを任意の組み合わせでインポートすると、BDC は結合操作を実行します。Resource ファイルの内容が、そのアプリケーションのために既に存在するメタデータと結合されます。

この動作は、一定の状況で非常に便利です。たとえば、複雑な ERP システムのアプリケーション定義ファイルを既にインポートしたとします。ここで、以下の 3 つの状況について考えてみましょう。

  • バックエンドの接続情報に変更があります。接続情報を更新するため、LobSystemInstance オブジェクトで変更されたプロパティだけを含む簡単な Properties Resource ファイルを作成し、それをインポートすることができます。BDC により、この情報が既存の LobSystemInstance プロパティと結合されるので、プロパティが既に存在する場合、プロパティの値は Properties Resource ファイルの新しい情報で上書きされます。

  • 会社が新しい地域に進出したため、新しくローカライズされた言語をアプリケーションでサポートする必要が生じました。この場合、新しい言語のためにローカライズされた名前だけを含む LocalizedNames Resource ファイルを作成し、そのファイルをインポートすることができます。この情報は BDC によって既存のメタデータと結合されるので、この課題は解決されます。

  • チェーン店の環境で、あるアプリケーションを使用する必要があります。この場合、チェーン店側で、チェーン店に属するユーザーの ACL だけを含む Permissions Resource ファイルを作成し、そのファイルをインポートすることができます。既存の ACL は BDC によって削除され、新しい情報で ACL が作成されるので、この課題は解決されます。

上の状況で説明したように Resource ファイルを使用することは、Model ファイルを更新するより適切な方法です。そのようにせず、ローカライズされた名前やプロパティを使って Model ファイルを更新すると、BDC は既存のメタデータを削除することによって新しいデータで既存のメタデータを上書きすることになります。この動作は望ましくない場合もあり、テストなどの作業が追加で必要になる可能性があります。たとえば、Model ファイルをインポートするたびに、すべてのメタデータ オブジェクトとそれらの ID が BDC によって削除されるため、検索のためにメタデータ オブジェクトのフル クロールが必要になります。

重要重要

1 つのアプリケーション定義ファイルには、Model ファイルと Resource ファイルを任意に組み合わせて含めることができます。組み合わせての使用は、SharePoint サーバーの全体管理ではインポートとエクスポートのユーザー インターフェイス (UI) で、オブジェクト モデルではビット演算子の OR (|) を使用してサポートされています。

コード例

アプリケーション定義ファイルの機能を理解する最も簡単な方法は、SharePoint サーバーの全体管理の UI に用意されている [エクスポート] アプリケーション定義オプションを使用して実験してみることです。[エクスポート] アプリケーション定義オプションを使用すると、Model ファイルと Resource ファイルを任意に組み合わせてメタデータをエクスポートできます。

以下の例は、AdventureWorks2000 メタデータの、Permissions メタデータと Properties メタデータを示しています。

注意

下記の例では、ドメイン名とユーザー名の具体的な値は、一般的な値で置き換えてあります。

権限

以下の 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>

プロパティ

<?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>