Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Es ist eine häufige Anforderung in Geschäftsanwendungen, Änderungen mehrerer Tabellenzeilen im System zu koordinieren, sodass entweder alle Datenänderungen erfolgreich sind oder keines davon ausgeführt wird. 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 mithilfe der ExecuteTransactionRequest Nachrichtenanforderung ausführen. Um diese Nachricht zu verwenden, füllen Sie die Requests Sammlung mit mindestens zwei Organisationsanforderungen auf, die in der Transaktion ausgeführt werden sollen. Wenn Sie eine Sammlung von Antworten erhalten möchten, wobei für jede ausgeführte Nachrichtenanforderung eine dabei ist, konfigurieren Sie ReturnResponses auf true in der Responses Sammlung. Nachrichtenanforderungen in der Requests Auflistung werden so ausgeführt, wie sie in der Auflistung angezeigt werden, wobei das Element bei Index 0 zuerst ausgeführt wird. Die gleiche Reihenfolge wird in der Responses Sammlung beibehalten.
Wenn eine der Anforderungen fehlschlägt und die Transaktion zurückgesetzt wird, werden alle Während der Transaktion abgeschlossenen Datenänderungen 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.
Eine ExecuteMultipleRequest darf eine oder mehrere ExecuteTransactionRequest-Instanzen enthalten. Eine ExecuteTransactionRequest-Instanz darf weder ein ExecuteMultipleRequest noch ein ExecuteTransactionRequest enthalten. Weitere Informationen ExecuteMultipleRequestfinden Sie unter Ausführen mehrerer Anforderungen mit dem SDK für .NET.
Weitere Informationen: Verwenden Sie keine Batchanforderungstypen in Plug-Ins und Workflowaktivitäten.
Example
In diesem Beispiel wird ein einzelner Webmethodenaufruf verwendet, um alle Nachrichtenanforderungen in einer Auflistung als Teil einer einzelnen Datenbanktransaktion auszuführen. Einstellungen zum Ändern des Ausführungsverhaltens 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