创作步骤 5:定义 Customer 外部内容类型

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

适用范围: SharePoint Server 2010

在此步骤中,将定义名为 Customer 的外部内容类型。除了常见的 Finder 和 SpecificFinder 方法之外,Customer 外部内容类型还定义 Creator、Updater 和 Deleter 方法,利用这些方法,可在外部系统中执行创建、读取、更新和删除 (CRUD) 操作。

用作 SpecificFinder 方法的 Web 方法 GetCustomerByID 还重用作关联方法,以便按 CustomerID 获取地址。GetCustomerByID Web 方法在用于通过使用关联获取客户地址的返回结构中包含地址集合。这表明您不是始终都需要有一个单独的方法来作为关联方法。您可以重用另一个方法实例(在本例中为 SpecificFinder)的整个返回结构或部分返回结构作为关联方法。

Customer 实体还演示了自我引用实体关联的概念。客户可以有多个子客户。在 BDC 中,通过使用关联实现这一点。GetChildCustomersForCustomer Web 方法用于返回给定 CustomerID 的子客户。

以下关联定义在 Customer 外部内容类型中:

CustomerToChildCustomers(Association 方法 GetChildCustomersForCustomer 定义在 Customer 外部内容类型中)

CustomerToAddress(Association 方法 GetAddressesForCustomer 定义在 Customer 外部内容类型中)

先决条件

创作步骤 4:定义 Address 外部内容类型

