Autor Thema: @Prompt([OkCancelEdit]...) und Abbruchfunktion  (Gelesen 4813 mal)

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
@Prompt([OkCancelEdit]...) und Abbruchfunktion
« am: 27.12.17 - 14:02:44 »
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}
   )
);

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

Frank
« Letzte Änderung: 04.01.18 - 13:11:07 von FrankLU »
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: @Prompt([OkCancelEdit]...) und Abbruchfunktion
« Antwort #1 am: 27.12.17 - 19:10:18 »
wie wäre es mit einer zusätzlichen Maske, die mit @DialogBox aufgerufen wird? Da kannst Du den Parameter [NOCANCEL] mitgeben.

hth

Thomas

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.710
  • Geschlecht: Männlich
Re: @Prompt([OkCancelEdit]...) und Abbruchfunktion
« Antwort #2 am: 28.12.17 - 06:48:39 »
Das Problem ist

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

Daher solltest Du den Vorschlag von Thomas aufgreifen
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline ronka

  • Senior Mitglied
  • ****
  • Beiträge: 377
  • Was macht der hier denn, muß der überall sein ?
    • das nächste DominoCamp kommt in Juni 2023
Re: @Prompt([OkCancelEdit]...) und Abbruchfunktion
« Antwort #3 am: 28.12.17 - 11:19:18 »
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 );
« Letzte Änderung: 28.12.17 - 11:28:06 von ronka »
das neueste von Notes und Domino auf den DominoCamp vom 19 bis 21 Juni 2023 auf www.DominoCamp.de

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 233
  • Geschlecht: Männlich
Re: @Prompt([OkCancelEdit]...) und Abbruchfunktion
« Antwort #4 am: 02.01.18 - 13:09:10 »
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

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Re: @Prompt([OkCancelEdit]...) und Abbruchfunktion
« Antwort #5 am: 04.01.18 - 13:10:23 »
Hallo!

Ich wünsche Euch allen erstmal noch alles Gute für das Neue Jahr!

Danke für die Vorschläge! Ich werde die Lösung von Thomas mit der @DialogBox umsetzen, denn neben der genannten Datenbank müssen auch noch andere Datenbanken in den Lesezeichen umgestellt werden, die aber nur indirekt geöffnet werden (z.B. Kundenstammdaten). Die  Erfahrung hat gezeigt, wenn Auftrags- und Kundenstammdaten in ihren Lesezeichen auf unterscheidliche Server zeigen, gibt es Probleme bei eingebetteten Ansichten oder mit berechneten Feldern in Dokumenten der Auftrags-DB beim @DBLookup in die andere Datenbank, egal, ob im @DBLookup ein Server explizit genannt wird (durch die Reprik-ID) oder nicht.

@Werner: Danke für den Hinweis. Meine Erfahrung zeigt aber, dass der Aufruf eines Dokuments per DocLink ziemlich zufällig erfolgen kann, das heißt z.B. dass ich schon einmal ein Dokument per DocLink zugeschickt bekam, das verlinkte Dokument dann aber von einer Replik einer DB auf einem Server geöffnet wurde, auf den der Absender selber gar keinen Zugriff hat, sondern nur Server und Admins. Warum das passiert, konnte ich nie in Erfahrung bringen.
Die Db ist natürlich aus Gründen der Ausfallsicherheit auf zwei Servern vorhanden, die sich in einem Cluster befinden. Aber auch hier hat die Realität gezeigt, dass es verstärkt zu Replizierkonflikten kommt, wenn die Benutzer beide Server gleichzeitig benutzen, zumal neben den Benutzern auch Agenten die Aufträge im Hintergrund bearbeiten, sie auf Ihre Fälligkeit hin überprüfen und entsprechende Kennzeichen setzen. Ich setze eine programmierte Dokumentensperre ein, nicht die systemeigene, weil dies auch zu Problemen führte. Wir haben einen 7/24-Betrieb und wenn einzelne Mitarbeiter, die von einem anderen Kontinent per RDP bzw. VPN auf unsere Server zugreifen, mit Ihrer Sitzung abstürzen und sich das LN dann beendet, weil das Internet mal wieder weg ist, dann klingelt bei mir nachts um 3 Uhr das Telefon, weil die Dokumente gesperrt sind.
Bisher wird auch die ACL der DB repliziert. Inwiefern man das ändern kann, muss ich unseren SysAdmin fragen.

Ich grüße Euch!
Frank
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: @Prompt([OkCancelEdit]...) und Abbruchfunktion
« Antwort #6 am: 04.01.18 - 13:21:43 »
..., das heißt z.B. dass ich schon einmal ein Dokument per DocLink zugeschickt bekam, das verlinkte Dokument dann aber von einer Replik einer DB auf einem Server geöffnet wurde, auf den der Absender selber gar keinen Zugriff hat, sondern nur Server und Admins. Warum das passiert, konnte ich nie in Erfahrung bringen.
Das hängt davon ab, welche Kachel der Replik auf Deinem Desktop zuoberst liegt. Ist auch sinnvoll, dann greift jeder auf die Datenbank, die für ihn am günstigsten ist, und nicht für den Absender.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz