Compartir a través de


Archivos de modelo y de recursos

Última modificación: jueves, 15 de abril de 2010

Hace referencia a: SharePoint Server 2010

Servicio de conectividad de datos profesionales (BDC) es compatible con dos tipos de archivos de definición de aplicaciones XML: modelo y recurso. Un archivo de definición de tipo modelo contiene los metadatos XML básicos para un sistema. Un archivo de tipo recurso permite importar y exportar sólo los nombres localizados, las propiedades y los permisos, en cualquier combinación. A continuación, se muestran los tipos de archivos de recursos:

  • LocalizedNames   Contiene los nombres localizados de los objetos de metadatos en una configuración regional determinada. Al importar este archivo, su información se combina con los metadatos existentes en el repositorio de metadatos. Si ya existe un nombre localizado para la configuración regional, se sobrescribe con la información del archivo LocalizedNames.

  • Properties   Contiene propiedades para los objetos de metadatos. Al importar este archivo, su información se combina con los metadatos existentes en el repositorio de metadatos. Si una propiedad ya existe, su valor se sobrescribe con la información del archivo Properties.

  • Permissions   Contiene listas de control de acceso (ACL) para los objetos de los metadatos. Al importar este archivo, su información se combina con los metadatos existentes en el repositorio de metadatos. Sin embargo, si ya existe una entrada de control de acceso (ACE) para un objeto, su valor se sobrescribe con la información del archivo Permissions. Por ejemplo, si la definición de la aplicación existente sólo tiene un Usuario A con acceso a la Entidad A, y se importa un archivo Permissions que sólo tiene al Usuario B con acceso a la Entidad A, entonces, se elimina la ACL existente para la Entidad A y se crea una con el Usuario B solamente.

Si importa un archivo de modelo para una aplicación, BDC sobrescribe los metadatos existentes para esa aplicación. Sin embargo, si importa archivos de recursos que contienen nombres localizados, propiedades o permisos, en cualquier combinación, BDC realiza una operación de combinación. Combina los contenidos del archivo de recursos con los metadatos ya existentes para esa aplicación.

Esto resulta extremadamente útil en determinadas situaciones, por ejemplo, si ya importó un archivo de definición de la aplicación para un sistema complejo de planeación de recursos empresariales (ERP). Tenga en cuenta las siguientes tres situaciones:

  • La información de conexión back-end cambia. Para actualizar la información de conexión, puede crear un archivo de recursos de propiedades simple que incluya sólo las propiedades modificadas en el objeto LobSystemInstance y luego importar este archivo. El BDC combinará esta información con las propiedades LobSystemInstance existentes y, si ya existe una propiedad, su valor se sobrescribirá con la nueva información del archivo de recursos de propiedades.

  • La compañía se diversificó en una nueva región y la aplicación debe admitir ahora un nuevo idioma localizado. En este caso, puede crear un archivo de recursos LocalizedNames que sólo contenga los nombres localizados de este nuevo idioma y luego importarlo. BDC combinará esta información con los metadatos existentes, lo cual solucionará este problema.

  • Una franquicia tiene que usar la aplicación en su entorno. En este caso, pueden crear un archivo de recursos de permisos que contenga sólo las ACL para los usuarios en su franquicia y luego importar ese archivo. BDC eliminará las ACL existentes y creará las ACL con la información nueva, lo cual solucionará este problema.

El uso de archivos de recursos, tal como se comenta en las situaciones anteriores, es un mejor enfoque que la actualización del archivo de modelo. Si en su lugar actualizara el archivo de modelo con las propiedades o los nombres localizados, BDC sobrescribiría los metadatos existentes con la nueva información eliminando los metadatos existentes. Es posible que esto no siempre sea aconsejable y puede implicar algunas pruebas y esfuerzos adicionales. Por ejemplo, cada vez que se importa el archivo de modelo, BDC elimina todos los objetos de los metadatos y sus identificadores y, por lo tanto, requiere un rastreo completo de los objetos de metadatos para la búsqueda.

Nota importanteImportante

Un archivo de definición de una aplicación única puede contener cualquier combinación de archivos de recursos y archivos de modelo. La Administración central de SharePoint admite esta posibilidad en la interfaz de usuario de importación y exportación, y el modelo de objetos la admite mediante el uso de operadores OR bit a bit (|).

Ejemplos de código

La forma más fácil de comprender la característica del archivo de definiciones de aplicación es experimentar con la opción de definición de la aplicación Exportar en la interfaz del usuario de la Administración central de SharePoint. La opción de definición de la aplicación Exportar permite exportar metadatos en cualquier combinación de archivos de modelo o de recursos.

Los siguientes ejemplos muestran los metadatos de permisos y propiedades para los metadatos de AdventureWorks2000.

Nota

En los ejemplos, se reemplazan los valores específicos para el nombre de dominio y nombre de usuario por los valores genéricos.

Permisos

El código XML siguiente muestra un ejemplo de un archivo de recursos que contiene permisos.

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

Propiedades

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