Das Notes Forum

HCL Notes / Domino / Diverses => Entwicklung => Thema gestartet von: Legolas am 07.05.21 - 10:15:40

Titel: Profildokument nur einmal öffnen (Eine Instanz)
Beitrag von: Legolas am 07.05.21 - 10:15:40
Hallo Forum,

ich habe das Problem, dass ich ein Profildokument per Script und/oder per @Formel öffne.

Problem:
Bei jedem Klick auf den Button wird das Profildokument als neus Instanz (neuer Reiter) geöffnet. Das führt natürlich zwangweise zu Problemen,  wenn ich dann aus Versehen in den verschiedenen Instanzen Änderungen vornehme und diese Speichere (überscheibung evtl. Änderungen usw.).

Beim Aufruf eine nornalen Notesdocumentes mit der Funktion   ws.editDocument() gibt es den letzten Parameter der dafür sorgt, dass immer nur eine Instanz des Dokuments offen ist.

Gibt es sowas nicht für die Profildokumente?
Oder habt ihre eine Workaround?

Grüße
Bernd
Titel: Re: Profildokument nur einmal öffnen (Eine Instanz)
Beitrag von: Ralf_B am 07.05.21 - 15:48:15
Hallo Bernd,

wenn ich das richtig interpretiere, ich denke mal, hier sollte das Konzept geprüft werden.
Profildokumente haben andere Eigenschaften und Beschränkungen als normale Dokumente.
Profildokumente nutze ich immer nur intern , für den Programmierer / die Datenbank selbst oder Administratoren um spezifische Angaben eben nicht im Code eintragen zu müssen.
Halt für weitgehend , sich nicht ändernde Daten... Exportdaten .. Schnittstellendaten .... Pfade... Anmeldedaten.
Ich hatte mal DB's die zu viele Profildokumente hatten ........  das war nicht wirklich Spassig.

Warum  muss denn, in Deinem Fall, ein Button existieren um die Dokumente zu ändern / zu erzeugen ?
Wer benutzt diese(n Button und für welche Angaben (DB Angaben / User Abgaben ...) ?
Wer nutzt diese Daten aus den Profildokumenten ?

Gruss
Ralf
Titel: Re: Profildokument nur einmal öffnen (Eine Instanz)
Beitrag von: ronka am 07.05.21 - 19:27:17
Ich würde sogar noch weiter gehen mit den "falsche" verwendungszwecken..

Ein Profil Dokument wird im Speicher des Servers (wenn server basierte datenbank) gehalten, und geladen mit den ersten Öffnen der Datenbank, und erst gespeichert wenn der letzte benutzer der Datenbank verlassen hat.

Damit ist ein Profil dokument NICHT geeignet um informationen zwischen zu speichern zwischen verschiedene stellen (user / dokumente).

Wenn der Datenbank Lokal ist, passiert das gleiche, aber dann halt lokal. Erst wenn der DB verlassen wird, wird gespeichert..

Ein Profil dokument ist einen "schlechte" mischung aus Daten und Design dokument, und eigentlich nur geeignet grund werten einmalig abzulegen und mehrfach auszulesen.
Wenn zu viele Änderungen gemacht werden, geht es schief. Garantiert.
Es ist auch nicht "geeignet" um mehrfach zu öffnen... wie du hier selber gemerkt hast.
Titel: Re: Profildokument nur einmal öffnen (Eine Instanz)
Beitrag von: Legolas am 10.05.21 - 08:23:41
Hallo Zusammen,

erst mal Danke für die Rückmeldungen.
Es gibt hier wohl ein Missverständnis.

Das Konfigurations-Profildokument kann nur vom Administrator aufgerufen werden um in diesem werden auch nur grundlegende statische Einstellungen zur Anwendung konfiguriert.
Die Anwendung läuft auch nur auf dem Server.

Trotzdem kommt es bei unseren Kunden immer wieder mal vor, dass auch die gut geschulten Notes Admins ;) aus Versehen mehrere gleiche Profildoikumente öffnen, da diese wärend der Kofiguration teilweise einzutragende Infos erst in ihren Systemen nachschauen müssen.
Dann kann kommt es eben immer wieder mal vor, dass der Admin nicht direkt in das bereits geöffnete Profildokument geht, sondern nochmals den Button zum Öffnen des Profildokuments klickt. Und somit wird eine weiter Instanz (Dokument) geöffnet.
Fällt dem Admin das nicht auf, konfiguriert er die Anwendung nun in zwei oder mehr "gleichen" Profildokumenten. Speichert er nun diese ohne "nachzudenken" alle einfach ab, überscheiben sich die Daten.

Daher die Frage: Gibt es einen Befehl, mit dem ich das Profildokument nur einmalig im UI öffnen kann?

Wie z.B. der Befehl für die normalen Notsdokumente:  
Call ws.Editdocument(True, doc, false, "", Nothing, False)
Hinweis: Hier bewirkt der letzte Parameter, dass kein weiter neue Instanz eines Dokuments im UI geöffnet wird sondern zur bereits geöffnete Instanz gesprungen wird.


Die folgenden Befele öffnen bei jedem Klick das Profildokument als neue weitere Instanz:
Und das will ich eben verhindern.

1) @Command([EditProfile]; "dbsetup")
2) ws.Getprofiledocument("dbsetup")


Grüße
Bernd

 
Titel: Re: Profildokument nur einmal öffnen (Eine Instanz)
Beitrag von: Ralf_B am 10.05.21 - 10:15:01
Hallo Bernd,

bei solchen Admins kenne ich nur eine Lösung :
Eine Maske / Dokument erstellen wo die Admins die Daten eingeben können und einen Button, womit die Daten übertragen werden.
Dann können die eingegebenen Werte auch gleich auf "Gültigkeit" überprüft werden.
Also: Direkten Zugriff auf das Profildokument gar nicht erst anbieten.
Auch kann ich dann Zugriffe einschränken und .... .

Gruss
Ralf
Titel: Re: Profildokument nur einmal öffnen (Eine Instanz)
Beitrag von: eknori am 10.05.21 - 10:23:38
Zitat
Daher die Frage: Gibt es einen Befehl, mit dem ich das Profildokument nur einmalig im UI öffnen kann?

Nein, leider gibt es sowas nicht

@Ralf

Damit verlagerst Du das problem aber nur. Klar kann beim Speichern der Maske Backend Code ausgeführt werden, der seinerseits das Profildokument aktualisiert. Aber auch hier kann der Admin mehrere Dokumente öffnen und per save&close werden dann die unterschiedlichen feldwerte in des profildokument geschrieben.

Meine Idee ist, beim Öffnen des profildokuments einen notes.ini Eintrag zu schreiben. Klickt der Admin noch einmal auf den Button, dann wird geprüft, ob der Eintrag gesetzt ist. An der Stelle bricht der code dann mit einer freundlichen Meldung ab, dass schon ein PDoc geöffnet ist. Beim Speichern wird der notes.ini Eintrag wieder gelöscht

Habe es selber noch nicht umgesetzt, werde das aber mal testen.
Titel: Re: Profildokument nur einmal öffnen (Eine Instanz)
Beitrag von: eknori am 10.05.21 - 10:41:01
Ich habe es mal ausprobiert.

Code
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
	Dim session As New NotesSession
	If (Trim(session.GetEnvironmentString("midpointsProfileDoc",True))<>"") Then
		Msgbox "Profile Doc already open"
		continue = False
	End If
	
	Call session.SetEnvironmentVar("midpointsProfileDoc",  source.Document.UniversalID, True)
End Sub

Code
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
	Dim session As New NotesSession
	Call session.SetEnvironmentVar("midpointsProfileDoc",  "", True)
End Sub

Beim ersten Öffnen wird die UniversalId des PDoc in die notes.ini geschrieben. Versucht der Admin ein zweites Mal, das PDoc zu öffnen, dann bekommt er eine Fehlermeldung. Beim Schließen des PDoc wird der ini Eintrag wieder gelöscht.
Titel: Re: Profildokument nur einmal öffnen (Eine Instanz)
Beitrag von: Legolas am 10.05.21 - 10:47:28
Danke an alle.
ich werde die Lösung mit dem INI Eintrag umsetzen.

Grüße
Bernd
Titel: Re: Profildokument nur einmal öffnen (Eine Instanz)
Beitrag von: Ralf_B am 10.05.21 - 11:01:28
Ich denke mal, die Lösung muss zur Situation passen.
Ob die Gefahr besteht, dass mehrere Admins auf das selbe Prof Dok zugreifen oder die Admins mehrere Notes Clients nutzen ......
Titel: Re: Profildokument nur einmal öffnen (Eine Instanz)
Beitrag von: ronka am 11.05.21 - 18:32:36
Alternativ option.

Über ein Timer das Profil Dokument nach X Minuten Zwangs schließen, damit es nicht auf bleibt.. "Nerv popup" erstellen das so lange meckert das es auf ist, bis es geschlossen wird.