Führt Nachrichten in einer einzelnen Datenbanktransaktion aus.

In Geschäftsanwendungen ist es üblich, Änderungen mehrerer Tabellenzeilen im System so zu koordinieren, dass entweder alle Datenänderungen erfolgreich sind oder keine. Unter Datenbankbedingungen ist dies bekannt als Ausführung von mehreren Vorgängen in einer einzelnen Transaktion mit der Möglichkeit eines Rollbacks aller Datenänderungen, falls einer der Vorgänge nicht erfolgreich ist.

Sie können zwei oder mehr Anforderungen in einer einzelnen Datenbanktransaktion mit der ExecuteTransactionRequest-Nachrichtenanforderung ausführen. Um diese Nachricht zu verwenden, füllen Sie die Requests-Sammlung mit mehreren Organisationsanforderungen aus, die in der Transaktion ausgeführt werden sollen. Setzen Sie ReturnResponses auf true, wenn Sie in der Responses-Sammlung eine Sammlung von Antworten erhalten möchten, eine für jede ausgeführte Nachrichtenanforderung. Nachrichtenanforderung in der Requests-Sammlung werden in der Reihenfolge ausgeführt, in der sie in der Sammlung angezeigt werden. Das Element bei Index 0 wird zuerst ausgeführt. Dieselbe Reihenfolge wird in der Sammlung Responses beibehalten.

Wenn eine der Anforderungen fehlschlägt und die Transaktion zurückgesetzt wird, werden alle Datenänderungen, die während der Transaktion ausgeführt wurde, rückgängig gemacht. Darüber hinaus wird ExecuteTransactionFault zurückgegeben und gibt den Index für die Anforderungssammlung der Anforderungsnachricht an, die den Fehler verursachte.

ExecuteMultipleRequest enthält eine oder mehrere ExecuteTransactionRequest-Instanzen. Eine ExecuteTransactionRequest-Instanz enthält möglicherweise nicht ExecuteMultipleRequest oder ExecuteTransactionRequest. Weitere Informationen zu ExecuteMultipleRequest finden Sie unter Mehrere Anforderungen mit dem SDK für .NET ausführen.

Beispiel

Dieses Beispiel verwendet einen einzelnen Internet-Methodenaufruf, um alle Message-Anforderungen in der Sammlung als Teil einer einzelnen Datenbanktransaktion auszuführen. Die Einstellungen, die zum Ändern des Ausführungsverhaltens geändert werden müssen, werden ebenfalls angezeigt.

// Create an ExecuteTransactionRequest object.
var requestToCreateRecords = new ExecuteTransactionRequest()
{
// Create an empty organization request collection.
Requests = new OrganizationRequestCollection(),
ReturnResponses = true
};

// Create several (local, in memory) entities in a collection. 
var input = new EntityCollection()
{
EntityName = Account.EntityLogicalName,
Entities = {
            new Account { Name = "ExecuteTransaction Example Account 1" },
            new Account { Name = "ExecuteTransaction Example Account 2" },
            new Account { Name = "ExecuteTransaction Example Account 3" },
            new Account { Name = "ExecuteTransaction Example Account 4" },
            new Account { Name = "ExecuteTransaction Example Account 5" }
        }
};

// Add a CreateRequest for each entity to the request collection.
foreach (var entity in input.Entities)
{
CreateRequest createRequest = new CreateRequest { Target = entity };
requestToCreateRecords.Requests.Add(createRequest);
}

// Execute all the requests in the request collection using a single web method call.
try
{
var responseForCreateRecords =
    (ExecuteTransactionResponse)svc.Execute(requestToCreateRecords);

int i = 0;
// Display the results returned in the responses.
foreach (var responseItem in responseForCreateRecords.Responses)
{
    if (responseItem != null)
    Console.WriteLine("Created " + ((Account)requestToCreateRecords.Requests[i].Parameters["Target"]).Name
        + " with account id as " + responseItem.Results["id"].ToString());
    i++;
}
}
catch (FaultException<OrganizationServiceFault> ex)
{
Console.WriteLine("Create request failed for the account{0} and the reason being: {1}",
    ((ExecuteTransactionFault)(ex.Detail)).FaultedRequestIndex + 1, ex.Detail.Message);
throw;
}

Siehe auch

Nachrichten mit dem SDK für .NET verwenden
Mehrere Anforderungen mit dem SDK für .NET ausführen

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).