計画手順 5: 各メソッドの入力、出力、および戻り値パラメーターを定義する
最終更新日: 2010年4月19日
適用対象: SharePoint Server 2010
Business Data Connectivity (BDC) service は、Web サービスにアクセスするための Web サービス プロキシを生成します。したがって、メソッドごとに、Web サービス プロキシでの適切な Web メソッドを調べて、入力、出力、および戻り値パラメーターを決定します。各パラメーターは Name 属性の値を取得します。これには、わかりやすい名前を自由に設定できます。パラメーターの詳細は、TypeDescriptor 型の子要素を挿入することで提供されます。TypeDescriptor 要素には Name 属性があります。
最上位レベル (ルート TypeDescriptor) では、TypeDescriptor にどのような名前でも設定できます。
子 TypeDescriptor の名前は、親の TypeDescriptor で参照される .NET 型での .NET Framework アクセサーの名前を使用する必要があります。たとえば、親 TypeDescriptor の型 (SampleWebProxy.Customer) では "WorkPhoneNumber" が .NET プロパティ/フィールドなので、"WorkPhoneNumber" の Name を持つ TypeDescriptor が記述されます。
IsCollection が true に設定された TypeDescriptor の子 TypeDescriptor にも、任意の名前を付けることができます。
配列を表す入力パラメーターの TypeDescriptors の場合は、配列を既定の入力値で埋めるメタデータを定義できます。そのためには、IsCollection フラグが false に設定された配列を表す入力パラメーターの TypeDescriptor を定義します。その後、メソッドを実行するときに入力配列に追加する n 個の値に対応して、既定値を持つ n 個の子 TypeDescriptors を作成します。
さらに、TypeDescriptor の型はプロキシでの型とも一致する必要があります。TypeDescriptor がエンティティの一意のキーを表す場合、属性 IdentifierName は対応する Identifier 要素をポイントします。TypeDescriptor 要素の最後の属性は AssociatedFilter 属性です。この属性は、 と、エンティティに定義されている FilterDescriptor 要素をリンクします。この属性は、BDC に対して、Web メソッド呼び出しを実行する前に、パラメーターのこの部分にフィルターの値を挿入するように指示します。
次に示すのは、SampleWebService プロキシでの GetCustomers メソッドの定義です。入力パラメーターおよび最上位の戻り値パラメーターはここから派生できます。
public Customer[] GetCustomers(string name, [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] System.Nullable<int> limit) {
object[] results = this.Invoke("GetCustomers", new object[] {
name,
limit});
return ((Customer[])(results[0]));
}
戻り値パラメーターの場合は、エンティティ インスタンスのフィールドとして BDC に返されるものを定義します。最初の子 TypeDescriptor は、プロキシでメソッド インスタンス (Web メソッド) によって返される戻り値の型を定義します。この例の場合は、顧客の配列 SampleWebServiceProxy.Customer[] です。2 番目の TypeDescriptor 要素は、その配列での各オブジェクトを定義します。この例では、各オブジェクトは SampleWebServiceProxy.Customer 型です。残りの各 TypeDescriptor 要素は、Customer インスタンスの各フィールドの詳細を指定します。
次に示すのは、SampleWebService プロキシでの Customer クラスの定義です。戻り値パラメーターの子 TypeDescriptors はここから派生できます。
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;
}
}
}
次に示すのは、XML メタデータでの GetCustomers メソッドに対する入力および戻り値の Parameter 要素の定義です。
<Parameters>
<Parameter Direction="In" Name="name">
<TypeDescriptor TypeName="System.String"
AssociatedFilter="Name" Name="name" />
</Parameter>
<Parameter Direction="In" Name="limit">
<TypeDescriptor TypeName="System.Int32"
AssociatedFilter="Limit" Name="limit" />
</Parameter>
<Parameter Direction="Return" Name="Customers">
<TypeDescriptor TypeName="SampleWebServiceProxy.Customer[],
SampleWebService" IsCollection="true" Name="ArrayOfCustomer">
<TypeDescriptors>
<TypeDescriptor TypeName="SampleWebServiceProxy.Customer,
SampleWebService" Name="Customer">
<TypeDescriptors>
<TypeDescriptor TypeName="System.String"
IdentifierName="CustomerID" Name="CustomerID" />
<TypeDescriptor TypeName="System.String" Name="Name" />
<TypeDescriptor TypeName="System.Int64"
Name="WorkPhoneNumber" />
<TypeDescriptor TypeName="System.Int64"
Name="MobilePhoneNumber" />
<TypeDescriptor TypeName="System.String" Name="Industry" />
<TypeDescriptor TypeName="System.String" Name="WebSite" />
</TypeDescriptors>
</TypeDescriptor>
</TypeDescriptors>
</TypeDescriptor>
</Parameter>
</Parameters>