定义 Customer 实体

  • 在 Address 实体元素之后、Entities 结束标记 (</Entities>) 之前添加 Customer 实体的 XML。

    <Entity Namespace="SampleWebService" Version="1.0.0.0" 
            EstimatedInstanceCount="10000" Name="WSCustomer" 
            DefaultDisplayName="WSCustomer">
      <Properties>
        <Property Name="OutlookItemType" 
                  Type="System.String">Contact</Property>
      </Properties>
      <Identifiers>
        <Identifier TypeName="System.String" Name="CustomerID" />
      </Identifiers>
      <Methods>
        <Method IsStatic="false" Name="GetCustomerByID">
          <Parameters>
            <Parameter Direction="In" Name="id">
              <TypeDescriptor TypeName="System.String" 
                              IdentifierName="CustomerID" Name="id" 
                              DefaultDisplayName="CustomerID" />
            </Parameter>
            <Parameter Direction="Return" Name="GetCustomerByID">
              <TypeDescriptor 
                TypeName="BCSServiceProxy.Customer, http://air-mail/WSOrders2010/service.asmx?wsdl" 
                Name="GetCustomerByID">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="System.String" ReadOnly="true" 
                                  IdentifierName="CustomerID" Name="CustomerID" />
                  <TypeDescriptor TypeName="System.String" Name="Name">
                    <Properties>
                      <Property Name="OfficeProperty" 
                                Type="System.String">FullName</Property>
                    </Properties>
                  </TypeDescriptor>
                  <TypeDescriptor 
                    TypeName="System.Nullable`1[[System.Int64, mscorlib, 
                    Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], 
                    mscorlib, Version=2.0.0.0, Culture=neutral, 
                    PublicKeyToken=b77a5c561934e089" Name="WorkPhoneNumber" />
                  <TypeDescriptor TypeName="System.Nullable`1[[System.Int64, mscorlib, 
                                  Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089]], mscorlib, 
                                  Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089" 
                                  Name="MobilePhoneNumber" />
                  <TypeDescriptor TypeName="System.String" Name="Industry" />
                  <TypeDescriptor TypeName="System.String" Name="WebSite" />
                  <TypeDescriptor TypeName="BCSServiceProxy.CustomerAddress[], 
                                  http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                  IsCollection="true" Name="CustomerAddresses">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="BCSServiceProxy.CustomerAddress, 
                                      http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                      Name="CustomerAddressesElement">
                        <TypeDescriptors>
                          <TypeDescriptor TypeName="BCSServiceProxy.CustomerStreet, 
                                          http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                          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="BCSServiceProxy.States, 
                                          http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                          Name="StateProvince" />
                          <TypeDescriptor TypeName="System.String" Name="CountryRegion" />
                          <TypeDescriptor TypeName="System.String" Name="PostalCode" />
                        </TypeDescriptors>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                  <TypeDescriptor TypeName="System.String" Name="ParentCustomerID" />
                  <TypeDescriptor TypeName="System.Int32" Name="Version" />
                  <TypeDescriptor TypeName="System.DateTime" Name="ModifiedDate">
                    <Interpretation>
                      <NormalizeDateTime LobDateTimeMode="UTC" />
                    </Interpretation>
                  </TypeDescriptor>
                  <TypeDescriptor TypeName="System.Boolean" Name="IsDeleted" />
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="SpecificFinder" ReturnParameterName="GetCustomerByID" 
                            Default="true" Name="GetCustomerByID" 
                            DefaultDisplayName="Read Item WSCustomer">
              <Properties>
                <Property Name="LastDesignedOfficeItemType" 
                          Type="System.String">Contact</Property>
              </Properties>
            </MethodInstance>
            <Association Name="CustomerToAddresses" Type="AssociationNavigator" 
                         ReturnParameterName="GetCustomerByID" 
                         ReturnTypeDescriptorPath="GetCustomerByID.CustomerAddresses"
                         DefaultDisplayName="Customer Child Customers Navigate Association">
              <SourceEntity Namespace="SampleWebService" Name="WSCustomer" />
              <DestinationEntity Namespace="SampleWebService" Name="WSAddress" />
            </Association>
          </MethodInstances>
        </Method>
        <Method IsStatic="false" Name="GetCustomers">
          <FilterDescriptors>
            <FilterDescriptor Type="Wildcard" FilterField="Name" Name="Filter">
              <Properties>
                <Property Name="UsedForDisambiguation" Type="System.Boolean">false</Property>
                <Property Name="IsDefault" Type="System.Boolean">false</Property>
                <Property Name="CaseSensitive" Type="System.Boolean">false</Property>
              </Properties>
            </FilterDescriptor>
          </FilterDescriptors>
          <Parameters>
            <Parameter Direction="In" Name="name">
              <TypeDescriptor TypeName="System.String" AssociatedFilter="Filter" Name="name" />
            </Parameter>
            <Parameter Direction="In" Name="limit">
              <TypeDescriptor TypeName="System.Nullable`1[[System.Int32, mscorlib, 
                              Version=2.0.0.0, Culture=neutral, 
                              PublicKeyToken=b77a5c561934e089]], mscorlib, 
                              Version=2.0.0.0, Culture=neutral, 
                              PublicKeyToken=b77a5c561934e089" Name="limit" />
            </Parameter>
            <Parameter Direction="Return" Name="GetCustomers">
              <TypeDescriptor TypeName="BCSServiceProxy.Customer[], 
                              http://air-mail/WSOrders2010/service.asmx?wsdl" 
                              IsCollection="true" Name="GetCustomers">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="BCSServiceProxy.Customer, 
                                  http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                  Name="GetCustomersElement">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.String" ReadOnly="true" 
                                      IdentifierName="CustomerID" Name="CustomerID" />
                      <TypeDescriptor TypeName="System.String" Name="Name">
                        <Properties>
                          <Property Name="ShowInPicker" Type="System.Boolean">true</Property>
                        </Properties>
                      </TypeDescriptor>
                      <TypeDescriptor TypeName="System.Nullable`1[[System.Int64, 
                                      mscorlib, Version=2.0.0.0, Culture=neutral, 
                                      PublicKeyToken=b77a5c561934e089]], mscorlib, 
                                      Version=2.0.0.0, Culture=neutral, 
                                      PublicKeyToken=b77a5c561934e089" Name="WorkPhoneNumber" />
                      <TypeDescriptor TypeName="System.Nullable`1[[System.Int64, 
                                      mscorlib, Version=2.0.0.0, Culture=neutral, 
                                      PublicKeyToken=b77a5c561934e089]], mscorlib, 
                                      Version=2.0.0.0, Culture=neutral, 
                                      PublicKeyToken=b77a5c561934e089" Name="MobilePhoneNumber" />
                      <TypeDescriptor TypeName="System.String" Name="Industry" />
                      <TypeDescriptor TypeName="System.String" Name="WebSite" />
                      <TypeDescriptor TypeName="BCSServiceProxy.CustomerAddress[], 
                                      http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                      IsCollection="true" Name="CustomerAddresses">
                        <TypeDescriptors>
                          <TypeDescriptor TypeName="BCSServiceProxy.CustomerAddress, 
                                          http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                          Name="CustomerAddressesElement">
                            <TypeDescriptors>
                              <TypeDescriptor TypeName="BCSServiceProxy.CustomerStreet, 
                                              http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                              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="BCSServiceProxy.States, 
                                              http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                              Name="StateProvince" />
                              <TypeDescriptor TypeName="System.String" Name="CountryRegion" />
                              <TypeDescriptor TypeName="System.String" Name="PostalCode" />
                            </TypeDescriptors>
                          </TypeDescriptor>
                        </TypeDescriptors>
                      </TypeDescriptor>
                      <TypeDescriptor TypeName="System.String" Name="ParentCustomerID" />
                      <TypeDescriptor TypeName="System.Int32" Name="Version" />
                      <TypeDescriptor TypeName="System.DateTime" Name="ModifiedDate">
                        <Interpretation>
                          <NormalizeDateTime LobDateTimeMode="UTC" />
                        </Interpretation>
                      </TypeDescriptor>
                      <TypeDescriptor TypeName="System.Boolean" Name="IsDeleted" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="Finder" ReturnParameterName="GetCustomers" Default="true" 
                            Name="GetCustomers" DefaultDisplayName="WSCustomer Read List">
              <Properties>
                <Property Name="UseClientCachingForSearch" Type="System.String"></Property>
                <Property Name="RootFinder" Type="System.String"></Property>
              </Properties>
            </MethodInstance>
          </MethodInstances>
        </Method>
        <Method IsStatic="false" Name="CreateCustomer">
          <Parameters>
            <Parameter Direction="In" Name="customer">
              <TypeDescriptor TypeName="BCSServiceProxy.Customer, 
                              http://air-mail/WSOrders2010/service.asmx?wsdl" 
                              Name="customer">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="System.String" CreatorField="true" 
                                  IdentifierName="CustomerID" Name="CustomerID" />
                  <TypeDescriptor TypeName="System.String" CreatorField="true" 
                                  Name="Name" />
                  <TypeDescriptor TypeName="System.Nullable`1[[System.Int64, mscorlib, 
                                  Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089]], 
                                  mscorlib, Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089" 
                                  CreatorField="true" Name="WorkPhoneNumber" />
                  <TypeDescriptor TypeName="System.Nullable`1[[System.Int64, mscorlib, 
                                  Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089]], 
                                  mscorlib, Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089" CreatorField="true" 
                                  Name="MobilePhoneNumber" />
                  <TypeDescriptor TypeName="System.String" CreatorField="true" 
                                  Name="Industry" />
                  <TypeDescriptor TypeName="System.String" CreatorField="true" 
                                  Name="WebSite" />
                  <TypeDescriptor TypeName="BCSServiceProxy.CustomerAddress[], 
                                  http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                  IsCollection="true" CreatorField="true" 
                                  Name="CustomerAddresses">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="BCSServiceProxy.CustomerAddress, 
                                      http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                      Name="CustomerAddressesElement">
                        <TypeDescriptors>
                          <TypeDescriptor TypeName="BCSServiceProxy.CustomerStreet, 
                                          http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                          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="BCSServiceProxy.States, 
                                          http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                          Name="StateProvince" />
                          <TypeDescriptor TypeName="System.String" Name="CountryRegion" />
                          <TypeDescriptor TypeName="System.String" Name="PostalCode" />
                        </TypeDescriptors>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                  <TypeDescriptor TypeName="System.String" CreatorField="true" 
                                  Name="ParentCustomerID" />
                  <TypeDescriptor TypeName="System.Int32" CreatorField="true" 
                                  Name="Version" />
                  <TypeDescriptor TypeName="System.DateTime" CreatorField="true" 
                                  Name="ModifiedDate">
                    <Interpretation>
                      <NormalizeDateTime LobDateTimeMode="UTC" />
                    </Interpretation>
                  </TypeDescriptor>
                  <TypeDescriptor TypeName="System.Boolean" CreatorField="true" 
                                  Name="IsDeleted" />
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
            <Parameter Direction="Return" Name="CreateCustomer">
              <TypeDescriptor TypeName="System.String" IdentifierName="CustomerID" 
                              Name="CreateCustomer" />
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="Creator" ReturnParameterName="CreateCustomer" 
                            Default="true" Name="CreateCustomer" 
                            DefaultDisplayName="Create WSCustomer">
            </MethodInstance>
          </MethodInstances>
        </Method>
        <Method IsStatic="false" Name="UpdateCustomer">
          <Parameters>
            <Parameter Direction="In" Name="customer">
              <TypeDescriptor TypeName="BCSServiceProxy.Customer, 
                              http://air-mail/WSOrders2010/service.asmx?wsdl" 
                              Name="customer">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="System.String" UpdaterField="true" 
                                  IdentifierName="CustomerID" Name="CustomerID" />
                  <TypeDescriptor TypeName="System.String" UpdaterField="true" 
                                  Name="Name" />
                  <TypeDescriptor TypeName="System.Nullable`1[[System.Int64, mscorlib, 
                                  Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089]], 
                                  mscorlib, Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089" UpdaterField="true" 
                                  Name="WorkPhoneNumber" />
                  <TypeDescriptor TypeName="System.Nullable`1[[System.Int64, mscorlib, 
                                  Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089]], 
                                  mscorlib, Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089" 
                                  UpdaterField="true" Name="MobilePhoneNumber" />
                  <TypeDescriptor TypeName="System.String" UpdaterField="true" 
                                  Name="Industry" />
                  <TypeDescriptor TypeName="System.String" UpdaterField="true" 
                                  Name="WebSite" />
                  <TypeDescriptor TypeName="BCSServiceProxy.CustomerAddress[], 
                                  http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                  IsCollection="true" UpdaterField="true" 
                                  Name="CustomerAddresses">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="BCSServiceProxy.CustomerAddress, 
                                      http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                      Name="CustomerAddressesElement">
                        <TypeDescriptors>
                          <TypeDescriptor TypeName="BCSServiceProxy.CustomerStreet, 
                                          http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                          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="BCSServiceProxy.States, 
                                          http://air-mail/WSOrders2010/service.asmx?wsdl" 
                                          Name="StateProvince" />
                          <TypeDescriptor TypeName="System.String" 
                                          Name="CountryRegion" />
                          <TypeDescriptor TypeName="System.String" 
                                          Name="PostalCode" />
                        </TypeDescriptors>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                  <TypeDescriptor TypeName="System.String" UpdaterField="true" 
                                  Name="ParentCustomerID" />
                  <TypeDescriptor TypeName="System.Int32" UpdaterField="true" 
                                  Name="Version" />
                  <TypeDescriptor TypeName="System.DateTime" UpdaterField="true" 
                                  Name="ModifiedDate">
                    <Interpretation>
                      <NormalizeDateTime LobDateTimeMode="UTC" />
                    </Interpretation>
                  </TypeDescriptor>
                  <TypeDescriptor TypeName="System.Boolean" UpdaterField="true" 
                                  Name="IsDeleted" />
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="Updater" Name="UpdateCustomer" 
                            DefaultDisplayName="Update WSCustomer">
            </MethodInstance>
          </MethodInstances>
        </Method>
        <Method IsStatic="false" Name="DeleteCustomer">
          <Parameters>
            <Parameter Direction="In" Name="id">
              <TypeDescriptor TypeName="System.String" IdentifierName="CustomerID" 
                              Name="id" />
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="Deleter" Name="DeleteCustomer" 
                            DefaultDisplayName="Delete WSCustomer">
            </MethodInstance>
          </MethodInstances>
        </Method>
        <Method IsStatic="false" Name="GetChildCustomersForCustomer">
          <Parameters>
            <Parameter Direction="In" Name="id">
              <TypeDescriptor TypeName="System.String" IdentifierName="CustomerID" 
                              Name="id" DefaultDisplayName="CustomerID" />
            </Parameter>
            <Parameter Direction="Return" Name="Customers">
              <TypeDescriptor TypeName="BCSServiceProxy.Customer, 
                              http://air-mail/WSOrders2010/service.asmx?wsdl" 
                              Name="ArrayOfCustomers">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="System.String" ReadOnly="true" 
                                  IdentifierName="CustomerID" Name="CustomerID" />
                  <TypeDescriptor TypeName="System.String" Name="Name" />
                  <TypeDescriptor TypeName="System.Nullable`1[[System.Int64, mscorlib, 
                                  Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089]], 
                                  mscorlib, Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089" 
                                  Name="WorkPhoneNumber" />
                  <TypeDescriptor TypeName="System.Nullable`1[[System.Int64, mscorlib, 
                                  Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089]], 
                                  mscorlib, Version=2.0.0.0, Culture=neutral, 
                                  PublicKeyToken=b77a5c561934e089" 
                                  Name="MobilePhoneNumber" />
                  <TypeDescriptor TypeName="System.String" Name="Industry" />
                  <TypeDescriptor TypeName="System.String" Name="WebSite" />
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <Association Name="CustomerToChildCustomers" Type="AssociationNavigator" 
                         ReturnParameterName="Customers" 
                         DefaultDisplayName="Customer Child Customers Navigate Association">
              <SourceEntity Namespace="SampleWebService" Name="WSCustomer" />
              <DestinationEntity Namespace="SampleWebService" Name="WSCustomer" />
            </Association>
          </MethodInstances>
        </Method>
      </Methods>
    </Entity>
    

后续步骤

创作步骤 6:定义 Region 外部内容类型