Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: watschn am 21.04.08 - 17:12:01
-
Hallo zusammen,
ich habe mit meiner Notes Datenbank 2 Probleme, die wohl irgendwie mit Aktualisierung von Feldern zu tun haben.
Der Zugriff auf die einzelnen Dokumente wird über Leser- und Autorenfelder gesteuert. Jetzt soll das ganze insofern erweitert werden, dass künftig jeder Benutzer, zumindest als Leser, auf alle Dokumente Zugriff hat. Ich habe hierfür eine neue Rolle "Alle_Mitarbeiter" erstellt. Diese Rolle habe ich über einen Agenten in die jeweiligen, bereits bestehenden, Leserfelder meiner Dokumente eintragen lassen. Dies hat soweit geklappt, die "neue Rolle" steht in den Feldern mit drin. Melde ich mich nun als normaler Benutzer an, so kann ich aber keine Dokumente sehen. Werden die Leserfelder nicht aktualsiert oder was ist hier das Problem?
Zweites Problem. Ich habe über einen Agenten mittels @ReplaceSubstring Funktion Feldwerte in einem Namesfeld ändern lassen (z.B. Benutzer "Muenchen" durch "Hans Meier" ersetzt). Wenn ich mit meiner Notes ID angemeldet bin, so kann ich die geänderten Einträge sehen (ich sehe also "Hans Meier" dort wo ursprünglich "Muenchen" war), meldet sich ein anderer User an, so sieht er die alten Einträge (als in dem Fall "Muenchen"). Ich habe ein Tool "Document Viewer", damit kann man sich von einem Dokument alle Feldwerte anzeigen. Hier sehe ich, dass die neuen Werte drinstehen. Wieso sehen dann die User diese neuen Werte nicht?
Ist echt ganz schön verzwickt manchmal :-\
Michael
-
Zu 1) Da möchte ich einen Schirmschuss sehen. Hast Du evtl. wirklich "Alle_Mitarbeiter" dort hineingeschossen anstatt das korrekte "[Alle_Mitarbeiter]"?
Zu 2) Wenn Du den neuen Wert siehst, der andere User aber nicht, so arbeitet Ihr nicht in der gleichen Datenbank bzw. im gleichen Dokument. Das ist so, eine andere Erklärung gibt es hier für nicht.
Bernhard
-
Guten Morgen!
zu 1.
Ich weiß nicht, wie ich hier direkt Bilder einfügen kann, habe aber den Screenshot als Anhang. Hoffe das funzt :-)
Das betreffende Leserfeld ist mit einem roten Rahmen hervorgehoben. Meine nachträglich hinzugefügte Rolle trägt den Namen "BBV_Mitarbeiter" und es ist auch korrekt mit [ ] geschrieben. Mittlerweile habe ich durch probieren entdeckt, dass ich ein Dokument dann sehen kann, wenn ich es im Edit Modus öffne und dann abspeichere. Eigenartig!
zu 2.
Ich weiß man Problem klingt etwas unglaublich, es ist aber wirklich so wie ich sage. Wenn ich selbst (mit Admin Rechten) angemeldet bin, so kann ich die geänderten Namen sehen. Meldet sich ein anderer User an, so sieht der die "alten" Namen. Ich versteh das nicht wieso Notes hier nicht den aktuellen Feldinhalt anzeigt. Und es hamdelt sich definitiv um die gleiche DB und das gleiche Dokument.
-
... das sieht mir nach einem alten Index aus - schon mal mit Strg+Shift+F9 versucht?
Arbeitet ihr mit privaten Ansichten?
Toni
-
Deine neue Rolle taucht aber gar nicht im Leserfeld auf.
Wie genau hast Du die Rolle hinzugefügt ? Ist das evtl. ein berechnetes Feld vom Typ "Berechnet beim Anlegen" ? Weil dann würde die zusätzliche Rolle erstmal nur in neuen Dokumenten eingetragen sein und Du müßtest die bestehenden Dokumente neu berechnen.
Wenn allerdings sowieso alle Benutzer Zugriff auf alle Dokumente haben sollen, wozu sind dann die Leserfelder noch gut ? Die kannst Du IMO dann auch gleich kicken.
-
@ ata
Aktualisierung des Index hilft leider nicht. Ich bin zwar nicht der Urheber dieser DB, aber soweit ich weiß benutzen wir hier keine privaten Ansichten (hab mich da im Designer an diesem "Schlüssel-Symbol" orientiert)
@ Diri
Wieso taucht meine Rolle nicht im Leserfeld auf? Im Screenshot kann man doch den BBV_Leser bei meinem Leserfeld vLeser sehen.
Eingefügt habe ich die Rolle mit folgendem Agenten:
Form="Mitglied";
vLeser_A:= vLeser;
FIELD vLeser:= vLeser_A + ", " + "[BBV_Leser]";
SELECT @All
Das Feld vLeser ist vom Typ auf "bearbeitbar" gesetzt.
Wenn allerdings sowieso alle Benutzer Zugriff auf alle Dokumente haben sollen, wozu sind dann die Leserfelder noch gut ?
Das ist eine gute Frage. Grundsätzlich haben alle User per ACL Zugriff auf die DB. Die Steuerung, wer genau welche Dokumente lesen bzw. bearbeiten darf, wird dann über Leser- und Autorenfelder geregelt. Das alles ist relativ komplex umgesetzt, da es gleich mehrere verschiedene Leser- und Autorenfelder gibt, auf die dann teils auch noch diverse Agenten zugreifen. Die DB stammt nicht von mir und der Urheber ist nicht mehr greifbar. Und bevor ich jetzt ganz tief in die Struktur eingreife, würe ich das halt lieber über diese neue Rolle lösen
-
... ist die Datenbank auf einem Server oder Lokal?
Wenn sie Lokal ist, ist die Konsistente ACL aktiviert?
Toni
-
Ich führe die Datenbank direkt auf dem Server aus
-
... hast du dich nach der Änderung neu angemeldet - bzw. F5 drücken und dann neu anmelden...
Toni
-
Sorry, oben hast Du von "[BBV_Mitarbeiter]" geschrieben. War dann wohl ein Versehen.
Der Sinn von Leserfeldern ist die Beschränkung von Zugriffen auf Daten, nicht die Berechtigung selber. Dafür sind dann ACL + Autorenfelder zuständig.
Wenn also keine Einschränkung auf die Daten mehr erforderlich ist, sind die Leserfelder überflüssig.
Meiner Meinung nach wäre es viel einfacher, die Leserfelder direkt zu killen. Das hat ja keine Auswirkungen auf die Autorenberechtigung.
Zudem ist deine Formel nicht korrekt. So fügst Du der Liste keinen zusätzlichen Wert hinzu, sondern verkettest sie mit einem String. Das dürfte sich auch in den Feldeigenschaften widerspiegeln und ist wohl auch der Grund, warum die Rolle nicht greift.
Was nämlich bei deiner Formel rauskommt ist folgendes :
1. Eintrag : "[V_Ersteller], [BBV_Leser]"
2. Eintrag : "[Admin], [BBV_Leser]"
Was Du aber eigentlich erreichen wolltest, dürfte das hier sein :
1. Eintrag : "[V_Ersteller]"
2. Eintrag : "[Admin]"
3. Eintrag : "[BBV_Leser]"
Korrekt wäre dafür eine Formel ala :
Field vLeser := vLeser_A : "[BBV_Leser]"
-
@Ingo
... da sieht man den Wald nicht vor lauter Bäumen - na klar doch ::)
Toni
-
@Toni :
Ich hab den Screenshot auch dreimal angeschaut, bis mir der doppelte Rollen-Eintrag aufgefallen ist und ich einen Blick auf die Formel riskiert habe ;)
-
@Ingo,
du wirst sehen - es ist wie immer - kaum macht man es richtig - funktionierts ;D ;D ;D
Toni
-
Also bei mir funktionierts jetzt auch. Danke fürs mitschaun :-)
Das mit dem Doppeleintrag hab ich ehrlich gesagt für unwichtig gehalten.
Ich werde den Zugirff jetzt erstmal so wie von mir geplant realisieren. Der Tipp mit dem Leserfelder killen, dem kann ich mich widmen, wenn´s vom Zeitlichen her mal besser passt.
Punkt 1 wäre somit gelöst.
Punkt 2 ist zwar noch offen, ist aber eher ein Schönheitsfehler. Damit kann ich leben, aber ist dennoch komisch.
Michael
-
Da hat dir Bernhard doch schon in #1 drauf geantwortet.
-
Ich habe aber auch schon geschrieben, dass ich definitv auf die gleiche DB und das gleiche Dokument zugreife.
Das widerspricht dann aber der Antwort von Bernhard.
-
In deinem Agenten fehlt zwischen Form und ="Mitglied" ein Doppelpunkt, aber vermutlich spielt in der Zeile ohnehin nicht die Musik.
Wie sollen Leserfelder denn funktionieren, wenn keine kanonischen Namen drinstehen ?
Du mußt über deine Dokumente einmal mit einem Zweizeiler drüberlaufen:
FIELD vLeser:= @Trim(@Unique(@Explode(@Name([Canonicalize];vLeser);", "):"[BBV_Leser]"));
SELECT @All
Probier es bitte vor dem Masseneinsatz an ein paar kopierten Dokumenten aus.
Zu deinem zweiten Problem: arbeitest du vielleicht in der (nicht ordentlich replizierenden) Clusterreplik nach einem Failover ? Oder der Anwender ?
Hast du doppelte gleichnamige Feldnamen in den Dokumenten ?
Gruß
Norbert
-
@LN4ever
Das mit dem : bei = Mitglied ist ein nutzlicher Hinweis. Danke!
Die Leserfelder funktionieren doch jetzt soweit. Als Namen stehen Einträge wie "CN=Hans Meier/O=BV_BY" drin, das ist doch kanonisch oder irre ich da!?
Leider wird der vermeintliche Schönheitsfehler (als Punkt 2) nun doch zum Problem!
Hier nochmal eine genaue Schilderung:
Ich ändere ein Namesfeld mittels Agent und der @ReplaceSubstring Funktion. Ich starte diesen Agenten manuell und bin währendessen mit meiner NotesID angemeldet. Nach ausführen des Agenten öffne ich eines der geänderten Dokumente und kann dort den geänderten Namenseintrag im Namesfeld sehen. Alles wunderbar also :-)
Nun melde ich mich im Notes mit der NotesID eines normalen User an und öffne das gleiche Dokument (in der gleichen DB, gleiche Replik, gleicher Server, gleicher Cluster, usw....) erneut. Jetzt kann ich die eben noch vorhandene Namensänderung nicht mehr sehen, es wird wieder der ursprüngliche Wert angezeigt.
Mein Problem, die Maske enthält Funktionen und Schaltflächen, die nur dann eingblendet sein sollen, wenn der angemeldete Benutzer ins Namesfeld eingetragen ist. Meldet sich jetzt ein User an, dessen Name durch den Agenten in das Namesfeld neu eingetragen wurde, so kann er seinen Namenseintrag im Namesfeld nicht sehen und viel schlimmer, die Funktionen und Schaltflächen werden ihm nicht angezeigt. Die "verbergen Formel" geht wohl tatsächlich noch vom ursprünglichen Namenseintrag aus und greift für den neuen Namen dann nicht.
Ich habe noch was herausgefunden. Öffne ich das Dokument im Edit-Modus und speichere es, so wird dem User beim nächstenmal das Namesfeld korrekt gezeigt und die Schaltflächen und Funktionen werden eingeblendet. Vielleicht ist das ein Ansatz zur Problemfindung?
Michael
-
... haben die Felder die entsprechende Eigenschaften READ-ACCESS , bzw. READ/WRITE-ACCESS nach dem Ändern?
Toni
-
Lieber Michael,
dein letzter Satz deutet an, daß der Agent eigentlich viel mehr Felder umsetzen müßte als du umsetzst, aber wenn du über die geänderten Dokumente noch einmal den Einzeiler
@Command([ToolsRefreshSelectedDocs])
drüberlaufen läßt, dann werden alle selektierten Dokumente noch einmal mit der Maske durchgerechnet. Und damit stimmt dann - hoffentlich - alles wieder.
Tipp: Diese Funktion braucht man immer wieder einmal. Deshalb habe ich sie mir in die Iconleiste gestellt und kann sie damit in jeder Datenbank aufrufen.
Gruß
Norbert
-
Halten wir jetzt noch einmal ein Faktum fest: Wenn Du ein Item in einem Notes-Dokument änderst (und dies nachweislich getan hast), dann wird kein anderer User irgendeinen alten Inhalt mehr sehen. Das geht nicht, aber das hatte ich ja schon erwähnt.
Deshalb nochmals: Schicke einen aussagekräftigen Schirmschuss (database properties, die unter den beiden IDs ausgelesen wurden).
Bezieht sich das betreffende Item im Frontend auf andere Felder (oder vice versa)? Es muss irgendwas ganz billiges sein, und nach der Auflösung wirst Du Dir vor die Stirn klatschen.
Fakt ist aber: Das, was Du siehst, ist nicht das, was passiert ;).
Bernhard
-
Guten Morgen zusammen!
Zunächst möchte ich mich mal bei allen für die Hilfsbereitschaft bedanken - das ist echt super :-)
@Toni
Ehrlich gesagt weiß ich gar nicht, wo ich diese Eigenschaften prüfen kann. Aber ich ändere ja meiner Meinung nach nichts an den Feldeigenschaften
@Norbert
Dein Tipp ist Gold wert, damit funktionierts - feine Sache :-)
Dann musss ich einfach jedesmal wenn ich meinen Namensänderungs-Agenten ausführe, nachträglich noch diesen Masken-Refresh machen. Damit ist mir dann schon geholfen.
@Bernhard
Der Vollständigkeit halber hier noch die Screenshots.
Screenshot 1 - Das Dokument bevor ich den Namen im Namesfeld austausche, bin hier mit meiner ID angemeldet (Admin)
Screenshot 2 - Das Dokument nach Änderung des Namesfeld, bin wieder mit meiner ID angemeldet
Screenshot 3 - Das selbe Dokument, diesmal bin ich mit einer Uer ID angemeldet (mir fällt hier auf, dass anstatt Muenchen/BV_BY nur Muenchen im Namesfeld angezeigt wird)
-
... wo ich diese Eigenschaften prüfen kann.
In den Feldeigenschaften - in deinen Screenshots steht dort zum Beispiel "SUMMARY NAMES". Die Feldeigenschaft kann sich durchaus ändern, je nachdem wie man die Felder setzt - Frontend - Backend
Handelt es sich dort eventuell um Layout-Regions - dann könnte es die Feldbreite sein...
Toni
-
Ok, dann hab ich schon an der der richtigen Stelle nachgeschaut. Mit dem Begriff Layout-Regions kann ich leider gar nix anfangen. Aber ich glaub alles erklären musst du mir jetzt auch nicht ;)
Michael