Freigeben über


Verwendung von XRM-Tooling zum Aktualisieren von Daten

In der CrmServiceClient-Klasse gibt es zwei Möglichkeiten zum Aktualisieren von Daten in Microsoft Dataverse: UpdateEntity(String, String, Guid, Dictionary<String,CrmDataTypeWrapper>, String, Boolean, Guid) und UpdateStateAndStatusForEntity(String, Guid, String, String, Guid).

Ebenso für die ServiceClient-Klasse gibt es UpdateEntity und UpdateStateAndStatusForEntity-Methoden.

Für eine Updateaktion mithilfe der XRM-Tooling-API ist eine Datennutzlast erforderlich. Die Datennutzlast hat die Gestalt eines Dictionary<string, CrmDataTypeWrapper>-Objekts. CrmDataTypeWrapper wird verwendet, um der Schnittstelle mitzuteilen, welche Verarbeitung auf den Datenpunkt angewendet werden soll, auf den verwiesen wird.

Lesen Sie die folgenden wichtigen Informationen zur Verwendung einer Verbindungszeichenfolge im Anwendungscode.

Wichtig

Microsoft empfiehlt, den sichersten verfügbaren Authentifizierungsflow zu verwenden. Der in diesem Artikel beschriebene Authentifizierungsablauf erfordert ein sehr hohes Maß an Vertrauen in die Anwendung und birgt Risiken, die in anderen Flows nicht vorhanden sind. Sie sollten diesen Flow nur verwenden, wenn andere, sicherere Flows, z. B. verwaltete Identitäten, nicht funktionsfähig sind.

UpdateEntity

Dies ist die Ankermethode zum Aktualisieren eines jeden Datensatzes in Dataverse, mit Ausnahme des Einstellungsstatus oder des Status eines Datensatzes. Um es verwenden zu können, müssen Sie die folgenden Informationen kennen: Schemaname der Tabelle, die Sie aktualisieren möchten, das Primärschlüsselfeld der Tabelle, die Sie aktualisieren möchten, die GUID des Datensatzes, den Sie aktualisieren möchten, und schließlich das Datennutzlastarray um es mit zu aktualisieren.

CrmServiceClient svc = new CrmServiceClient(connectionstring);  
  
// Verify that you are connected  
if (svc != null && svc.IsReady)  
{ 
   // Update the account record  
    Dictionary<string, CrmDataTypeWrapper> updateData = new Dictionary<string, CrmDataTypeWrapper>();  
    updateData.Add("name", new CrmDataTypeWrapper("Updated Sample Account Name", CrmFieldType.String));  
    updateData.Add("address1_city", new CrmDataTypeWrapper("Boston", CrmFieldType.String));  
    updateData.Add("telephone1", new CrmDataTypeWrapper("555-0161", CrmFieldType.String));   
    bool updateAccountStatus = svc.UpdateEntity("account","accountid",_accountId,updateData);  
  
    // Validate if the account record was updated successfully, and then display the updated information  
    if (updateAccountStatus == true)  
    {  
        Console.WriteLine("Updated the account details as follows:");  
        Dictionary<string, object> data = svc.GetEntityDataById("account", accountId, null);  
        foreach (var pair in data)  
        {  
            if ((pair.Key == "name") || (pair.Key == "address1_city") || (pair.Key == "telephone1"))  
            {  
                Console.WriteLine(pair.Key.ToUpper() + ": " + pair.Value);  
            }  
        }  
    }  
}  
else  
{  
    // Display the last error.  
    Console.WriteLine("An error occurred: {0}", svc.LastCrmError);  
  
    // Display the last exception message if any.  
    Console.WriteLine(svc.LastCrmException.Message);  
    Console.WriteLine(svc.LastCrmException.Source);  
    Console.WriteLine(svc.LastCrmException.StackTrace);  
  
    return;  
}  

UpdateStateAndStatusForEntity

Diese Methode wird verwendet, um den Status eines Datensatzes in Dataverse festzulegen. So starten z. B. alle Datensätze im Allgemeinen in einem „geöffneten“ Status. Der Name des Status wird basierend auf dem Typ des Datensatzes und sogar je nach Auswahl des Entwicklers geändert. Ein Angebot enthält beispielsweise mehrere mögliche Status: Entwurf, Aktiv, Schließen, Verloren, Gewonnen.

Um den Status einer Tabelle zu aktualisieren, müssen Sie den Zielstatus und -Status entweder anhand der Namen oder der IDs kennen. Sowohl die Namen als auch die IDs können gefunden werden, indem die Definition für die Tabelle abgefragt und die Status- und Statusfelder angezeigt werden. In diesem Beispiel wird veranschaulicht, wie Sie den Status eines Firmendatensatzes auf Inaktiv festgelegen.

CrmServiceClient svc = new CrmServiceClient(connectionstring);  
  
// Verify that you are connected  
if (svc != null && svc.IsReady)  
{   
    // Here are the state and status code values  
    // statecode = 1 ( Inactive )   
    // statuscode = 2 ( Inactive )   
  
    svc.UpdateStateAndStatusForEntity("account" , accountId , 1 , 2 );  
  
    // the same command using the second form of the method  
    svc.UpdateStateAndStatusForEntity("account" , accountId , "Inactive" , "Inactive");  
}  
else  
{  
    // Display the last error.  
    Console.WriteLine("An error occurred: {0}", svc.LastCrmError);  
  
    // Display the last exception message if any.  
    Console.WriteLine(svc.LastCrmException.Message);  
    Console.WriteLine(svc.LastCrmException.Source);  
    Console.WriteLine(svc.LastCrmException.StackTrace);  
  
    return;  
}  
  

Siehe auch

Verwenden von XRM-Tooling, um eine Verbindung mit Dataverse herzustellen
XRM Tooling API zur Ausführung von Aktionen in Dataverse verwenden