上次修改时间: 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 外部内容类型中)
先决条件
定义 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>