Planungsschritt 3: Bestimmen der Bezeichner für jede Entität
Letzte Änderung: Montag, 19. April 2010
Gilt für: SharePoint Server 2010
Sie müssen für jeden externen Inhaltstyp die Felder identifizieren, mit denen eine Instanz dieses externen Inhaltstyps eindeutig identifiziert wird. Ohne Bezeichner kann eine Entity-Instanz vom Business Data Connectivity-Dienst (BDC) nicht eindeutig identifiziert werden. Bei den von einer Back-End-Anwendungsmethode zurückgegebenen Daten handelt es sich lediglich um ein Daten-BLOB ohne Bezeichner. Nur wenn die zurückgegebenen Daten auch Bezeichner aufweisen, können die Daten semantische Bedeutung in BDC haben, und nur dann können Sie Aktionen für die Entitäten implementieren, die Entitäten durchsuchen sowie die Entitäten durchforsten.
Beispielsweise enthält die Customer-Klasse im SampleWebService-Proxy das Feld CustomerID, mit dem eine Kundeninstanz eindeutig identifiziert wird. Deshalb kann CustomerID als Bezeichner für den externen Inhaltstyp Customer verwendet werden. Es folgt die Definition der Customer-Klasse aus dem Webdienstproxy.
public partial class Customer {
private string customerIDField;
private string nameField;
private System.Nullable<long> workPhoneNumberField;
private System.Nullable<long> mobilePhoneNumberField;
private string industryField;
private string webSiteField;
private CustomerAddress[] customerAddressesField;
private string parentCustomerIDField;
/// <remarks/>
public string CustomerID { get { return this.customerIDField; } set { this.customerIDField = value; }
}
/// <remarks/>
public string Name {
get {
return this.nameField;
}
set {
this.nameField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public System.Nullable<long> WorkPhoneNumber {
get {
return this.workPhoneNumberField;
}
set {
this.workPhoneNumberField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public System.Nullable<long> MobilePhoneNumber {
get {
return this.mobilePhoneNumberField;
}
set {
this.mobilePhoneNumberField = value;
}
}
/// <remarks/>
public string Industry {
get {
return this.industryField;
}
set {
this.industryField = value;
}
}
/// <remarks/>
public string WebSite {
get {
return this.webSiteField;
}
set {
this.webSiteField = value;
}
}
/// <remarks/>
public CustomerAddress[] CustomerAddresses {
get {
return this.customerAddressesField;
}
set {
this.customerAddressesField = value;
}
}
/// <remarks/>
public string ParentCustomerID {
get {
return this.parentCustomerIDField;
}
set {
this.parentCustomerIDField = value;
}
}
}
public Customer(string id, string name, uint? workphone, uint? mobilephone, string industry, string website, CustomerAddress[] custaddresses, string parentid)
{
this.CustomerID = id;
this.Name = name;
this.WorkPhoneNumber = workphone;
this.MobilePhoneNumber=mobilephone;
this.Industry = industry;
this.WebSite = website;
this.CustomerAddresses = custaddresses;
this.ParentCustomerID = parentid;
}
}
Für die LineItem-Klasse bilden jedoch OrderID und ProductID zusammen eine LineItem-Instanz. Deshalb deklarieren Sie wie im folgenden Codebeispiel veranschaulicht OrderID und ProductID als Bezeichner für den externen Inhaltstyp LineItem.
public partial class LineItem {
private string orderIDField;
private string productIDField;
private string productNameField;
private int orderQtyField;
private decimal unitPriceField;
private decimal lineTotalField;
/// <remarks/>
public string OrderID { get { return this.orderIDField; } set { this.orderIDField = value; } }
/// <remarks/>
public string ProductID { get { return this.productIDField; } set { this.productIDField = value; } }
/// <remarks/>
public string ProductName {
get {
return this.productNameField;
}
set {
this.productNameField = value;
}
}
/// <remarks/>
public int OrderQty {
get {
return this.orderQtyField;
}
set {
this.orderQtyField = value;
}
}
/// <remarks/>
public decimal UnitPrice {
get {
return this.unitPriceField;
}
set {
this.unitPriceField = value;
}
}
/// <remarks/>
public decimal LineTotal {
get {
return this.lineTotalField;
}
set {
this.lineTotalField = value;
}
}
}
Es kann jedoch vorkommen, dass für einen bestimmten externen Inhaltstyp kein Bezeichner erforderlich ist, z. B. für den externen Inhaltstyp Address im SampleWebService-Proxy. Der externe Inhaltstyp Address weist keinen Bezeichner auf, da nur eine Liste der Adressen für einen Kunden angezeigt werden soll. Das heiß, es handelt sich nur um einen Daten-BLOB. Es ist nicht möglich, Aktionen für diesen externen Inhaltstyp auszuführen, die Instanzauswahl für den externen Inhaltstyp zu verwenden, den externen Inhaltstyp zu verknüpfen, den externen Inhaltstyp zu durchsuchen oder zu durchforsten usw.
public partial class CustomerAddress {
private CustomerStreet streetField;
private string cityField;
private States stateProvinceField;
private string countryRegionField;
private string postalCodeField;
/// <remarks/>
public CustomerStreet Street {
get {
return this.streetField;
}
set {
this.streetField = value;
}
}
/// <remarks/>
public string City {
get {
return this.cityField;
}
set {
this.cityField = value;
}
}
/// <remarks/>
public States StateProvince {
get {
return this.stateProvinceField;
}
set {
this.stateProvinceField = value;
}
}
/// <remarks/>
public string CountryRegion {
get {
return this.countryRegionField;
}
set {
this.countryRegionField = value;
}
}
/// <remarks/>
public string PostalCode {
get {
return this.postalCodeField;
}
set {
this.postalCodeField = value;
}
}
}
Weitere Schritte
Planungsschritt 4: Identifizieren der für die einzelnen Entitäten erforderlichen Filter