Ansicht
Dokumentation

ABENBDL_ETAG - BDL ETAG

ABENBDL_ETAG - BDL ETAG

rdisp/max_wprun_time - Maximum work process run time   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- etag

ETag for active version

  etag master MasterField
$| etag dependent by _Assoc


ETag for draft version
  total etag TotalEtagField

Varianten:

1. ... etag master MasterField

2. ... etag dependent by _Assoc

3. ... total etag TotalEtagField

Wirkung

Hiermit wird ein Feld als Entitäts-Tag-Feld (ETag-Feld) für das optimistische Concurrency-Control definiert. Ein als ETag ausgezeichnetes Feld wird dazu verwendet, den Zustand einer angeforderten Ressource (zum Beispiel eine bestimmte Entitätsinstanz) eindeutig zu beschreiben. Durch Änderungen an der angeforderten Ressource wird das ETag-Feld aktualisiert. Bei jeder Änderungsanforderung wird der Wert des ETag-Feldes mit dem vom RAP-BO-Consumer mit der Anforderung geschickten Wert verglichen und nur bei Übereinstimmung dieser Werte wird die Änderungsanforderung akzeptiert. So können Inkonsistenzen und ungewollte Datenänderungen vermieden werden, wenn mehrere Benutzer gleichzeitig mit den gleichen Daten arbeiten. Oft werden Feldern mit Zeitstempeln, Hash-Werten oder anderer Versionierung verwendet, die eine genaue Version des Datensatz identifizieren.

etag master und etag dependent können optional mit den persistenten Daten eines Business-Objekts verwendet werden. Sie werden separat für jede RAP-BO-Entität auf Entitätsebene in den Entitätsverhaltensmerkmalen definiert. Falls eine Entität eine Master-ETag-Entität ist, besitzt sie ein eigenes ETag-Feld. Eine ETag-abhängige Entität verwendet das ETag-Feld einer anderen Entität für das optimistische Concurrency-Control.

total etag steht nur entwurfsfähigen Business-Objekten zur Verfügung und ist für diese Objekte empfohlen. Hiermit werden die Übergänge von aktiven Daten zu Entwurfsdaten und umgekehrt verwaltet.

In einem verwalteten RAP-BO kann das optimistische Concurrency-Control mit ETag-Feldern über den verwalteten RAP-BO-Provider behandelt werden, damit eine Implementierung im ABAP-Behavior-Pool nicht notwendig ist. Dies ist nur möglich, sofern folgende Voraussetzungen vorliegen:

  • Der Lesezugriff auf das Master-ETag-Feld muss aus jeder ETag verwendenden Entität garantiert sein.

In einer Projektions- oder Interface-Verhaltensdefinition kann die optimistische Concurrency-Control-Funktionalität mit dem Schlüsselwort use etag wiederverwendet werden. Weitere Informationen finden Sie im Abschnitt CDS BDL - Verwendung.

Hinweise

  • In entwurfsfähigen RAP-BOs komplementieren sich total ETag und ETag master/dependent und es wird empfohlen, dass sie zusammen verwendet werden. Da die beiden verschiedenen Zwecken dienen, müssen separate Felder für das Einschalten beider Funktionalitäten verwendet werden.
  • Das RAP-Framework bietet Wiederverwendungsdatenelemente an, die als Etag- und Total-ETag-Felder verwendet werden können. Weitere Information ist unter RAP Reuse Data Elements zu finden.

Entwicklungsleitfaden für das ABAP-RESTful-Anwendungsprogrammiermodell, Abschnitt Optimistic Concurrency Control.

Beispiel - Verwaltet

Im folgenden Beispiel wird eine auf der CDS-Wurzel-View-Entität DEMO_RAP_MANAGED_DRAFT_1 basierte verwaltete BDEF gezeigt. Die BDEF ist entwurfsfähig und definiert sowohl ein total etag-Feld als auch ein etag master-Feld.

Mit dem Programm DEMO_RAP_UNMANAGED_AUTH wird über EML auf das Business-Objekt zugegriffen und die folgenden Aktionen ausgeführt:

  • Es wird zuerst eine neue Entwurfsinstanz angelegt.
  • Danach wird eine neue aktive Instanz angelegt.
  • Zum Schluss wird die neue Entwurfsinstanz aktiviert.

Die Einträge der Datenbanktabellen nach jeder dieser Aktionen werden gezeigt. Das ETag-Feld und das gesamte ETag-Feld der persistenten Datenbanktabelle werden automatisch mit einem Zeitstempelzeitraum gefüllt.

Ergebnis: das ETag-Feld LCHG_DATE_TIME und das gesamte ETag-Feld CREA_DATE_TIME werden mit einem Zeitstempelwert automatisch gefüllt.

IMAGE @@ABDOC_ETag.png@@635@@359@@

Beispiel - Nicht verwaltet

Im folgenden Beispiel wird eine auf der CDS-Wurzel-View-Entität DEMO_RAP_UNMANAGED_DRAFT_ROOT basierte nicht verwaltete BDEF gezeigt. Die BDEF ist entwurfsfähig und definiert sowohl ein total etag-Feld als auch ein etag master-Feld.

Im ABAP-Behavior-Pool liefert die create-Methode Werte für die etag master- und die total etag-Felder über die Funktion GET TIME STAMP.

Quelltextausschnitt:

