Freigeben über


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>

Weitere Schritte

Erstellungsschritt 1: Definieren des externen Systems