Sperreinträge Transaktionsübergreifend behandeln

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

Sperreinträge Transaktionsübergreifend behandeln

Beitrag von ewx (Top Expert / 4913 / 332 / 653 ) »
Hallo,

ich habe ein Problem beim Sperren/ Entsperren:

In der Transaktion Z_EINS wird ein Objekt mit dem SAP-Standard-Sperrbaustein "ENQUEUE_XYZ" gesperrt.

Dann wird zur weiteren Bearbeitung in die Transaktion Z_ZWEI gewechselt. Hier kann nun das zu bearbeitende Objekt gewechstelt werden. Dazu muss dann das alte Objekt entsperrt und das neu gesperrt werden. Nur leider funktioniert das Entsperren des Objektes nicht. Ich nehme an, dass die Transaktion Z_ZWEI keine "Berechtigung" hat, das Objekt zu entsperren, da es in der Transaktion Z_EINS gesperrt wurde.

Der FuBa DEQUEUE_ALL scheitert an dem selben Problem.

Wenn ich die Programmierung in der Art:
Transaktion Z_EINS:
Objekt 123 sperren
Bearbeitung
Objekt 123 entsperren
Call Transaktion Z_ZWEI
Objekt 123 sperren
...

Dann habe ich die Befürchtung, dass in der Zeit zwischen Entsperren und Sperren in der neuen Transaktion ein anderer User dazwischen funken kann.

:?: Hat jemand ein Idee?

fragt Enno.

PS: Sorry, ist in die falsche Kategorie gerutscht! Hat natürlich nix mit OO-Programmierung zu tun... :oops:

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von LoLo ( / / 0 / 3 ) »
Moin Enno,

wie hast'n das programmiert? Call Transaction? Springst Du von einer Dialogtransaktion in eine andere Dialogtransaktion? In dem Falle müßte es doch sowieso so sein, dass die Sperren abgebaut werden (da ja dann ein automatischer commit erfolgt)?

LoLo

Beitrag von ewx (Top Expert / 4913 / 332 / 653 ) »
Hi LoLo,

ein einfacher CALL TRANSACTION 'Z_ZWEI'.
Die Sperren werden aber nicht abgebaut; es erfolgt kein Commit Work!

Das Objekt ist übrigens auch nicht mehrfach gesperrt.
ich habe schon ein

Code: Alles auswählen.

Do 10 Times.

  call Function 'ENQUEUE_XYZ'.

Enddo.
versucht.

Gruß, Enno.

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) »
Bei Call TC wird die PID nicht gewechselt.
Die Sperre bleibt daher bestehen.
Ausweg:
Unmittelbar vor CALL entsperren und
sofort wieder Sperren.

Oder den Entsperrmechanismus aus SE12 benutzen.
Ist aber heikel...

Gruss
Daniel

Beitrag von LoLo ( / / 0 / 3 ) »
Hi Enno,

setzt die 2. Transaktion auch eine Sperre ab, so dass Du evtl. kummulative Sperren sitzen hast? Normalerweise sollte über ein Aufruf von DEQUEUE die Sperre entfernt werden können. Wie wird denn die erste Sperre gesetzt? _SCOPE = 3?
Hast Du mal über die SM12 nachgeschaut? Eigentlich gehört die Sperre ja dem Dialogbenutzer insofern muss es möglich sein, in eine andere Transaktion zu springen und dort die Sperre über einen Dequeue wieder abzubauen.
Probier doch mal über die SE37 den DEQUEUE auszuführen, wenn die Sperre in der SM12 sitzt. Dann kannst Du wenigsten prüfen, ob die Sperrargumente die richtigen sind um die Sperre abzubauen.

LoLo

Sperren

Beitrag von ewx (Top Expert / 4913 / 332 / 653 ) »
Hallo LoLo/ Daniel,

danke für eure Unterstützung!

Die Idee, die Sperreinträge einfach zu löschen (SM12) ist natürlich möglich, aber -- wie gesagt -- heikel.

Die Sperren werden nicht kumuliert.
Ich habe auch schon _SCOPE 1, 2 und 3 ausprobiert, ohne Erfolg.

