Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: luna am 10.01.03 - 13:36:56
-
hallo,
ich hab eine DB auf meinem server, die mit dem cluster und dem webserver repliziert wird. das soll auch so bleiben.
ich hab diese DB auch nicht in meinem profil notebooks drin, weil ich nicht will, dass die user die DB offline bedienen, weil beim anlegen eines dokumentes die manager aus dem nab nicht ausgelesen werden. ist soweit auch kein problem.
es gibt aber user, die sich trotzdem einfach diese DB lokal replizieren, und offline dokumente anlegen, in denen dann infos fehlen.
kann ich theoretisch verbieten, dass user sich eine DB lokal replizieren? aber die replizierung mit dem cluster und webserver geht dann trotzdem noch?
oder muss ich den button "new document" verstecken, wenn der user nicht online ist? wenn ja, wie geht das?
vielen dank fuer hilfe,
gruss,
daniela
-
Hi Daniela,
mit R6 geht das....mit R5 und tiefer kann ich nur die konsistene ACL empfehlen.
Mit den Hide-When Formeln zu arbeiten, naja. Prüfe doch einfach beim öffnen der DB ob diese sich lokal befindet (ist eine Datenbank Property) und setzte einen entsprechenden Ini Eintrag, diesen nutzt Du dann für die Hide-When Formel.
Meff ;)
-
... wenn du beim Öffnen der DB überprüfst, ob sie lokal geöffnet wird, dann gib eine Meldung aus, daß das nicht sein soll und schließe die DB wieder...
ata
-
Leider geht das nicht so ohne weiteres, aber ich hab da was. Einfach in den DB Script einfügen :
Unter Declarations :
Declare Function NEMGetCurrentSubprogramWindow Lib "nnotesws.dll" () As Long
Declare Function NEMStopSubprogramWindow Lib "nnotesws.dll" (Byval hwnd As Long) As Integer
Und im Postopen :
Set session = New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim version As String
Dim extract As String
version = session.NotesVersion
extract = Left(version, 9)
' Messagebox extract
If extract <> "Release 5" Then
Messagebox "Important: Sorry but you do not have an R5 client and will be unable to properly access this application.", 0 + 64, "Sorry!"
Dim wHandle As Long
' Get window handle
wHandle = NEMGetCurrentSubprogramWindow
' Close current window
Call NEMStopSubprogramWindow(wHandle)
End If
Das Ding ist zum Prüfen, ob der Anwender mit einem 5er Client arbeitet, sollte ziemlich simple zum Anpassen bzgl. der lokalen Replik sein. Aber Achtung : Wenn ein Anwender mit dem Script Debuger arbeitet, dann kann man das Ding ziemlich simple umgehen.
Meff ;)
-
... im QueryOpen der Ansichten folgender Code:
Dim vDB As Variant
vDB = Evaluate("@DBName")
If vDB(0) = "" Then
Msgbox "Die Datenbank darf nicht lokal geöffnet werden - Abbruch" , 16 , "Abbruch"
Continue = False
End If
... aber - mit dem Debugger kann man auch das umgehen...
ata
-
@ata :
Kannst Du damit wirklich das Öffnen einer Datenbank verhindern ? Ich kann dann doch trotzalledem ein Dokumente in der DB erstellen, solange dieses über Aktion - Dokument erstellen machbar ist ?
Meff
-
... wenn die Aktion dementsprechend eingestellt ist ja, aber auch da lässt sich der Code im Postopen in Verbindung mit IsNewDoc verwenden...
ata
-
@Meff
warum nicht ohne weiteres möglich?
ich habe das schon mit der 4er Version gemacht und mit der 5er funktioniert es auch - keep it simple.
im Postopen der Datenbank
@If(@Name([CN]; @Subset(@DbName; 1)) != "";@Return(""); @Do(
@Prompt([OK];"Restriction"; "Database can only run on server");
@PostedCommand([FileCloseWindow]) ) )
cu
-
@Performance
da hab ich mir wohl kräftig einen abgebogen. Hast ja recht mit Keep it simple....
Meff ;)
-
hallo @all,
zuerst mal vielen lieben dank fuer alle eure tips.
Hi Daniela,
mit R6 geht das....mit R5 und tiefer kann ich nur die konsistene ACL empfehlen.
Mit den Hide-When Formeln zu arbeiten, naja. Prüfe doch einfach beim öffnen der DB ob diese sich lokal befindet (ist eine Datenbank Property) und setzte einen entsprechenden Ini Eintrag, diesen nutzt Du dann für die Hide-When Formel.
Meff ;)
meff:
ich arbeite ja sowieso schon mit konsistenter ACL in allen repliken, das hab ich in jeder datenbank so eingestellt. aber er darf ja generell dokumente erstellen. nur halt nicht lokal.
peformance:
ich hab deine loesung ausprobiert. du hast geschrieben, im postopen der datenbank. ich nehme an, du meinst in jede ansicht der datenbank. das hab ich ausprobiert, mal mit einer ansicht. es klappt auch, die meldung kommt lokal, jedoch krieg ich jedesmal einen absturz vom notes. habs mehrmals probiert. diese komische exception memory fehlermeldung.
ata:
letztlich hab ich dann dein script genommen, und mal in eine ansicht genommen. mit dem script scheint das zu klappen. muss es halt jetzt noch in jede ansicht reintun, und die aktion uebers menu ausblenden. dann muesste das genau das sein, was ich brauche.
allerdings kann ich dann halt selber nimmer lokal testen. aber ist jetzt nicht soooo wichtig.
vielen dank nochmal euch allen,
gruss,
daniela
-
hallo daniela
du kannst zwar nicht das replizieren verbieten, du kannst aber das öffnen der db verhindern.
- wenn ich sage im postopen der db, heisst das im globalen Postopen der db - sie Bild -
cu
-
hallo performance,
vielen dank fuer das bild. sorry, ich wusste das gar nicht, dass es sowas gibt. hab's noch nie gebraucht. aber jetzt weiss ich's ja. :D
ich hab's jetzt nochmal mit deiner formel probiert, und es klappt. er gibt deine fehlermeldung bereits beim oeffnen der DB aus, und schliesst sie anschliessend sofort wieder.
ich nehme jetzt also deine formel her. vielen dank dafuer.
vielen dank nochmal an alle fuer eure hilfe !!! ;D
gruss,
daniela
-
... du könntest dich als User ermitteln und dann eben Continue = True nehmen, wenn du als User identisch bist - hardcoded...
ata
-
hallo ata,
vielen dank fuer diesen tip. aber ich hab ja jetzt eine formel drin, von performance, und nicht mehr dein script. dein script muesste ich halt in allen ansichten einbauen, die formel nur einmal im postopen der DB. ist glaub ich einfacher. dann geht die DB erst gar nicht auf.
koennt ich denn in dieser formel:
@If(@Name([CN]; @Subset(@DbName; 1)) != "";@Return(""); @Do(
@Prompt([OK];"Restriction"; "Database can only run on server");
@PostedCommand([FileCloseWindow]) ) )
das auch so einbauen, dass er sie niemandem oeffnet, nur mir? ich schaue auf diese formel und schaue und schaue, aber ich wuesste nicht, wie ich das machen soll.
und, der user hat ja jetzt schon eine replik angelegt, bevor ich diese formel eingebaut hatte. spaetestens, wenn er das naechste mal repliziert, muesste er danach die DB nicht mehr oeffnen koennen, oder?
gruss,
daniela
-
du meinst das nur du sie lokal öffnen kannst ?
yep
@If(@Name([CN]; @Subset(@DbName; 1)) != "" | @Name([Abbreviate]; @UserName) = "xxx yyy/firma/DE";@Return(""); @Do(
@Prompt([OK];"Restriction"; "Database can only run on server");
@PostedCommand([FileCloseWindow]) ) )
cu
-
cool 8)
dankeschoen.
gruss,
daniela
-
@luna
... die Formel von Performance ist die einfachste Lösung...
ata