SampleWebService Metadata

This topic contains the complete XML metadata for the Sample Web Service. As you know, it illustrates several complex Web service-related concepts in the Business Data Catalog. To better understand the sample, follow the walkthrough steps and review the comments in the SampleWebService metadata XML.

The source for the SampleWebService Web service is also included in the Microsoft Office SharePoint Server 2007 SDK download. Before importing the metadata, publish it on a Web server and update the WSDLFetchURL property accordingly.

Metadata

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- This XML defines the metadata for the SampleWebService Web 
service defined in the SDK. This demonstrates several complex concepts 
related to metadata authoring.-->
<!-- The Business Data Catalog uses the LOB system name as the 
application name in the Administation user interface.-->
<LobSystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://schemas.microsoft.com/office/2006/03/BusinessDataCatalog BDCMetadata.xsd" Type="WebService" Version="1.0.0.0" Name="SampleWebService" xmlns="https://schemas.microsoft.com/office/2006/03/BusinessDataCatalog">
  <Properties>
    <!-- The Web Service proxy namespace name you specify here 
     is used by the Business Data Catalog when it generates the 
     proxy.-->
    <Property Name="WebServiceProxyNamespace" Type="System.String">SampleWebServiceProxy</Property>
    <!-- Enter the wildcard character that your Web methods 
     support. The Business Data Catalog uses the wildcard 
     character with filters.-->
    <Property Name="WildcardCharacter" Type="System.String">$</Property>
    <!-- URL to WSDL or ASMX.-->
    <Property Name="WsdlFetchUrl" Type="System.String">http://YourWebServerName/Service.asmx</Property>
  </Properties>
  <LobSystemInstances>
    <!-- The LOB instance name is used by business data clients in the 
     entity picker, and so on.-->
    <LobSystemInstance Name="SampleWebServiceInstance">
      <Properties>
        <Property Name="LobSystemName" Type="System.String">SampleWebService</Property>
      </Properties>
    </LobSystemInstance>
  </LobSystemInstances>
  <Entities>
    <!-- Defines the entity called Address. The Address structure is 
    part of the customer structure returned by the GetCustomerByID Web 
    method.-->
    <!-- By defining an entity for Address, we can model an association 
    and return the addresses for each customer.-->
    <!-- Because this entity is used only in association methods, we 
    do not need any other methods.-->
    <!-- The association method reuses the GetCustomerByID method of 
    the Customer entity to return the address collection.-->
    <Entity EstimatedInstanceCount="10000" Name="Address">
      <Properties>
        <Property Name="Title" Type="System.String">StateProvince</Property>
      </Properties>
      <!--This entity does not have any identifier as we just want to 
      display a list of addresses for a customer. -->
      <!--This means that it's just a blob of data - you cannot run 
      actions on this entity, use the entity instance picker, relate 
      with it, cannot search or crawl it, and so on. -->
      <Methods>
        <!-- Dummy finder for Address entity. -->
        <Method Name="GetAddresses">
          <Parameters>
            <Parameter Direction="Return" Name="Addresses">
              <TypeDescriptor TypeName="SampleWebServiceProxy.CustomerAddress[], SampleWebService" IsCollection="true" Name="CustomerAddresses" >
                <TypeDescriptors>
                  <TypeDescriptor TypeName="SampleWebServiceProxy.CustomerAddress, SampleWebService" Name="CustomerAddress" >
                    <Properties>
                      <Property Name="ComplexFormatting" Type="System.String" />
                      <Property Name="FormatString" Type="System.String">{0}, {1}, {2}, {3} - PostalCode, {4}</Property>
                    </Properties>
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="SampleWebServiceProxy.CustomerStreet, SampleWebService" Name="Street">
                        <TypeDescriptors>
                          <TypeDescriptor TypeName="System.String" Name="BlockNumber" />
                          <TypeDescriptor TypeName="System.String" Name="Street" />
                        </TypeDescriptors>
                      </TypeDescriptor>
                      <TypeDescriptor TypeName="System.String" Name="City" />
                      <TypeDescriptor TypeName="System.String" Name="StateProvince" />
                      <TypeDescriptor TypeName="System.String" Name="CountryRegion" />
                      <TypeDescriptor TypeName="System.String" Name="PostalCode" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="Finder" ReturnParameterName="Addresses" ReturnTypeDescriptorName="CustomerAddresses" ReturnTypeDescriptorLevel="0" Name="GetAddressesInstance" />
          </MethodInstances>
        </Method>
      </Methods>
    </Entity>
    <!-- The Customer entity has IDEnumerator, 
    Finder, and SpecificFinder.-->
    <!-- The Customer return structure from the Web method 
    GetCustomerByID also contains an address collection that is used 
    to get addresses for a customer.-->
    <!-- The Customer entity also demonstrates the self-referential entity 
    association concept - cusomers have child customers. The 
    GetChildCustomersForCustomer method is the association method.-->
    <Entity EstimatedInstanceCount="10000" Name="Customer">
      <Properties>
        <Property Name="Title" Type="System.String">Name</Property>
      </Properties>
      <Identifiers>
        <Identifier TypeName="System.String" Name="CustomerID" />
      </Identifiers>
      <Methods>
        <!--Demonstrates the self-referential entity association 
        concept.-->
        <!--Each customer in the back-end data source has a 
        ParentCustomerID.-->
        <Method Name="GetChildCustomersForCustomer">
          <Parameters>
            <!--Parameter names are tokens used by the Business 
            Data Catalog. You can name them anything.-->
            <!--TypeDescriptor names must match the back-end input and 
            output structures' or fields' names.-->
            <Parameter Direction="In" Name="custid">
              <TypeDescriptor TypeName="System.String" IdentifierName="CustomerID" Name="custid" />
            </Parameter>
            <Parameter Direction="Return" Name="Customers">
              <!-- The TypeName attribute takes the type and the LOB 
              system name for complex types.-->
              <!-- The IsCollection is true here because the customer 
              array is a collection of customers.-->
              <!-- The TypeDescriptor with IsCollection= true can have 
              only one child.-->
              <TypeDescriptor TypeName="SampleWebServiceProxy.Customer[], SampleWebService" IsCollection="true" Name="ArrayOfCustomer">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="SampleWebServiceProxy.Customer, SampleWebService" Name="Customer">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.String" IdentifierName="CustomerID" Name="CustomerID" />
                      <TypeDescriptor TypeName="System.String" Name="Name" />
                      <TypeDescriptor TypeName="System.Int64" Name="WorkPhoneNumber" />
                      <TypeDescriptor TypeName="System.Int64" Name="MobilePhoneNumber" />
                      <TypeDescriptor TypeName="System.String" Name="Industry" />
                      <TypeDescriptor TypeName="System.String" Name="WebSite" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
        </Method>
        <Method Name="GetCustomerIDs">
          <Parameters>
            <Parameter Direction="Return" Name="CustomerIDs">
              <TypeDescriptor TypeName="System.String[]" IsCollection="true" Name="ArrayOfString">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="System.String" IdentifierName="CustomerID" Name="CustomerID" />
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="IdEnumerator" ReturnParameterName="CustomerIDs" ReturnTypeDescriptorName="ArrayOfString" ReturnTypeDescriptorLevel="0" Name="GetCustomerIDsInstance" />
          </MethodInstances>
        </Method>
        <Method Name="GetCustomers">
          <FilterDescriptors>
            <FilterDescriptor Type="Wildcard" Name="Name" />
            <!-- Limit filter tells Business Data Catalog to bring back 
            only the specified number of rows back from the LOB 
            application.-->
            <!-- Notice that the back-end method should support this 
            functionality to return only the specified number of rows. 
            For a sample, see SampleWebService.-->
            <FilterDescriptor Type="Limit" Name="Limit" />
          </FilterDescriptors>
          <Parameters>
            <Parameter Direction="In" Name="name">
              <TypeDescriptor TypeName="System.String" AssociatedFilter="Name" Name="name" />
            </Parameter>
            <Parameter Direction="In" Name="limit">
              <TypeDescriptor TypeName="System.Int32" AssociatedFilter="Limit" Name="limit" />
            </Parameter>
            <Parameter Direction="Return" Name="Customers">
              <TypeDescriptor TypeName="SampleWebServiceProxy.Customer[], SampleWebService" IsCollection="true" Name="ArrayOfCustomer">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="SampleWebServiceProxy.Customer, SampleWebService" Name="Customer">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.String" IdentifierName="CustomerID" Name="CustomerID" />
                      <TypeDescriptor TypeName="System.String" Name="Name" />
                      <TypeDescriptor TypeName="System.Int64" Name="WorkPhoneNumber" />
                      <TypeDescriptor TypeName="System.Int64" Name="MobilePhoneNumber" />
                      <TypeDescriptor TypeName="System.String" Name="Industry" />
                      <TypeDescriptor TypeName="System.String" Name="WebSite" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="Finder" ReturnParameterName="Customers" ReturnTypeDescriptorName="ArrayOfCustomer" ReturnTypeDescriptorLevel="0" Name="FindCustomerInstances" />
          </MethodInstances>
        </Method>
        <Method Name="GetCustomerByID">
          <!--SpecificFinder for customer.-->
          <!--The GetCustomerByID is also reused as an association method for getting addresses of a customer.-->
          <Parameters>
            <Parameter Direction="In" Name="id">
              <TypeDescriptor TypeName="System.String" IdentifierName="CustomerID" Name="id" />
            </Parameter>
            <Parameter Direction="Return" Name="Customer">
              <TypeDescriptor TypeName="SampleWebServiceProxy.Customer, SampleWebService" Name="Customer">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="System.String" IdentifierName="CustomerID" Name="CustomerID" />
                  <TypeDescriptor TypeName="System.String" Name="Name" />
                  <TypeDescriptor TypeName="System.Int64" Name="WorkPhoneNumber" />
                  <TypeDescriptor TypeName="System.Int64" Name="MobilePhoneNumber" />
                  <TypeDescriptor TypeName="System.String" Name="Industry" />
                  <TypeDescriptor TypeName="System.String" Name="WebSite" />
                  <!--The Customer structure also contains a collection 
                  of addresses for the customer. -->
                  <!--Return parameters can have multiple TypeDescriptors with IsCollection=true. This is an example of that.-->
                  <!--When Business Data Caltalog executes the SpecificFinder, it ignores the addresses collection because it is a collection.-->
                  <!--When this same method is used to get addresses for a customer in an association, the return TypeDecriptor name is specified as CustomerAddresses.-->
                  <TypeDescriptor TypeName="SampleWebServiceProxy.CustomerAddress[], SampleWebService" IsCollection="true" Name="CustomerAddresses" >
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="SampleWebServiceProxy.CustomerAddress, SampleWebService" Name="CustomerAddress" >
                        <Properties>
                          <!--Business Data clients can display only primitives and flat structures by default.-->
                          <!--To display the Street structure that is part of the Address, we use ComplexFormatting.-->
                          <!--To use ComplexFormatting, you must 
                          enable it at the TypeDescriptor that 
                          contains the struct as shown below.-->
                          <Property Name="ComplexFormatting" Type="System.String" />
                        </Properties>
                        <TypeDescriptors>
                          <TypeDescriptor TypeName="SampleWebServiceProxy.CustomerStreet, SampleWebService" Name="Street">
                            <Properties>
                              <!--After ComplexFormatting is 
                              enabled in the container of this struct, 
                              define the format here.-->
                              <!--{0}, {1} stand for BlockNumber and Street of the Street struct. -->
                              <Property Name="FormatString" Type="System.String">{0}, {1}</Property>
                            </Properties>
                            <TypeDescriptors>
                              <TypeDescriptor TypeName="System.String" Name="BlockNumber" />
                              <TypeDescriptor TypeName="System.String" Name="Street" />
                            </TypeDescriptors>
                          </TypeDescriptor>
                          <TypeDescriptor TypeName="System.String" Name="City" />
                          <TypeDescriptor TypeName="System.String" Name="StateProvince" />
                          <TypeDescriptor TypeName="System.String" Name="CountryRegion" />
                          <TypeDescriptor TypeName="System.String" Name="PostalCode" />
                        </TypeDescriptors>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="SpecificFinder" ReturnParameterName="Customer" ReturnTypeDescriptorName="Customer" ReturnTypeDescriptorLevel="0" Name="FindCustomerInstance" />
            <!--Association is defined at the bottom.-->
          </MethodInstances>
        </Method>
      </Methods>
    </Entity>
    <Entity EstimatedInstanceCount="10000" Name="Region">
      <Properties>
        <Property Name="Title" Type="System.String">Name</Property>
      </Properties>
      <Identifiers>
        <Identifier TypeName="System.String" Name="RegionID" />
      </Identifiers>
      <Methods>
        <Method Name="GetRegions">
          <FilterDescriptors>
            <FilterDescriptor Type="Wildcard" Name="Name" />
          </FilterDescriptors>
          <Parameters>
            <Parameter Direction="In" Name="name">
              <TypeDescriptor TypeName="System.String" AssociatedFilter="Name" Name="name" />
            </Parameter>
            <Parameter Direction="Return" Name="Regions">
              <TypeDescriptor TypeName="SampleWebServiceProxy.Region[], SampleWebService" IsCollection="true" Name="ArrayOfRegion">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="SampleWebServiceProxy.Region, SampleWebService" Name="Region">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.String" IdentifierName="RegionID" Name="RegionID" />
                      <TypeDescriptor TypeName="System.String" Name="Name" />
                      <TypeDescriptor TypeName="System.String" Name="Group" />
                      <TypeDescriptor TypeName="System.Decimal" Name="SalesLastYear" />
                      <TypeDescriptor TypeName="System.Decimal" Name="SalesYTD" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="Finder" ReturnParameterName="Regions" ReturnTypeDescriptorName="ArrayOfRegion" ReturnTypeDescriptorLevel="0" Name="FindRegionInstances" />
          </MethodInstances>
        </Method>
        <Method Name="GetRegionByID">
          <Parameters>
            <Parameter Direction="In" Name="id">
              <TypeDescriptor TypeName="System.String" IdentifierName="RegionID" Name="id" />
            </Parameter>
            <Parameter Direction="Return" Name="Region">
              <TypeDescriptor TypeName="SampleWebServiceProxy.Region, SampleWebService" Name="Region">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="System.String" IdentifierName="RegionID" Name="RegionID" />
                  <TypeDescriptor TypeName="System.String" Name="Name" />
                  <TypeDescriptor TypeName="System.String" Name="Group" />
                  <TypeDescriptor TypeName="System.Decimal" Name="SalesLastYear" />
                  <TypeDescriptor TypeName="System.Decimal" Name="SalesYTD" />
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="SpecificFinder" ReturnParameterName="Region" ReturnTypeDescriptorName="Region" ReturnTypeDescriptorLevel="0" Name="FindRegionInstance" />
          </MethodInstances>
        </Method>
      </Methods>
    </Entity>
    <Entity EstimatedInstanceCount="10000" Name="Order">
      <Properties>
        <Property Name="Title" Type="System.String">OrderID</Property>
      </Properties>
      <Identifiers>
        <Identifier TypeName="System.String" Name="OrderID" />
      </Identifiers>
      <Methods>
        <!--Association method - Demonstrates an assoication that has 
        two sources - Customer and Region.-->
        <!--Also demonstrates that you can have filters in association 
        methods as well.-->
        <Method Name="GetOrdersForCustomerAndRegion">
          <FilterDescriptors>
            <FilterDescriptor Type="Comparison" Name="CurrencyCode" >
              <Properties>
                <Property Name="Comparator" Type="System.String">Equals</Property>
              </Properties>
            </FilterDescriptor>
          </FilterDescriptors>
          <Parameters>
            <Parameter Direction="In" Name="custid">
              <!--Specify the IdentifierEntityName when the identifier 
              you want to point to is not in the local entity. -->
              <!--In this case, the input parameters for this 
              association are the foreign keys from the Customer and 
              Region entities.-->
              <TypeDescriptor TypeName="System.String" IdentifierName="CustomerID" IdentifierEntityName="Customer" Name="custid" />
            </Parameter>
            <Parameter Direction="In" Name="regid">
              <TypeDescriptor TypeName="System.String" IdentifierName="RegionID" IdentifierEntityName="Region" Name="regid" />
            </Parameter>
            <Parameter Direction="In" Name="curcode">
              <TypeDescriptor TypeName="System.String" AssociatedFilter="CurrencyCode" Name="curcode" />
            </Parameter>
            <Parameter Direction="Return" Name="Orders">
              <TypeDescriptor TypeName="SampleWebServiceProxy.Order[], SampleWebService" IsCollection="true" Name="ArrayOfOrder">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="SampleWebServiceProxy.Order, SampleWebService" Name="Order">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.String" IdentifierName="OrderID" Name="OrderID" />
                      <TypeDescriptor TypeName="System.String" Name="CustomerID" />
                      <TypeDescriptor TypeName="System.String" Name="RegionID" />
                      <TypeDescriptor TypeName="System.String" Name="CurrencyCode" />
                      <TypeDescriptor TypeName="System.Decimal" Name="SubTotal" />
                      <TypeDescriptor TypeName="System.String" Name="OrderDate" />
                      <TypeDescriptor TypeName="System.String" Name="ShipDate" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
        </Method>
        <Method Name="GetOrderByID">
          <Parameters>
            <Parameter Direction="In" Name="id">
              <TypeDescriptor TypeName="System.String" IdentifierName="OrderID" Name="id" />
            </Parameter>
            <Parameter Direction="Return" Name="Order">
              <TypeDescriptor TypeName="SampleWebServiceProxy.Order, SampleWebService" Name="Order">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="System.String" IdentifierName="OrderID" Name="OrderID" />
                  <TypeDescriptor TypeName="System.String" Name="CustomerID" />
                  <TypeDescriptor TypeName="System.String" Name="RegionID" />
                  <TypeDescriptor TypeName="System.String" Name="CurrencyCode" />
                  <TypeDescriptor TypeName="System.Decimal" Name="SubTotal" />
                  <TypeDescriptor TypeName="System.String" Name="OrderDate" />
                  <TypeDescriptor TypeName="System.String" Name="ShipDate" />
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="SpecificFinder" ReturnParameterName="Order" ReturnTypeDescriptorName="Order" ReturnTypeDescriptorLevel="0" Name="FindOrderInstance" />
          </MethodInstances>
        </Method>
        <Method Name="GetOrders">
          <Parameters>
            <Parameter Direction="Return" Name="Orders">
              <TypeDescriptor TypeName="SampleWebServiceProxy.Order[], SampleWebService" IsCollection="true" Name="ArrayOfOrder">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="SampleWebServiceProxy.Order, SampleWebService" Name="Order">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.String" IdentifierName="OrderID" Name="OrderID" />
                      <TypeDescriptor TypeName="System.String" Name="CustomerID" />
                      <TypeDescriptor TypeName="System.String" Name="RegionID" />
                      <TypeDescriptor TypeName="System.String" Name="CurrencyCode" />
                      <TypeDescriptor TypeName="System.Decimal" Name="SubTotal" />
                      <TypeDescriptor TypeName="System.String" Name="OrderDate" />
                      <TypeDescriptor TypeName="System.String" Name="ShipDate" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="Finder" ReturnParameterName="Orders" ReturnTypeDescriptorName="ArrayOfOrder" ReturnTypeDescriptorLevel="0" Name="FindOrderInstances" />
          </MethodInstances>
        </Method>
      </Methods>
    </Entity>
    <!--This entity demonstrates the use of multiple 
    identifiers.-->
    <!--OrderID is a foriegn key from Order.-->
    <Entity EstimatedInstanceCount="10000" Name="LineItem">
      <Properties>
        <Property Name="Title" Type="System.String">ProductName</Property>
      </Properties>
      <Identifiers>
        <Identifier TypeName="System.String" Name="OrderID" />
        <Identifier TypeName ="System.String" Name="ProductID" />
      </Identifiers>
      <Methods>
        <Method Name="GetLineItemsForOrder">
          <Parameters>
            <Parameter Direction="In" Name="ordid">
              <TypeDescriptor TypeName="System.String" IdentifierName="OrderID" IdentifierEntityName="Order" Name="ordid" />
            </Parameter>
            <Parameter Direction="Return" Name="LineItems">
              <TypeDescriptor TypeName="SampleWebServiceProxy.LineItem[], SampleWebService" IsCollection="true" Name="ArrayOfLineItem">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="SampleWebServiceProxy.LineItem, SampleWebService" Name="LineItem">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.String" IdentifierName="OrderID" Name="OrderID" />
                      <TypeDescriptor TypeName="System.String" IdentifierName="ProductID" Name="ProductID" />
                      <TypeDescriptor TypeName="System.String" Name="ProductName" />
                      <TypeDescriptor TypeName="System.Int32" Name="OrderQty" />
                      <TypeDescriptor TypeName="System.Decimal" Name="UnitPrice" />
                      <TypeDescriptor TypeName="System.Decimal" Name="LineTotal" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
        </Method>
        <Method Name="GetLineItemByID">
          <Parameters>
            <Parameter Direction="In" Name="ordid">
              <TypeDescriptor TypeName="System.String" IdentifierName="OrderID" Name="ordid" />
            </Parameter>
            <Parameter Direction="In" Name="prodid">
              <TypeDescriptor TypeName="System.String" IdentifierName="ProductID" Name="prodid" />
            </Parameter>
            <Parameter Direction="Return" Name="LineItem">
              <TypeDescriptor TypeName="SampleWebServiceProxy.LineItem, SampleWebService" Name="LineItem">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="System.String" IdentifierName="OrderID" Name="OrderID" />
                  <TypeDescriptor TypeName="System.String" IdentifierName="ProductID" Name="ProductID" />
                  <TypeDescriptor TypeName="System.String" Name="ProductName" />
                  <TypeDescriptor TypeName="System.Int32" Name="OrderQty" />
                  <TypeDescriptor TypeName="System.Decimal" Name="UnitPrice" />
                  <TypeDescriptor TypeName="System.Decimal" Name="LineTotal" />
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="SpecificFinder" ReturnParameterName="LineItem" ReturnTypeDescriptorName="LineItem" ReturnTypeDescriptorLevel="0" Name="FindLineItemInstance" />
          </MethodInstances>
        </Method>
        <Method Name="GetLineItems">
          <Parameters>
            <Parameter Direction="Return" Name="LineItems">
              <TypeDescriptor TypeName="SampleWebServiceProxy.LineItem[], SampleWebService" IsCollection="true" Name="ArrayOfLineItem">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="SampleWebServiceProxy.LineItem, SampleWebService" Name="LineItem">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.String" IdentifierName="OrderID" Name="OrderID" />
                      <TypeDescriptor TypeName="System.String" IdentifierName="ProductID" Name="ProductID" />
                      <TypeDescriptor TypeName="System.String" Name="ProductName" />
                      <TypeDescriptor TypeName="System.Int32" Name="OrderQty" />
                      <TypeDescriptor TypeName="System.Decimal" Name="UnitPrice" />
                      <TypeDescriptor TypeName="System.Decimal" Name="LineTotal" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="Finder" ReturnParameterName="LineItems" ReturnTypeDescriptorName="ArrayOfLineItem" ReturnTypeDescriptorLevel="0" Name="FindLineItemInstances" />
          </MethodInstances>
        </Method>
      </Methods>
    </Entity>
  </Entities>
  <Associations>
    <!--Self-refential entity association.-->
    <Association Name="CustomerToChildCustomers" AssociationMethodEntityName="Customer" AssociationMethodName="GetChildCustomersForCustomer" AssociationMethodReturnParameterName="Customers" AssociationMethodReturnTypeDescriptorName="ArrayOfCustomer" AssociationMethodReturnTypeDescriptorLevel="0">
      <SourceEntity Name="Customer" />
      <DestinationEntity Name="Customer" />
    </Association>
    <!--Multiple source association.-->
    <Association Name="CustomerAndRegionToOrders" AssociationMethodEntityName="Order" AssociationMethodName="GetOrdersForCustomerAndRegion" AssociationMethodReturnParameterName="Orders" AssociationMethodReturnTypeDescriptorName="ArrayOfOrder" AssociationMethodReturnTypeDescriptorLevel="0">
      <SourceEntity Name="Customer" />
      <SourceEntity Name="Region" />
      <DestinationEntity Name="Order" />
    </Association>
    <Association Name="OrderToLineItems" AssociationMethodEntityName="LineItem" AssociationMethodName="GetLineItemsForOrder" AssociationMethodReturnParameterName="LineItems" AssociationMethodReturnTypeDescriptorName="ArrayOfLineItem" AssociationMethodReturnTypeDescriptorLevel="0">
      <SourceEntity Name="Order" />
      <DestinationEntity Name="LineItem" />
    </Association>
    <!--Reuses the Web method used for SpecificFinder, also an 
    association method. Uses only a part of the return structure by 
    using the optional AssociationMethodReturnTypeDescriptorName 
    attribute. ArrayOfCustomer is 0 and CustomerAddresses is 1. Only 
    useful to disambiguate same-named TypeDescriptors.-->
    <!--The AssociationMethodReturnTypeDescriptorLevel optional 
    attribute indicates the level of the TypeDescriptor in the 
    return structure. -->
    <Association Name="CustomerToAddresses" AssociationMethodEntityName="Customer" AssociationMethodName="GetCustomerByID" AssociationMethodReturnParameterName="Customer" AssociationMethodReturnTypeDescriptorName="CustomerAddresses" AssociationMethodReturnTypeDescriptorLevel="1">
      <SourceEntity Name="Customer" />
      <DestinationEntity Name="Address" />
    </Association>
  </Associations>
</LobSystem>

See Also

Tasks

AdventureWorks SQL Server 2000 Sample
AdventureWorksDW SQL Server 2005 Sample