計画手順 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;
        }
    }
}

次の手順

計画手順 4: 各エンティティに必要なフィルターを識別する