Verringern von möglichem Datenverlust mithilfe der optimistischen Parallelität
Veröffentlicht: Januar 2017
Gilt für: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
In einem Multithread- und Mehrbenutzersystem wie Microsoft Dynamics 365 werden Vorgänge und Datenänderungen häufig parallel ausgeführt. Ein Problem entsteht, wenn zwei oder mehr Update- oder Löschvorgänge für dieselben Daten gleichzeitig ausgeführt werden. Dieser Fall kann möglicherweise zu Datenverlusten führen. In dieser SDK-Version können die Anwendungen feststellen, ob ein Entitätsdatensatz auf dem Server zwischen dem Abrufen des Datensatzes durch die Anwendung und dem Versuch der Anwendung, den Datensatz zu aktualisieren oder zu löschen, geändert wurde.
Optimistische Parallelität wird für alle vordefinierten Entitäten, die für die Offlinesynchronisierung aktiviert sind, und für alle benutzerdefinierten Entitäten unterstützt. Sie können feststellen, ob eine Entität die optimistische Parallelität unterstützt, indem Sie die Metadaten der Entität durch einen SDK-Aufruf abrufen oder die Metadaten mit dem Metadatenbrowser anzeigen und prüfen, ob das Attribut IsOptimisticConcurrencyEnabled auf true festgelegt ist. Bei benutzerdefinierten Entitäten wird diese Eigenschaft standardmäßig auf true festgelegt.Zum Anzeigen der Entitätsmetadaten für Ihre Organisation installieren Sie die Metadatenbrowserlösung, die in Durchsuchen der Metadaten für die Organisation beschrieben ist. Sie können auch die Metadaten für ein nicht angepasstes Unternehmen in einer Excel-Tabellenkalkulation mit der Bezeichnung EntityMetadata.xlsx anzeigen, die im obersten Ordner des SDK-Downloads enthalten ist.
In diesem Thema
Aktivieren der optimistischen Parallelität
Aktualisieren oder Löschen eines Datensatzes
Verarbeiten von Ausnahmen
Aktivieren der optimistischen Parallelität
Sie können das Prüfverhalten der optimistischen Parallelität aktivieren, wenn Sie UpdateRequest ausführen, indem Sie die Eigenschaft ConcurrencyBehavior der Anforderung auf IfRowVersionMatches setzen. Entsprechend legen Sie für DeleteRequest die Eigenschaft ConcurrencyBehavior fest.
Wennn Sie den Organisationsdienstkontext für Datenänderungen verwenden, legen Sie ConcurrencyBehavior für das Objekt OrganizationServiceContext fest. Dieser Wert wird an alle UpdateRequest- und DeleteRequest-Nachrichten weitergegeben, die von OrganizationServiceContext verwendet werden, wenn SaveChanges aufgerufen wird.
Das Verhalten der optimistischen Parallelität kann nur durch einen SDK-Aufruf festgelegt werden. Es gibt momentan keine Einstellung dafür in Formularen der Webanwendung.
Aktualisieren oder Löschen eines Datensatzes
Nachdem Sie einen Datensatz abgerufen haben, greifen Sie auf das Attribut RowVersion zu, um die aktuelle Version dieses Datensatzes zu erhalten. In dem Entitätsobjekt, das Sie als Target in der UpdateRequest verwenden, setzen Sie die Eigenschaft RowVersion auf den Wert aus dem abgerufenen Datensatz und führen die Anforderung aus. Ähnlich legen Sie im Entitätsreferenzobjekt, das Sie als Target in DeleteRequest verwenden, die Eigenschaften RowVersion auf den Zeilenversionswert fest, der aus dem Datensatz abgerufen wurde, und führen die Anforderung aus.
Falls die Entität, die an UpdateRequest übergeben wird, verknüpfte Entitäten enthält, wird das gleiche Verhalten für alle Aktualisierungsvorgänge mithilfe der Zeilenversionen angewendet, die mit einer einzelnen Entität angegeben wurden.
Wenn die Anforderung von der Plattform empfangen wird, wird ein Entitätsdatensatzzeilenversion Vergleich der aktuellen und der in der Anforderung Zeilenversion ausgeführt. Wenn die Zeilenversionen übereinstimmen und ConcurrencyBehavior auf IfRowVersionMatches festleget wird, verläuft der Vorgang erfolgreich. Andernfalls wird eine Fehlerausnahme zurückgegeben.
Verarbeiten von Ausnahmen
Es gibt mehrere Fehlerzustände, die in FaultException<OrganizationServiceFault> aus dem Webdienstaufruf zurückgegeben werden können, wenn die optimistische Parallelität verwendet wird.
ConcurrencyVersionMismatch (code=-2147088254)
Wenn eine Zeilenversion bereitgestellt wurde und das IfVersionMatches-Verhalten angegeben wird, falls die Version des vorhandenen Datensatzes nicht mit der in der Anforderung bereitgestellten Zeilenversion übereinstimmt, wird ein Fehler zurückgegeben.
ConcurrencyVersionNotProvided (code= -2147088253
Wenn das IfVersionMatches-Verhalten angegeben ist und kein Wert für die Zeilenversion bereitgestellt wurde, wird ein Fehler zurückgegeben.
OptimisticConcurrencyNotEnabled (code=-2147088243)
Wenn das IfVersionMatches-Verhalten für ein Update einer Entität angegeben wird und die optimistische Parallelität nicht aktiviert ist, wird ein Fehler zurückgegeben.
Sie können die Code-Eigenschaft des zurückgegebenen Fehlers prüfen, um zu ermitteln, ob der Fehler mit der optimistischen Parallelität zusammenhängt. Die Codes für die oben Fehlerzustände werden oben angezeigt und stammen aus dem ErrorCodes.cs-Hilfscode.
Siehe auch
Microsoft Dynamics 365 auf dem Server erweitern
Beispiel: Nutzung der optimistischen Parallelität mit Aktualisierungs- und Löschaktivitäten
Microsoft Dynamics 365
© 2017 Microsoft. Alle Rechte vorbehalten. Copyright