mostafa
I'm new here

project.isLocked() liefert falsches Ergebnis

Hallo zusammen,

ich habe ein Problem mit der Methode project.isLocked(). Ich bekomme immer falsches Ergebnis und weiß nicht woran es liegen kann.

anbei hab ich ein Screenshot geschickt, das dies verdeutlich. Ich hab ein einfaches Skript geschrieben, das die Methode project.isLocked() aufruft.

Die FS-Verion ist 4.2.453.46978

Grüße

Mostafa

0 Kudos
10 Replies
andre
I'm new here

Project#isLocked heisst soviel wie: "Habe ich gerade einen Lock auf die Projekt-Instanz".

gruss

andre

0 Kudos

Danke für die schnelle Antwort.

"Habe ich gerade einen Lock auf die Projekt-Instanz": das Projekt ist durch die Session der Server- und Projektkonfiguration geperrt, wie dies in im Screeshot repräsentiert ist, deshalb sollte die Methode true anstatt false liefern: Projekt geperrt durch andere Session!!

Grüße

Mostafa

0 Kudos

Wenn du im Skript vorher "project.lock;" aufrufst (und das erfolgreich ist, d.h. keine Exception), liefert "project.isLocked()" true. D.h. deine Erwartungshaltung entspricht nicht der Implementierung.

Unabhängig davon würde mich dein Anwendungsfall interessieren.

Peter
0 Kudos

Danke für die Antwort.

um ehrlich zu sein, ich habe deine Antwort nicht gut verstanden. der Case sieht wie folgt aus:

während ich in einem Service versuche, Gruppen anzulegen, prüfe ich davor, ob die Server- und Projektkonfiguration in Bearbeitung bzw. gelockt ist oder nicht. falls ja, kann ich dann die Gruppe nicht anlegen aber durch isLocked kann ich eine eigene Exception (Please close Server- and Project Configuration ...) werfen.

Mit dem Skript will ich nur zeigen, dass die Methode falsches Ergbnis liefert, nämlich false obwohl das Projekt durch ie Session der Server- und Projektkonfiguration geperrt.

Danke

Mostafa

0 Kudos
gockel
Crownpeak employee

Die Methode Project#isLocked() liefert nur dann true, wenn gegen die gleiche Projekt-Instanz auch die Methode #lock() aufgerufen wurde.

Dieses Verhalten gilt für alle Implementierungen von Lockable.

Da dein Service das Projekt nicht selbst gelockt hat, wird diese Methode auch immer "false" liefern.

Du wirst für deinen Anwendungsfall also #lock() aufrufen und die LockException abfangen müssen, um eine spezifische Fehlermeldung geben zu können.

0 Kudos

Danke Sebastian für die Antwort.

Aber ist nicht so, wenn die Projekteigenschaften in Server- und Projektkonfiguration in Bearbeitung ist, ist das Projekt dann gelockt ist (d.h. die Methode #lock aufgerufen ist) und wenn ich in meinem Service/Skript #isLock aufrufe true bekommen sollte und statt false?

Grüße

Mostafa

0 Kudos
gockel
Crownpeak employee

Aber ist nicht so, wenn die Projekteigenschaften in Server- und Projektkonfiguration in Bearbeitung ist, ist das Projekt dann gelockt ist (d.h. die Methode #lock aufgerufen ist) und wenn ich in meinem Service/Skript #isLock aufrufe true bekommen sollte und statt false?

Nein, da der Aufruf von #lock in diesem Fall nicht aus ihrem Service kommt, sondern von der Adminkonsole. Es gibt halt bei Projekt keine analoge Methode #isLockedOnServer() wie bei IDProvider. Eine solche Methode wäre vielleicht wünschenswert, aber es gibt sie derzeit nicht.

0 Kudos

Auch würde so eine Methode nicht helfen, da trotz Überprüfung ein anschliessender Sperr-Versuch fehlschlagen kann, wenn ein anderer Benutzer schneller ist. Der saubere Weg ist der über die Behandlung des "schon gesperrt" Falles in einem "catch"-Block wie oben beschrieben.

Peter
0 Kudos

Hallo zusammen,

vielen Dank für die Hilfe und sorry für meine verspätete Antwort, war in den letzten Tagen krank.

Es ist wirklich schade, dass so eine wichtige Methode (#isLockedOnServer()) nicht gibt. Ich hoffe, dass es ein sinnvollen fachlichen Grund dahinter liegt !!

noch mal vielen Danke an euch Jungs 😉

Grüße

Mostafa

0 Kudos