Autor Thema: Serverwechsel beim Öffnen einer DB übers Lesezeichen klappt nicht  (Gelesen 4382 mal)

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Hallo!

Nachdem mir bei meinem letzten Problem wieder mal so gut geholfen wurde, habe ich nun noch eins. Bei der Frage, wie ich den Benutzer dazu bringen kann, eine DB-Replik von einem bestimmten Server zu öffnen, wurde mir von ronka folgendes geraten:

Zitat
@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 );

Mein Problem ist nun aber: Wo baue ich diese Befehle ein?

Meine DB öffnet beim Start eine Rahmengruppe, die zwei Ansichten enthält. Bisher habe ich versucht, der "richtige" Server über einen Wert in einem Parameter-Dokument zu setzen. Das Script dazu wird im PostOpen im DatenbankScribpt gestartet.

Zitat
Server1 := @DbColumn("";"";"viewPar";8);
Server2 := @Subset(@DbName;1);
@Prompt([Ok]; "Test"; Server1 + " - " + @DBName + " -");
@If(Server2 != Server1;
   @Do(
      @Command([FileCloseWindow]);
      @PostedCommand([RenameDatabase]; @DbName; Server1);
      @PostedCommand([FileOpenDatabase]; Server1:@Subset(@DbName;-1))
   );
""
)

1. Problem: Der Wert von Server1 wird aus dem Parameter-Dokument ermittelt. Der Wert von Server2 bzw. @DBName leider nicht; das Feld bleibt leer. -> Das Script läuft ins IF.
2. Problem: Wenn die DB dann (von dem "alten Server, der auf dem Lesezeichen steht) geöffnet wird, dann gehen zwei Reiter auf: Der erste Reiter zeigt die untere Ansicht der Rahmengruppe, der zweite Reiter die komplette Rahmengruppe.

Irgendwie klappt das alles nicht so, wie ich möchte. Ich weiß aber auch nicht mehr weiter. Wäre toll, wenn ihr noch eine Idee habt.

Danke im voraus!

Frank
« Letzte Änderung: 26.01.18 - 11:18:56 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 ronka

  • Senior Mitglied
  • ****
  • Beiträge: 377
  • Was macht der hier denn, muß der überall sein ?
    • das nächste DominoCamp kommt in Juni 2023
Ich sehe kein wirklichen problem in dein Code bis auf den nicht richtige darstellung der @DBName.
Dein Prompt musste ein @Implode( @DBName ; ":" ) bekommen um den darstellung 'richtig' zu bekommen, weil der funktion ein mehrfachwert zurück gibt.


Ich habe das erfolgreich an mehrere stellen mit folgenden stuckchen "script" umgesetzt:

DBName := @Subset ( @DbName ; -1 );
S1 := @Subset ( @DbName; 1 );
@If( @lowercase(@Name([CN];S1)) *= "oldserver" ; "" ; @Return( "" ) );
S2 := "newserver/orga" ;
@Command([FileCloseWindow]);
@PostedCommand([RenameDatabase]; @DbName ; S2 );
@PostedCommand([FileOpenDatabase]; S2 : DbName )

Wobei 'oldserver' und 'newserver/orga' natürlich aus dein Parameter dokument kommen dürfen.

Ich würde das allerdings über ein Profil dokument machen, aber das ist dir überlassen.

das neueste von Notes und Domino auf den DominoCamp vom 19 bis 21 Juni 2023 auf www.DominoCamp.de

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Hallo ronka,

vielen Dank dafür, dass Du Dich meines Problems angenommen hast.

Wo hast Du dieses Script eingbaut? Ich habe es im Datenbankscript im PostOpen gesetzt, ohne Erfolg bisher. An dieser Stelle bekomme ich mit @DBName keinen Wert zurückgeliefert.

Frank
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline ronka

  • Senior Mitglied
  • ****
  • Beiträge: 377
  • Was macht der hier denn, muß der überall sein ?
    • das nächste DominoCamp kommt in Juni 2023
gerade getestet in 8.5.3 und 9.0.1 und der Postopen macht nichts mehr wenn es sich um Formelsprache handelt die mit UI zu tun hat..

SEHR Merkwürdig

ein
@Prompt([Ok];"hier";"Anfang")
wird nichtmals mehr ausgefuhrt.

Es scheint das du es mit Lotusscript tun musstest in diesen sinn...

Code
Sub Postopen(Source As Notesuidatabase)
	Dim db As NotesDatabase ("", "")
	Dim server1 As String, server2 As string
	
	' Get values Server1 and Server2
	Server1 = "cn=test/o=orga"
	Server2 = "cn=test2/o=orga"
	If lcase( source.database.server ) = lcase( server1 ) Then
		if db.Openbyreplicaid(Server2, source.database.Replicaid) Then
			'ok und alte Datenbank schließen
			source.close 
		Else
			'problem
		End If
	End If
	
End Sub
« Letzte Änderung: 17.01.18 - 17:52:14 von ronka »
das neueste von Notes und Domino auf den DominoCamp vom 19 bis 21 Juni 2023 auf www.DominoCamp.de

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Danke schön! Und ich dachte schon, ich sei zu blöd...  ;)
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Leider ist die Sache noch nicht erledigt. Ich habe den Code eingebaut, aber ich bekommen bei der If-Abfrage mit der db.OpenByReplicaID die Fehlermeldung, dass die DB schon offen ist: "This database object is already open as CN=ServerAkt/O=.../C=...". Die Anwendung wird dann auf dem im Lesezeichen genannten Server (ServerAkt) geöffnet.

Zitat
Sub Postopen(Source As Notesuidatabase)
   Dim db As New NotesDatabase ("", "")
   Dim view As NotesView
   Dim docStm As NotesDocument
   Dim ServerAkt As String, ServerStd As String, ReplicaID As String
   Dim erg As Variant
   
   Set db = Source.Database
   ServerAkt = db.Server
   ReplicaID = Source.Database.ReplicaID
   
   Set view = db.GetView("viewPar")   'Db-Parameter einlesen für Standard-Server
   Set docStm = view.GetFirstDocument
   ServerStd = docStm.Server(0)
   
   If LCase(ServerAkt) <> LCase(ServerStd) Then
      erg = Evaluate(|@IsNotMember("[TL]"; @UserRoles)|)   'Teamleiter nicht umschalten
      If erg(0) = 1 then
         If db.OpenByReplicaID(ServerAkt, ReplicaID) Then
            Source.close
         Else
            MessageBox"Öffnen der Datenbank nicht möglich", 0 + 48, "Datenbank"
         End If
      Else
         MessageBox"Achtung: Sie arbeiten nicht auf dem Standard-Server " + docStm.Server(0), 0 + 48, "Datenbank"
      End If
   End If
End Sub

Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline ronka

  • Senior Mitglied
  • ****
  • Beiträge: 377
  • Was macht der hier denn, muß der überall sein ?
    • das nächste DominoCamp kommt in Juni 2023
Eh, klar..

Code
Set db = Source.Database
ServerAkt = db.Server

Das ist der Server wo du dich jetzt befindest.

Code
If db.OpenByReplicaID(ServerAkt, ReplicaID) Then . . . 

Da kannst du nicht erneut hingehen....

Code
If db.OpenByReplicaID(ServerStd, ReplicaID) Then . . . 

Ist was du haben möchtest um auf den ANDEREN Server zu wechseln, oder ?
das neueste von Notes und Domino auf den DominoCamp vom 19 bis 21 Juni 2023 auf www.DominoCamp.de

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz