Freigeben über


Programmierung mit später und früher Bindung mithilfe des SDK für .NET

Wenn Sie mit den SDK für .NET-Assemblys arbeiten, haben Sie zwei Programmierstile, die Sie verwenden können: spät gebunden und früh gebunden.

Der Hauptunterschied zwischen frühem und spätem Binden betrifft die Typkonvertierung. Wenn die frühere Bindung Kompilierzeitüberprüfung aller Typen zur Verfügung stellt, sodass keine impliziten Umwandlungen auftreten, überprüfen späte Bindung nur Typen, wenn das Objekt erstellt oder eine Aktion am Typ ausgeführt wurde. Die Entity Klasse erfordert, dass Typen explizit angegeben werden, um implizite Umwandlungen zu verhindern.

Mit verspäteter Bindung können Sie mit benutzerdefinierten Tabellen (Entitäten) oder Spalten (Attributen) arbeiten, die beim Kompilieren des Codes nicht verfügbar waren.

Späte Bindung

Bei der spätgebundenen Programmierung nutzen Sie die Entity Klasse, um mithilfe ihrer LogicalName Eigenschaftswerte auf Tabellenzeilen und -spalten (Entitäten und Attribute) zu verweisen.

Beziehungen verfügen nicht über eine LogicalName Eigenschaft, daher wird die RelationshipMetadataBase.SchemaName -Eigenschaft verwendet.

Der Hauptvorteil für die spätgebundene Programmierung besteht darin, dass Sie die Klassen nicht generieren oder diese generierte Datei in Ihre Projekte einschließen müssen. Die generierte Datei kann groß sein.

Die Hauptnachteile sind:

  • Sie erhalten keine Kompilierungszeitüberprüfung für Namen von Entitäten, Attributen und Beziehungen.
  • Sie müssen die Namen der Attribute und Beziehungen in den Metadaten kennen.

Tipp

Ein Tool, mit dem Sie diese Informationen problemlos finden können, ist der Metadatenbrowser. Dies ist eine App, die Sie in Ihrer Organisation herunterladen und installieren können. Weitere Informationen: Durchsuchen der Metadaten für Ihre Umgebung

Example

Im folgenden Beispiel erstellt eine Firma mit dem später Bindung.

//Use Entity class specifying the entity logical name
var account = new Entity("account");

// set attribute values
    // string primary name
    account["name"] = "Contoso";            
    // Boolean (Two option)
    account["creditonhold"] = false;
    // DateTime
    account["lastonholdtime"] = new DateTime(2017, 1, 1);
    // Double
    account["address1_latitude"] = 47.642311;
    account["address1_longitude"] = -122.136841;
    // Int
    account["numberofemployees"] = 500;
    // Money
    account["revenue"] = new Money(new decimal(5000000.00));
    // Picklist (Option set)
    account["accountcategorycode"] = new OptionSetValue(1); //Preferred customer
                
//Create the account
Guid accountid = svc.Create(account);

Frühe Bindung

Für die Early-bound-Programmierung müssen Sie zunächst eine Reihe von Klassen basierend auf den Tabellen- und Spaltendefinitionen (Entitäts- und Attributmetadaten) für eine bestimmte Umgebung mithilfe des Codegenerierungstools Power Platform CLI pac modelbuilder build generieren. Weitere Informationen: Generieren von Klassen für die frühgebundene Programmierung mit dem SDK für .NET

Nachdem Sie früh gebundene Klassen mithilfe des Tools zur Codegenerierung generiert haben, erhalten Sie eine bessere Erfahrung beim Schreiben von Code, da Klassen und Eigenschaften die entsprechenden SchemaName Eigenschaftswerte verwenden:

Instanziieren Sie einfach die Klasse, und lassen Sie Visual Studio IntelliSense die Namen von Eigenschaften und Beziehungen bereitstellen.

Die klassen, die für die frühgebundene Programmierung generiert werden, können auch Definitionen für alle benutzerdefinierten Aktionen enthalten, die für die Umgebung definiert sind. Dadurch erhalten Sie ein Anforderungs- und Antwortklassenpaar, das mit diesen benutzerdefinierten Aktionen verwendet werden soll. Weitere Informationen: Benutzerdefinierte Aktionen

