Domino 9 und frühere Versionen > ND9: Entwicklung

@Prompt([OkCancelEdit]...) und Abbruchfunktion

(1/2) > >>

FrankLU:
Hallo!

Ich hoffe, alle hatten ein Frohes Weihnachtsfest. Meine Fröhlichkeit hat heute ein jähes Ende gefunden, weil ich an einer Formel sitze, und es nicht funktionieren will. Vielleicht könnt ihr mir helfen.

Ausgangssituation: Eine Datenbank mit dem Namen "TEO" ist als Replik auf zwei Servern vorhanden. Da die Datenbank recht groß ist, die Anwendung aber zeitkritisch ist, ist es erforderlich, dass alle Benutzer die Datenbank vom selben Server aus starten und nutzen. Ansonsten gibt es Konfliktdokumente. Um sicherzustellen, dass die Benutzer auf dem "richtigen" Server arbeiten, ist in der Datenbank ein Datenbank-Dokument (Form = "MCStm") vorhanden, das neben anderen Parametern auch den aktuell zu nutzenden Server im Feld "StmServer" enthält.

Beim Öffnen der DB soll nun überprüft werden, ob das Lesezeichen des Benutzers auch auf den "richtigen" Server verweist. Ist das nicht der Fall, wird ein Hinweis ausgegeben, der zum Umstellen des Servers auffordert. Wird das vom Benutzer nur mit OK bestätigt, so öffnet er die DB auf dem falschen Server, und ich habe den Ärger.

Ich will nun erreichen, dass das Öffenen der DB auf dem falschen Server zwar möglich bleibt, aber nur dann geschieht, wenn der Benutzer die Nutzung des "falschen" Servers durch die Eingabe des Namens bestätig. Und da beginnt mein Problem.

Meine folgende Formel funktioniert soweit. Sie wird im PostOpen einer Begrüßungsseite zur DB aufgerufen. Stimmt der Server nicht, muss etwas eingegeben werden. Wird etwas anderes eingegeben als der Servername auf dem Lesezeichen, wird die Eingabeaufforderung wiederholt. Was allerdings nicht funktioniert, ist die Abbruch-Bedingung. Wird im Prompt auf "Abbrechen" geklickt, wird die Abarbeitung der gesamten Formel gestoppt (so steht es auch in der Hilfe, zumindest verstehe ich das so, was da steht), nachfolgende Befehle werden ignoriert, und anstatt die Anwendung zu schließen, geht's einfach weiter - auf dem falschen Server.

Wie bekomme ich den Abbruch hin, der aber noch was machen soll? Welche Alternative habe ich, außer LS?

In allen @Prompt-Beiträgen im Forum wird nie auf diesen Abbruch-Fall eingegangen. Anscheinend gehen alle davon aus, dass da nie ein Benutzer draufklickt.  ;)


--- Zitat ---TEOServer := @DbLookup("Notes":"NoCache";"";"ViewStm";"MCStm";"StmServer";[FailSilent]);
AktServer := @Name([CN];@ServerName);
tmp := "";

Meldung := "Sie arbeiten nicht auf Server " + @UpperCase(TEOServer) + @Char(13) + "Bitte beenden Sie TEO. Schließen Sie alle Dokumente, schalten auf Server " + @UpperCase(TEOServer) + " um und starten TEO erneut." + @Char(13) + @Char(13) + "(Nur nach Rücksprache mit oder Aufforderung durch die IT auf einem anderen, zu benennenden Server weiterarbeiten!)";

@If(AktServer = TEOServer; "";
   @While(tmp != AktServer;
      tmp := @LowerCase(@Prompt([OkCancelEdit]; "TEO - Falscher Server"; Meldung; ""));
      @If(tmp = ""; @Prompt([OK];"Test";"Test"); "");    {Nur zu Testzwecken, wird leider ignoriert}
      @If(tmp = ""; @Return(""); "")     {Wird leider ignoriert}
   )
);

--- Ende Zitat ---

Vielen Dank für Eure Unterstützung! Und für das Neue Jahr alles Gute!

Frank

TRO:
wie wäre es mit einer zusätzlichen Maske, die mit @DialogBox aufgerufen wird? Da kannst Du den Parameter [NOCANCEL] mitgeben.

hth

Thomas

eknori (retired):
Das Problem ist


--- Zitat --- ... If the user selects Cancel, Notes/Domino cancels the formula evaluation.
--- Ende Zitat ---

Daher solltest Du den Vorschlag von Thomas aufgreifen

ronka:
schon mal den diesen befehl angesehen ?
Damit kannst du den User erzwingen einen bestimmten Server basierte Datenbank zu Öffnen

@PostedCommand([FileOpenDatabase]; RichtigeServer : DbName )

Und mit einen @Command([FileCloseWindow]) sollte das aktuelle dann auch vorher geschlossen werden können.

Du kannst sogar noch ein schritt weiter gehen und den das Icon Ändern, entweder löschen oder umbenennen (andere server setzen) damit die es auf den Server auch nicht mehr öffnen könnten.
@PostedCommand([RenameDatabase]; @DbName ; S2 );

Werner Götz:
Hallo Frank!

Ist Dir / Euch bewusst, dass das PostOpenDatabase nicht immer durchlaufen wird, ich glaube z.B. wenn man Dokumente via DocLinks öffnet, aber noch in ein paar Situationen mehr...

Von daher sollte man überlegen, wie man das Problem am besten von Grund auf angeht sauber usw.
Warum gibt es also die DB auf den beiden Servern? Laufen die beiden Server als Cluster?
Müsste man auch das PostOpen der einzelnen Dokumente überprüfen?
Könnte der Zugriff auf 1 Replik via ACL eingeschränkt werden?

Viele Grüße
-Werner

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln