Übung – Mit Dataverse SDK eine Anwendung erstellen
Dataverse Organization-Service
In den folgenden Schritten können Sie eine Anwendung erstellen, die Dataverse SDK für .NET verwendet.
Authentifizieren und neuen Datensatz erstellen
Starten Sie Visual Studio 2022.
Wählen Sie Neues Projekt erstellen aus.
Suchen Sie nach Konsole, wählen Sie Konsolenanwendung aus, und klicken Sie dann auf die Option Weiter.
Geben Sie einen Namen für das Projekt ein, wählen Sie einen Speicherort aus, und klicken Sie dann auf die Option Weiter.
Wählen Sie .NET 7.0 (LTS) für Framework aus, aktivieren Sie das Kontrollkästchen Keine Anweisungen der obersten Ebene verwenden, und klicken Sie auf die Option Erstellen.
Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie NuGet-Pakete verwalten aus.
Wählen Sie die Registerkarte Durchsuchen aus, und suchen Sie nach dataverse.client, klicken Sie auf Microsoft.PowerPlatform.Dataverse.Client und dann auf Installieren.
Schließen Sie den NuGet-Manager.
Fügen Sie Program.cs diese using-Anweisungen hinzu.
using Microsoft.PowerPlatform.Dataverse.Client; using Microsoft.Xrm.Sdk;
Ersetzen Sie den Code in der Main-Methode mit folgendem Code: Dieser Code erstellt einen Dienstclient.
var serviceClient = new ServiceClient("Url=[instance url];AuthType=OAuth;RedirectUri=http://localhost;LoginPrompt=Always");
Machen Sie die Main-Methode asynchron, und geben Sie Aufgabe statt Stornieren zurück.
Navigieren Sie zum Maker Portal, und stellen Sie sicher, dass Sie die richtige Umgebung ausgewählt haben.
Wählen Sie die Schaltfläche Einstellungen und dann Sitzungsdetails aus.
Kopieren Sie die Instanz-URL.
Wechseln Sie zurück zu Visual Studio, und ersetzen Sie [Instanz-URL] mit der von Ihnen kopierten URL.
Fügen Sie diese Methode der Klasse Programm hinzu.
private async static Task CreateNewAccount(ServiceClient serviceClient) { }
Die CreateNewAccount-Methode.
Fügen Sie der Methode CreateNewAccount diesen Code hinzu. Dieser Code erstellt ein neues Konto und zeigt die Kennung des erstellten Kontos an.
Entity newAccount = new Entity("account"); newAccount["name"] = "Fourth Coffee (Learn Labs)"; newAccount["creditlimit"] = new Money(12000); var accountId = await serviceClient.CreateAsync(newAccount); Console.WriteLine("Created Account Id: " + accountId);
Der CreateNewAccount sollte nun wie diese Methode aussehen.
Fügen Sie der Methode Main diesen Code hinzu. Dieser Code ruft die Methode „Neues Konto erstellen“ auf.
Speichern Sie Ihre Änderungen, und führen Sie die Konsolenanwendung aus.
Sie sollten aufgefordert werden, sich anzumelden. Geben Sie Ihre Anmeldeinformationen ein, und melden Sie sich an.
Sie können das Browserfenster schließen.
Die Konsolenanwendung sollte die Kennung der erstellten Kontozeile anzeigen.
Drücken Sie zum Schließen der Konsolenanwendung eine beliebige Taste.
Navigieren Sie zurück zum Maker Portal, und stellen Sie sicher, dass Sie die richtige Umgebung ausgewählt haben.
Wählen Sie Tabellen aus, und öffnen Sie die Tabelle Konto.
Wechseln Sie zum Abschnitt Kontospalten und -daten, wählen Sie die Schaltfläche Mehr aus, fügen Sie die Spalte Kreditlimit hinzu, und klicken Sie dann auf Speichern.
Sie sollten jetzt die neu erstellte Kontozeile sehen.
Zugehörige Datensätze erstellen
Wechseln Sie zurück zu Visual Studio 2022.
Fügen Sie diese Methode der Klasse Programm hinzu.
private async static Task CreateRelatedRecords(ServiceClient serviceClient) { }
Fügen Sie der Methode CreateRelatedRecords diesen Code hinzu. Dieser Code erstellt ein neues Konto.
Entity newAccount = new Entity("account"); newAccount["name"] = "Fourth Coffee (With Contact)"; newAccount["creditlimit"] = new Money(12000); newAccount.Id = await serviceClient.CreateAsync(newAccount);
Fügen Sie der Methode CreateRelatedRecords diesen Code hinzu. Dieser Code erstellt einen neuen Kontakt und legt seinen übergeordneten Kunden für das neue Konto fest.
Entity newContact = new Entity("contact"); newContact["firstname"] = "Nancy"; newContact["lastname"] = "Anderson (Learn Lab)"; newContact["parentcustomerid"] = newAccount.ToEntityReference(); var contactId = await serviceClient.CreateAsync(newContact);
Fügen Sie der Methode CreateRelatedRecords diesen Code hinzu. Dieser Code zeigt die Kennungen der erstellten Kontakt- und Kontodatensätze an.
Console.WriteLine($"Created Acount Id: {newAccount.Id} - Created Contact Id: {contactId}.");
Die CreateRelatedRecords-Methode sollte nun wie in diesem Bild aussehen.
Wechseln Sie zur Methode Main, kommentieren Sie den Aufruf der Methode CreateNewAccount, und rufen Sie die Methode CreateRelatedRecordsMethod auf.
Die Main-Methode sollte nun wie in diesem Bild aussehen. Führen Sie das Programm aus.
Geben Sie Ihre Anmeldeinformationen ein, und melden Sie sich an.
Die Konsolenanwendung sollte die Kennungen der erstellten Datensätze anzeigen.
Schließen Sie die Konsolenanwendung.
QueryExpression contactQuery = new QueryExpression("contact"); contactQuery.ColumnSet = new ColumnSet("fullname");
Kontakte abfragen
Wechseln Sie zurück zu Visual Studio 2022.
Fügen Sie diese Methode der Klasse Programm hinzu.
private async static Task QueryContacts(ServiceClient serviceClient) { }
Fügen Sie der Methode QueryContacts diesen Code hinzu. Dieser Code erstellt einen Abfrageausdruck für die contact-Tabelle und wählt die Spalte „fullname“ aus.
QueryExpression contactQuery = new QueryExpression("contact"); contactQuery.ColumnSet = new ColumnSet("fullname");
Fügen Sie der Methode QueryContacts diesen Code hinzu. Dieser Codeausschnitt erstellt LinkEntity für die account‑ und contact-Tabelle, wählt die Spalten „name“ und „creditlimit“ aus und gibt der LinkEntity einen Aliasnamen. Mit einer LinkEntity können Sie die Beziehung zwischen den beiden Tabellen da abfragen, wo sie sich überschneiden.
LinkEntity accountLink = new LinkEntity("contact", "account", "parentcustomerid", "accountid", JoinOperator.Inner); accountLink.Columns = new ColumnSet("name", "creditlimit"); accountLink.EntityAlias = "parentAccount";
Fügen Sie der Methode QueryContacts diesen Code hinzu. Dieser Code fügt eine Bedingung für Konten mit einem Kreditlimit von mehr als 12.001 hinzu. So werden der LinkEntity Kriterien hinzugefügt, sodass Sie nur Kontaktzeilen erhalten, die mit einem Konto verknüpft sind, das über ein Kreditlimit von > 12.000 verfügt.
accountLink.LinkCriteria.AddCondition("creditlimit", ConditionOperator.GreaterThan, 12000); contactQuery.LinkEntities.Add(accountLink);
Mehrere Aufrufe abrufen. Fügen Sie der Methode QueryContacts diesen Code hinzu. So werden alle Kontakttabellenzeilen zurückgegeben, die den Abfragekriterien entsprechen.
EntityCollection results = serviceClient.RetrieveMultiple(contactQuery);
Fügen Sie der Methode QueryContacts diesen Code hinzu. Dieser Code geht die Ergebnisentitäten durch und zeigt den Nachnamen des Kontakts und das Kreditlimit des Kontos an. Beachten Sie, dass dadurch die Entitätsspalte in AliasedValue umgewandelt wird. Dies ist erforderlich, wenn Sie zum Abrufen mehrerer Ergebnisse auf Daten von einer LinkedEntity zugreifen.
foreach (Entity entity in results.Entities) { var creditLimit = ((Money)((AliasedValue)entity["parentAccount.creditlimit"]).Value).Value; Console.WriteLine($"Contact name: {entity["fullname"]} Credit limit: {creditLimit}."); }
Die QueryContacts-Methode sollte nun wie in diesem Bild aussehen.
Wechseln Sie zur Methode Main, kommentieren Sie den Aufruf der Methode CreateRelatedRecordsMethod, und rufen Sie die Methode QueryContacts auf.
Die Main-Methode sollte nun wie in diesem Bild aussehen. Führen Sie das Programm aus.
Geben Sie Ihre Anmeldeinformationen ein, und melden Sie sich an.
Die Anwendung sollte den Nachnamen des Kontakts und das Konto-Kreditlimit anzeigen.
Schließen Sie die Anwendung.
Alternativschlüssel erstellen
Wechseln Sie zurück zu Visual Studio 2022.
Fügen Sie diese Methode der Klasse Programm hinzu.
private async static Task CreateAlternateKey(ServiceClient serviceClient) { }
Fügen Sie der Methode CreateAlternateKey diesen Code hinzu. Dieser Code erstellt basierend auf der Kontonummer einen Alternativschlüssel für die Kontotabelle. Dies ist ein Beispiel für die Verwendung der API zum Anpassen der Dataverse-Metadaten. Sie können in einer Dataverse-Umgebung auch Tabellen und Spalten sowie andere Metadaten erstellen.
CreateEntityKeyRequest createKeyRequest = new CreateEntityKeyRequest { EntityName = "account", EntityKey = new EntityKeyMetadata { KeyAttributes = new[] { "accountnumber" }, SchemaName = "contoso_AccountNumberKey", DisplayName = new Label("Account Number Key", 1033) } };
Fügen Sie der Methode CreateAlternateKey diesen Code hinzu. Dieser Code ruft die Ausführung auf und zeigt die Schlüssel-ID an.
var excuteResults = await serviceClient.ExecuteAsync(createKeyRequest); Console.WriteLine($"Key Id: {excuteResults.Results.First().Value}");
Wechseln Sie zur Methode Main, kommentieren Sie den Aufruf der Methode QueryContacts, und rufen Sie die Methode CreateAlternateKey auf.
Die Main-Methode sollte nun wie in diesem Bild aussehen. Führen Sie das Programm aus.
Geben Sie Ihre Anmeldeinformationen ein, und melden Sie sich an.
Die Konsolen-App sollte die Alternativschlüssel-ID anzeigen, die erstellt wurde.
Schließen Sie die Anwendung.
Navigieren Sie zum Maker Portal, und stellen Sie sicher, dass Sie die richtige Umgebung ausgewählt haben.
Wählen Sie Tabellen aus, und öffnen Sie die Tabelle Konto.
Wählen Sie im Abschnitt Schema die Schaltfläche Schlüssel aus.
Das von Ihnen erstellte Alternativschlüssel sollte angezeigt werden.
Datensatz mit Alternativschlüssel aktualisieren
Navigieren Sie zum Maker Portal, und stellen Sie sicher, dass Sie die richtige Umgebung ausgewählt haben.
Wählen Sie Tabellen aus, und öffnen Sie die Tabelle Konto.
Wechseln Sie zum Abschnitt Kontospalten und -daten, wählen Sie die Schaltfläche Weitere Spalten aus, fügen Sie die Spalten Kontonummer und Kreditlimit hinzu, und klicken Sie dann auf Speichern.
Kopieren Sie den Wert Firmennummer eines der Konten, und notieren Sie den aktuellen Wert Kreditlimit.
Wechseln Sie zurück zu Visual Studio 2022.
Fügen Sie diese Methode der Klasse Programm hinzu.
private async static Task UpdateWithAlternateKey(ServiceClient serviceClient) { }
Fügen Sie der Methode UpdateWithAlternateKey diesen Code hinzu. Dadurch wird das Kreditlimit des Kontos mit dem Alternativschlüssel aktualisiert.
Entity account = new Entity("account", "accountnumber", "ABC28UU7"); account["creditlimit"] = new Money(500); await serviceClient.UpdateAsync(account);
Die Main UpdateWithAlternateKey sollte nun wie in diesem Bild aussehen.
Wechseln Sie zur Methode Main, kommentieren Sie den Aufruf der Methode CreateAlternateKey, und rufen Sie die Methode UpdateWithAlternateKey auf.
Die Main-Methode sollte nun wie in diesem Bild aussehen. Führen Sie das Programm aus.
Geben Sie Ihre Anmeldeinformationen ein, und melden Sie sich an.
Die Anwendung sollte erfolgreich ausgeführt werden. Schließen Sie die Anwendung.
Wechseln Sie zum Entwickler, und stellen Sie sicher, dass das Kreditlimit des Kontos aktualisiert wurde.
Änderungsnachverfolgung abfragen
Wechseln Sie zurück zu Visual Studio 2022.
Wechseln Sie zur Main UpdateWithAlternateKey, und ändern Sie den Wert des Kreditlimits auf 25000.
Fügen Sie diese Methode der Klasse Programm hinzu.
private async static Task QueryChangeTracking(ServiceClient serviceClient) { }
Fügen Sie der Methode QueryChangeTracking diesen Code hinzu. So wird eine Anforderung zum Abrufen der Entitätsänderung für die Kontotabelle erstellt und die Anzahl der Datensätze auf 5.000 festgelegt.
string token = null; RetrieveEntityChangesRequest request = new RetrieveEntityChangesRequest { EntityName = "account", Columns = new ColumnSet(true), PageInfo = new PagingInfo { Count = 5000, // Set the number of records per page here. PageNumber = 1 }, DataVersion = token };
Fügen Sie der Methode QueryChangeTracking diesen Code hinzu. So wird die Anforderung ausgeführt.
var response = await serviceClient.ExecuteAsync(request) as RetrieveEntityChangesResponse;
Fügen Sie der Methode QueryChangeTracking danach diesen Code hinzu. Hier werden die Kennungen der neuen oder aktualisierten Entitätskennung angezeigt.
foreach (var entity in response.EntityChanges.Changes) { if (entity.Type == ChangeType.NewOrUpdated) { var updatedEntity = ((NewOrUpdatedItem)entity).NewOrUpdatedEntity; Console.WriteLine($"Entity ID: {updatedEntity.Id}"); } } request.DataVersion = response.EntityChanges.DataToken;
Die QueryChangeTracking-Methode sollte nun wie in diesem Bild aussehen.
Rufen Sie die Methode UpdateWithAlternateKey auf. Fügen Sie der Methode QueryChangeTracking diesen Code hinzu.
Die Änderungen an der Entität werden erneut abgerufen, nachdem Sie das Kreditlimit des Kontos aktualisiert haben. Fügen Sie der Methode UpdateWithAlternateKey nach dem Aufruf diesen Code hinzu.
response = await serviceClient.ExecuteAsync(request) as RetrieveEntityChangesResponse; foreach (var entity in response.EntityChanges.Changes) { if (entity.Type == ChangeType.NewOrUpdated) { var updatedEntity = ((NewOrUpdatedItem)entity).NewOrUpdatedEntity; Console.WriteLine($"Updated ID: {updatedEntity.Id}"); } }
Der untere Teil der Methode QueryChangeTracking sollte wie in diesem Bild aussehen.
Wechseln Sie zur Methode Main, kommentieren Sie den Aufruf der Methode UpdateWithAlternateKey, und rufen Sie die Methode QueryChangeTracking auf.
Die Main-Methode sollte nun wie in diesem Bild aussehen. Führen Sie das Programm aus.
Geben Sie Ihre Anmeldeinformationen ein, und melden Sie sich an.
Die Anwendung sollte erfolgreich ausgeführt werden und eine Liste von Kennungen anzeigen, einschließlich der Kennung des Kontos, das Sie aktualisiert haben.
Schließen Sie die Anwendung.