Mit dem Programm DEMO_RAP_UNMANAGED_TOTAL_ETAG wird über EML auf das Business-Objekt zugegriffen und die folgenden Aktionen ausgeführt:

  • Es wird zuerst eine neue Entwurfsinstanz angelegt.
  • Danach wird eine neue aktive Instanz angelegt.
  • Zum Schluss wird die neue Entwurfsinstanz aktiviert.

Ergebnis: das ETag-Feld LCHG_DATE_TIME und das gesamte ETag-Feld CREA_DATE_TIME werden mit einem Zeitstempelwert automatisch gefüllt.

IMAGE @@ABDOC_ETag.png@@635@@359@@

Variante 1

... etag master MasterField


Wirkung

  • Hiermit wird eine Entität als ETag-Master definiert und ein Feld MasterField für die Änderungsprotokollierung zugeordnet. Wurzelentitäten sind oft ETag-Master, die die Änderungen jeder Business-Objektentität protokollieren, die zum BO gehört.
  • In einem verwalteten RAP-BO kann unter folgenden Bedingungen ein Wert für das gesamte ETag-Feld automatisch geliefert werden:
  • das ETag-Feld MasterField muss in CDS mit der Annotation @Semantics.systemDateTime.localInstanceLastChangedAt: true versehen sein

  • der Datentyp muss datumskompatibel sein.

  • In einem nicht verwalteten RAP-BO ist es die Verantwortung des Anwendungsentwicklers, dass ein Wert für das gesamte ETag-Feld über das Füllen des jeweiligen Feldes in der Implementierung aller MODIFY ENTITY-Operationen geliefert wird.
  • Bei der Auswahl eines nicht automatisch aktualisierten Elements als ETag-Feld muss gewährleistet sein, dass der ETag-Wert bei jeder MODIFY ENTITY-Operation über Determinierungen aktualisiert wird.
  • In einem verwalteten RAP-BO ist die RAP-Leseoperation immer implizit verfügbar und diese Voraussetzung daher immer erfüllt.

Variante 2

... etag dependent by _Assoc


  • Hiermit wird eine Entität als ETag-abhängig definiert. Das heißt, diese Entität hat kein eigenes ETag-Feld und verwendet das ETag-Feld der ETag-Master-Entität. Die Assoziation mit dem ETag-Master-Entität muss im Entitätsverhaltensrumpf über folgende Syntax explizit lesefähig gemacht werden:
association _AssocToETagMaster { }
Diese Assoziation muss auch im zugrunde liegenden CDS-Datenmodell definiert sein.
  • Eine ETag-Master-Entität muss immer höher als ihre abhängigen Entitäten in der BO- Kompositionsstruktur stehen.
  • Mit folgender kurzer Syntaxform wird eine Zusammenfassung der Sperrabhängigkeit, ETag-Abhängigkeit und Berechtigungsabhängigkeit angeboten:
($[lock$]$[, authorization$]$[, etag$]) dependent by _assoc
Weitere Details sind im Thema syntax_short_form enthalten.

Variante 3

... total etag TotalEtagField


Hiermit wird ein Feld als gesamtes ETag-Feld für entwurfsfähige Szenarien definiert, um optimistische Concurrency-Prüfungen beim Übergang von Entwurfsdaten zu persistenten Daten zu ermöglichen. Wenn ein Benutzer im Entwurfsmodus Daten bearbeitet und nach Ablauf der Schreibsperre seiner Sitzung zurückkommt, prüft total etag, ob während der Abwesenheit persistente Daten geändert wurden. Das total etag-Field wird nach jeder Änderung des persistenten Zustands aktualisiert. Um eine Entwurfsversion wieder zu bearbeiten, vergleicht die Infrastruktur erst das total etag der persistenten Version und der Entwurfsversion und der Entwurf kann nur bei Gleichheit dieser Werte weiter bearbeitet werden.

Das gesamte ETag-Feld ist in den Entitätsverhaltensmerkmalen der lock master-Entität (zur Zeit mit der Wurzelentität identisch) definiert und steuert das gesamte Business-Objekt. Ein gesamtes ETag-Feld ist für entwurfsfähige BOs empfohlen. Die Position ist wichtig und es muss direkt nach der Sperr-Master-Definition im Verhaltensdefinition definiert werden.

Ein Wert für das gesamte ETag-Feld kann unter folgenden Bedingungen automatisch im verwalteten RAP-BO geliefert werden:

  • Das als TotalEtagField angegebene Feld muss in CDS mit der Annotation @Semantics.systemDateTime.lastChangedAt: true versehen sein und der Datentyp muss datumskompatibel sein.
  • Das gesamte ETag-Feld muss bei Ungleichheit seines Namens in der Datenbanktabelle und im CDS-View-Modell in die Typabbildung im Rumpf der Entitätsverhaltensdefinition aufgenommen werden.

In nicht verwalteten RAP-BOs ist es die Verantwortung des Anwendungsentwicklers, dass ein Wert für das gesamte ETag-Feld über das Füllen des jeweiligen Feldes in der Implementierung aller MODIFY ENTITY-Operationen geliefert wird.

Hinweis

Wenn der strikte BDEF-Modus eingeschaltet ist, benötigen entwurfsfähige Szenarien ein total etag-Feld. Andernfalls kommt es zu einem Syntaxfehler.

Weitere Details finden Sie im Abschnitt Total ETag im Entwicklungsleitfaden für das ABAP-RESTful-Anwendungsprogrammiermodell.






PERFORM Short Reference   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 17408 Date: 20240523 Time: 174716     sap01-206 ( 295 ms )