Planungsschritt 5: Bestimmen der Eingabe-, Ausgabe- und Rückgabeparameter für jede Methode
Letzte Änderung: Montag, 19. April 2010
Gilt für: SharePoint Server 2010
Der Business Data Connectivity-Dienst (BDC) generiert einen Webdienstproxy für den Zugriff auf den Webdienst. Bestimmen Sie deshalb für jede Methode die Eingabe-, Ausgabe- und Rückgabeparameter, indem Sie die entsprechende Webmethode im Webdienstproxy analysieren. Jeder Parameter erhält einen Wert für das Name-Attribut, wobei ein beliebiger aussagekräftiger Name festgelegt werden kann. Die Details des Parameters werden durch Einfügen eines untergeordneten Elements vom Typ TypeDescriptor definiert. Das TypeDescriptor-Element weist ein Name-Attribut auf.
Auf der obersten Ebene (Stamm-TypeDescriptor) kann für TypeDescriptor ein beliebiger Name gewählt werden.
Für untergeordnete TypeDescriptor-Elemente muss der Name des .NET Framework-Accessors im .NET-Typ verwendet werden, auf den vom übergeordneten TypeDescriptor-Element verwiesen wird. Beispielsweise wird TypeDescriptor mit "WorkPhoneNumber" als Name geschrieben, da "WorkPhoneNumber" ein(e) .NET-Eigenschaft/Feld im Typ des übergeordneten TypeDescriptor-Elements ist, das SampleWebProxy.Customer lautet.
Für das untergeordnete TypeDescriptor-Element eines TypeDescriptor-Elements, für das IsCollection auf True festgelegt ist, kann ebenfalls ein beliebiger Name gewählt werden.
Für TypeDescriptors-Elemente von Eingabeparametern, die Arrays darstellen, können Metadaten definiert werden, die das Array mit Standardeingabewerten auffüllen. Legen Sie dazu für das TypeDescriptor-Element des Eingabeparameters, das das Array darstellt, das IsCollection-Kennzeichen auf False fest. Erstellen Sie anschließend n untergeordnete TypeDescriptors-Elemente mit Standardwerten, die den n Werten entsprechen, die beim Ausführen der Methode dem Eingabearray hinzugefügt werden sollen.
Darüber hinaus sollte der Typ des TypeDescriptor-Elements auch dem Proxytyp entsprechen. Falls das TypeDescriptor-Element den eindeutigen Schlüssel der Entität darstellt, verweist das IdentifierName-Attribut auf das entsprechende Identifier-Element. Das letzte Attribut des TypeDescriptor-Elements ist das AssociatedFilter-Attribut, das das -Element mit dem für die Entität definierten FilterDescriptor-Element verknüpft. BDC wird angewiesen, den Filterwert in diesem Teil des Parameters einzufügen, bevor der Webmethodenaufruf ausgeführt wird.
Es folgt die Definition der GetCustomers-Methode im SampleWebService-Proxy. Sie können den Eingabeparameter und den Rückgabeparameter der obersten Ebene hier ableiten.
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]));
}
Für Rückgabeparameter definieren wir, was als Felder der Entitätsinstanzen an BDC zurückgegeben wird. Das erste untergeordnete TypeDescriptor-Element definiert im Proxy den von der Methodeninstanz (Webmethode) zurückgegebenen Rückgabetyp, in diesem Fall ein Array von Kunden: SampleWebServiceProxy.Customer[]. Das zweite TypeDescriptor-Element definiert jedes Objekt in diesem Array. In diesem Fall sind alle Objekte vom Typ SampleWebServiceProxy.Customer. Alle übrigen TypeDescriptor-Elemente beschreiben die Felder einer Customer-Instanz.
Dies ist die Customer-Klassendefinition im SampleWebService-Proxy. Sie können das untergeordnete TypeDescriptors-Element des Rückgabeparameters hier ableiten.
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;
}
}
}
Es folgt die Definition der Eingabe- und Rückgabeparameter des Parameter-Elements für die GetCustomers-Methode in den XML-Metadaten.
<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>