Es scheint tatsächlich daran zu liegen, dass die Sperre aus Transaktion Z_EINS nicht in Transaktion Z_ZWEI zurückgenommen werden kann... :--(

Aufgrund dieser Problematik haben wir das Sperren schon umgestellt und machen einen DB-Update beim Sperren/ Entsperren.

Da bleiben natürlich Sperren hängen, wenn sich jemand nicht ordnungsgemäß abmeldet...

Aber das Risiko, dass jemand beim
Entsperren -> Call Transaction -> Sperren
dazwischen funkt, ist mir auch zu groß, da viele Benutzer mit dem System arbeiten werden.

Ich habe mal eine Meldung an die SAP geschickt; mal sehen, was die sagen... Wenn die doch auch nur so eine Reaktionszeit hätten, wie ihr!

Vielen Dank!
Enno.

Beitrag von ewx (Top Expert / 4913 / 332 / 653 ) »
Hallo,

laut SAP ist es tatsächlich so, dass die Sperren nicht transaktionsübergreifend aufgehoben werden können.
Jedenfalls nicht im Normalfall. Es gibt da wohl einen Trick, der bei RFC's verwendet wird. Aber den wollen sie mir noch nicht verraten....
Enno

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

mir ist der Anwendungsfall noch nicht ganz klar.

Erst wird ein Objekt ausgewählt und gesperrt,

Dann wird mit Übergabe des Objektes eine "Pflegetransaktion" aufgerufen.

Die kann dann pflegen oder das Objekt wechseln ...

Da hilft nur, kurz vorher entsperren und danach wieder sperren, mit nicht ganz 100%-igem Erfolg.

Man kann natürlich die Sperre erst in der zweiten Transaktion setzen, wenn das mit "gesperrt!" zurückkommt, sitzt da noch jemand drauf.

Oder wie wäre es, den Objektwechsel nur in der aufrufenden Transaktion vornehmen zu lassen.

Die Pflegetransaktion beendet sich mit einer Meldung S... und fordert bei der aufrufenden den Wechsel des Objektes (mit Entsperren Sperren) und wird dann wieder aufgerufen. (Ist aber wirklich durch die Brust ins Auge).

Oder Du sparst Dir ganz die erste Transaktion und packst das alles in eine.

mfg.
babap

Beitrag von ewx (Top Expert / 4913 / 332 / 653 ) »
babap hat geschrieben:Hallo,

mir ist der Anwendungsfall noch nicht ganz klar.

Erst wird ein Objekt ausgewählt und gesperrt,

Dann wird mit Übergabe des Objektes eine "Pflegetransaktion" aufgerufen.

Die kann dann pflegen oder das Objekt wechseln ...

Da hilft nur, kurz vorher entsperren und danach wieder sperren, mit nicht ganz 100%-igem Erfolg.
eben... das ist mir zu unsicher.
Man kann natürlich die Sperre erst in der zweiten Transaktion setzen, wenn das mit "gesperrt!" zurückkommt, sitzt da noch jemand drauf.

Oder wie wäre es, den Objektwechsel nur in der aufrufenden Transaktion vornehmen zu lassen.
Das wäre noch eine gute Idee!
Die Pflegetransaktion beendet sich mit einer Meldung S... und fordert bei der aufrufenden den Wechsel des Objektes (mit Entsperren Sperren) und wird dann wieder aufgerufen. (Ist aber wirklich durch die Brust ins Auge).

Oder Du sparst Dir ganz die erste Transaktion und packst das alles in eine.
Das ist eben doch recht aufwändig, weil es sich insgesamt um drei recht große Transaktionen handelt. Das wäre so ähnlich, als hätte ich Probleme beim Sperren eines Vertriebsbeleges wenn ich über den Belegfluß navigiere und du mir rätst, die VA02, VL02n, VF02 etc in eine Transaktion zu packen.

mfg.
babap
Vielen Dank für deine Vor- und Ratschläge!

Gruß, Enno Wulff.

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) »
Hole die ENQ-ID in der 1. Transaktion
und übergebe diese (memory ?) an die 2. Transaktion.

Code: Alles auswählen.

   call 'C_ENQUEUE'
        id 'OPCODE' field '7'
        id 'ENQKEY' field euser.

Dort mit dem FB SET_ENQUEUE_OWNER und der gemerkten ID in den Sperrzustand der 1. Transaktion versetzten. Diese verhält sich nun
als wäre Sie nie verlassen worden.

Code: Alles auswählen.

   call function 'SET_ENQUEUE_OWNER'
        exporting user                = euser
                  usvb                = euser
        exceptions illegal_input       = 1
                   others              = 2.
Der 2. Parameter ist für den Verbucher - der besser noch nicht aufgerufen wurde...

Gruss
Daniel

Re: Hole die

Beitrag von michael.duerr (ForumUser / 1 / 0 / 0 ) »
Hallo Daniel,


mal kurz eine Frage zum Versorgen der 2. Transaktion mit den notwendigen Owner-Angaben: Wann und wo wird der FB 'SET_ENQUEUE_OWNER' denn aufgerufen? Ist da eine Modifikation der 2. Transaktion notwendig?


Vielen Dank im voraus!


Ciao, Michael

Seite 1 von 1

Vergleichbare Themen

12
Antw.
9237
Views
Daten-Zugriff transaktionsübergreifend
von David11384 » 05.11.2013 09:42 • Verfasst in Dialogprogrammierung
8
Antw.
4861
Views
Dynpro-Events in ALV behandeln
von RBC01 » 16.09.2008 16:05 • Verfasst in ABAP Objects®
1
Antw.
1975
Views
Ausnahmeklasse mit Bapireturn anreichern o.direkt behandeln
von RIG » 27.04.2018 13:18 • Verfasst in ABAP Objects®
15
Antw.
16328
Views
Sperreinträge auf Stammsätze auslesen
von Ranganga » 20.11.2007 15:24 • Verfasst in Human Resources
1
Antw.
2873
Views
Sperreinträge die nicht aufgelöst werden
von jspranz » 28.06.2007 17:12 • Verfasst in Web-Dynpro, BSP + BHTML

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.