Klassen werden mithilfe von Tabellendefinitionen aus einer bestimmten Umgebungsinstanz generiert, und jede Instanz kann unterschiedliche Tabellen und Spalten aufweisen, in denen sich diese im Laufe der Zeit ändern können. Möglicherweise müssen Sie Code schreiben, um für Tabellen zu arbeiten, die nicht vorhanden sind, wenn Sie die stark typierten Klassen generieren.

Von Bedeutung

Wenn Sie OrganizationServiceProxy verwenden, um die IOrganizationService-Methoden bereitzustellen, die Sie nutzen werden, müssen Sie die OrganizationServiceProxy.EnableProxyTypes()-Methode aufrufen, um frühe gebundene Typen zu aktivieren.

Example

Das folgende Beispiel erstellt eine Firma mit früher Bindung.

var account = new Account();
// set attribute values
    // string primary name
    account.Name = "Contoso";
    // Boolean (Two option)
    account.CreditOnHold = false;
    // DateTime
    account.LastOnHoldTime = new DateTime(2017, 1, 1);
    // Double
    account.Address1_Latitude = 47.642311;
    account.Address1_Longitude = -122.136841;
    // Int
    account.NumberOfEmployees = 500;
    // Money
    account.Revenue = new Money(new decimal(5000000.00));
    // Picklist (Option set)
    account.AccountCategoryCode = new OptionSetValue(1); //Preferred customer

//Create the account
Guid accountid = svc.Create(account);

Wählen Sie den Stil aus

Welcher zu verwendende Programmierstil liegt bei Ihnen. Die folgende Tabelle enthält die Vor- und Nachteile für die einzelnen.

Frühe Bindung Späte Bindung
Zur Kompilierungszeit können Sie Entitäts-, Attribut- und Beziehungsnamen überprüfen. Keine Kompilierungszeitüberprüfung von Entitäts-, Attribut- und Beziehungsnamen
Sie müssen Entitätsklassen generieren. Sie müssen keine Entitätsklassen generieren.
Bessere IntelliSense-Unterstützung Weniger IntelliSense-Unterstützung
Weniger Code zu schreiben; Code ist besser lesbar Mehr Code zum Schreiben; Code ist weniger lesbar
Ein wenig weniger leistungsfähig Etwas performanter

Früh und spät gebundene Bindungen kombinieren

Da alle generierten Klassen von der Klasse erben, die mit der Entity spät gebundenen Programmierung verwendet wird, können Sie mit Entitäten, Attributen und Beziehungen arbeiten, die nicht innerhalb von Klassen definiert sind.

Examples

Das folgende Beispiel zeigt eine Möglichkeit, frühe und späte Bindungsmethoden mithilfe von OrganizationServiceContext.

// Create an context object  
AWCServiceContext context = new AWCServiceContext(_serviceProxy);  
  
// Instantiate an account object using the Entity class.  
Entity testaccount = new Entity("account");  
  
// Set several attributes. For account, only the name is required.   
testaccount["name"] = "Fourth Coffee";  
testaccount["emailaddress1"] = "marshd@contoso.com";  
  
// Save the entity using the context object.  
context.AddToAccountSet(testaccount);  
context.SaveChanges();  
  

Wenn ein benutzerdefiniertes Attribut nicht in den generierten Klassen enthalten war, können Sie es weiterhin verwenden.

var account = new Account();
// set attribute values
    // string primary name
    account.Name = "Contoso";
    // A custom boolean attribute not included in the generated classes.
    account["sample_customboolean"] = false;


//Create the account
Guid accountid = svc.Create(account);

Zuweisen einer früh gebundenen Instanz zu einer spät gebundenen Instanz

Das folgende Beispiel zeigt, wie Sie einer spät gebundenen Instanz eine früh gebundene Instanz zuweisen.

Entity incident = ((Entity)context.InputParameters[ParameterName.Target]).ToEntity<Incident>();  
Task relatedEntity = new Task() { Id = this.TaskId };  
  
incident.RelatedEntities[new Relationship("Incident_Tasks")] =   
new EntityCollection(new Entity[] { relatedEntity.ToEntity<Entity>() });  

Siehe auch

Entitätsvorgänge mit dem SDK für .NET
Tabellenzeilen mit dem SDK für .NET erstellen
Abrufen einer Tabellenzeile über das SDK für .NET
Abfragen von Daten mithilfe des SDK für .NET
Tabellenzeilen über das SDK für .NET aktualisieren und löschen
Zuordnen und Aufheben der Zuordnung von Tabellenzeilen über das SDK für .NET
IOrganizationService-Schnittstelle
Verwenden von OrganizationServiceContext