計画手順 3: 各エンティティの識別子を決定する
最終更新日: 2010年4月19日
適用対象: SharePoint Server 2010
外部コンテンツ タイプごとに、その外部コンテンツ タイプのインスタンスを一意に識別するフィールドを指定する必要があります。識別子がないと、Business Data Connectivity (BDC) service はエンティティ インスタンスを一意に識別できません。バックエンド アプリケーション メソッドから返されるデータは、識別子のない単なるデータの塊です。BDC でデータが意味を持つことができるのは、返されるデータにも識別子がある場合のみです。その場合にのみ、エンティティに対してアクションの実装、検索、およびクロールを実行できます。
たとえば、SampleWebService プロキシの Customer クラスには CustomerID という名前のフィールドが含まれており、顧客のインスタンスを一意に識別します。したがって、CustomerID は Customer 外部コンテンツ タイプの識別子として使用できます。次に示すのは、Web サービス プロキシでの Customer クラスの定義です。
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;
}
}
一方、LineItem クラスの場合は、OrderID と ProductID が一緒になって LineItem インスタンスが形成されます。したがって、次のコード例で示すように、OrderID と ProductID を 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;
}
}
}
ただし、SampleWebService プロキシの Address 外部コンテンツ タイプのように、外部コンテンツ タイプに識別子が必要ない場合もあります。顧客の住所の一覧を表示するだけなので、Address 外部コンテンツ タイプに識別子はありません。つまり、住所は単なるデータの塊です。この外部コンテンツ タイプに対するアクションの実行、外部コンテンツ タイプ インスタンスの選択の使用、外部コンテンツ タイプとの関連付け、外部コンテンツ タイプの検索やクロールなどは、行うことができません。
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;
}
}
}