Sub Querymodechange

  • Hallo,


    nach stundenlangem herumärgern habe ich beschlossen mich doch an Euch zu wenden. Ich habe folgenden Quellcode:


    _________________
    Sub Querymodechange(Source As Notesuidocument, Continue As Variant)

    If iBearb=False Then
    Continue=False
    Msgbox "Sie dürfen das Dokument nicht bearbeiten ."
    End If


    End Sub
    _________________


    Nun würde ich gerne folgende Abfrage einbauen:


    Wenn...
    @Name([CN]; @UserName)!=HdrOrigName_1
    dann...


    Zur Erläuterung: ich möchte oben stehenden Quelltext nur zulassen, falls aktueller User nicht HdrOrigName_1 ist.


    Kann mir jemand weiterhelfen? Vielen Dank! :)

    • Offizieller Beitrag

    sicher ist Dein Code aber nicht zum Verhindern des editmodes! Öffne mal ein Dokument aus der Ansicht gleich im Bearbeitungsmodus, da wird QueryModeChange nicht durchlaufen.


    Mit Source hast Du das UIDokument. Darüber kommst DU zum Backenddokument und zu Deinem Feld "HdrOrigName_1". den Username kannst Du über NotesSession.Username an den Namen des aktuell angemeldeten Users und mit der Klasse NotesName kannst Du den CN auslesen.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Zitat

    sicher ist Dein Code aber nicht zum Verhindern des editmodes! Öffne mal ein Dokument aus der Ansicht gleich im Bearbeitungsmodus, da wird QueryModeChange nicht durchlaufen.


    Da kann ich Dirk nur zustimmen.


    Warum verwendest du keine Autorenfelder?


    McNotes

  • Also der Code funktioniert jedenfalls. User können nicht editieren. Dies möchte ich jedoch für Ersteller der Formulare aufheben.


    Der Befehl
    @Name([CN]; @UserName)!=HdrOrigName_1
    funktioniert einwandfrei. Jetzt möchte ich diesen nur noch in den Code einfügen und habe Probleme mit der Syntax.


    Es soll sozusagen zuerst eine Abfrage erfolgen in Form des oben stehenden Befehls.
    Falls Ergebnis wahr ist soll der Rest des Codes ausgeführt werden. Bei False -> End If


    Hat jemand die Syntax für mich? :)

  • Zitat


    julpre schrieb:
    Also der Code funktioniert jedenfalls. User können nicht editieren.


    Was erzählst Du hier eigentlich? Liest Du, was Dir hier schon geschrieben wurde?
    QueryModeChange fängt nur den Wechsel des EditMode aus dem Dokument selbst ab. Drücke Strg-B aus einer Ansicht (im englischen Client Ctrl-E). Nur so *ein* Beispiel.


    Es wurde ja auch schon erwähnt, dass dieses Verfahren "Editieren über Events 'verhindern'" grundsätzlich keinerlei Sicherheit bietet.


    Vulgo: Deine weitere Abfrage (die so in Formelsprache sowieso nicht funktionieren kann) hinsichtlich des Erstellers des Dokuments (wo speicherst Du den?) ist tatsächlich Dein allerkleinstes Problem.


    Bernhard

  • @julpre:


    Was Du gerne hinkriegen würdest, ist doch folgendes (nehme ich an):


    Alle (oder viele oder auch nur einige) Benutzer können Dokumente erstellen. Nur der, der ein Dokument erstellt hat, soll es auch später ändern können, die anderen sollen nur lesen können. Richtig?


    Dafür brauchst Du nichts zu Programmieren. Den Zugriff auf Dokumente zu limitieren (bzw, zu lenken) ist eine der (starken) Grundfunktionen von Notes.


    Hierfür gibt es Felder vom Typ "Readers" und "Authors" (siehe Bild). Mit Feldern vom Typ "Readers" kannst Du steuern, wer überhaupt ein Dokument zu Gesicht bekommt, mit "Authors", wer ein Dokument (auf dem Server) ändern kann.


    In Deinem Fall würdest Du also Dein Feld, "HdrOrigName_1" einfach als Typ "Authors" (deutsch "Autoren") anlegen und dort hinein per Vorgabewert den Namen des Erstellers schreiben. Das stellt dann sicher, dass nur diese Person das Dokument ändern kann - theoretisch.


    Praktisch musst Du, um dieses konstistent hinzukriegen auch eine saubere und konsitente ACL einstellen:


    Die Benutzer dürfen nur "Autoren" sein, keine "Editoren" oder gar höhere Rechte haben.


    Ausserdem musst Du eine konsistente ACL einstellen, sonst kann ein Benutzer lokal auf seiner Maschine alle Dokumente trotzdem ändern. Er kann diese dann zwar nicht mehr auf den Server zurückreplizieren, aber hier liegt eine häufige Ursache von Problemen.


    Setze Dich nochmals mit dem Thema "Namensfelder" in Notes auseinander. Das ist ein wirklich sehr starkes Feature, für dessen Realisierung man sich in anderen Umgebungen ziemlich anstrengen muss (wie auch Du das gerade versucht hast).


    Was die Herren Diali und koehlerbv Dir sagen wollten ist, dass Deine "Methode" von geübten Benutzern leicht umgangen werden kann: Denn Deine Metode fängt nur ab, wenn der Benutzer das Dokument erst zum Lesen öffnet und dann in den Editmodus schaltet.


    Öffnet ein Benutzer aber das Dokument gleich aus der Ansicht im Bearbeitenmodus, kommt Deine Lösung nicht zum Zuge und ist daher keine wirklich sichere Lösung.


    Und noch etwas: Man ein Dokument auch ohne es zu öffnen ändern - nämlich z.B. mittels eines Macros oder eines Scripts. Auch dafür greift Deine Lösung dann nicht bzw. ist zu umgehen.




    koehlerbv: Man kann einem offenbar unbedarften Fragesteller auch anders antworten als ihn gleich anzumaulen! Er hat übrigens mit seiner Formel klar gezeigt, dass er ein Feld "HdrOrigName_1" hat, indem der Name des Autors drin steht. Aber das muss man halt auch lesen wollen und nicht vor lauter poltern drüber sehen.

  • Zitat


    jwege schrieb:
    koehlerbv: Man kann einem offenbar unbedarften Fragesteller auch anders antworten als ihn gleich anzumaulen! Er hat übrigens mit seiner Formel klar gezeigt, dass er ein Feld "HdrOrigName_1" hat, indem der Name des Autors drin steht. Aber das muss man halt auch lesen wollen und nicht vor lauter poltern drüber sehen.


    Jürgen, der Thread hat eine Vorgeschichte. Ich habe hier auch nicht herumgepoltert, sondern nur in aller Deutlichkeit darauf hingewiesen, dass man schon lesen sollte, was andere (und das waren etliche) in ihrer Freizeit an Hilfestellungen geschrieben haben.


    Und wenn mehr als einer schon geschrieben hat, das die Events zum Verhindern einer Dokumentbearbeitung nahezu nichts taugen, und darauf dann kommt

    Zitat

    julpre schrieb:
    Also der Code funktioniert jedenfalls. User können nicht editieren.


    dann fühlt man sich schon veralbert. Nochmal: Die ganze Sache begann nicht erst in diesem Thread.
    Weiterhin: Ich bin sicherlich nicht der letzte, der "julpre" nicht weiter Hilfe anbieten würde. Nur lesen muss er, was gesagt wird. Sonst wird das ganze Zeitverschwendung für alle Seiten.


    Bernhard

  • Bernhard,


    ich habe, bevor ich meinen Beitrag schrieb, nachgesehen. Unter "Julpre" wurden bislang nur zwei Beiträge gepostet.


    Insofern ist die Historie nicht sooo lang. Insgesamt waren es fünf Posts oder so.


    Ich kann verstehen, wenn man die Newbees darauf hinweist, dass ihr Problem hauptsächlich ein Problem des Verstehens der Basiszusammenhänge ist.


    Nur: Es bringt die Leute nicht wirklich weiter, zu sagen: Lies doch erstmal das Handbuch.


    Viele (incl. ich) sind hier, um eben schneller einen Tip in die richtige Richtung zu kriegen, als stundenlang im Handbuch zu suchen und dann doch nix zu finden.


    Auf sehr viele Fragen hier gibt's ne Antwort in der Hilfe. Sogar auf konkrete Code-Fragen.


    Was ich für sehr hilfreich fände, wäre


    1.) hier ein Wiki zu haben mit den "Directions zu Basics" (was finde ich wo)


    2.) Klare Hinweise zu den Kapiteln, wo etwas behandelt wird in der Hilfe. Denn das genau ist der Wald, in dem der Anfänger die Bäume nicht sieht.


    Und man könnte natürlich "von oben herunter" einem Beitrag eine "Basics-Frage-Kennung" verpassen, wenn eine Frage gestellt wurde, bei der man erkennt, dass es an den Fundamentalen Verständnissen mangelt.


    Und noch was: Wenn einer ganz hartnäckig blöd ist, BRAUCHT man ja nicht zu antworten.

  • Hallo Jürgen,


    hier ging es nicht um "Basiszusammenhänge", sondern schlicht darum, zu lesen was *hier* geschrieben wurde. "Das kann nicht funktionieren, weil .." sollte man als blutiger Anfänger nicht beantworten mit "Das funktioniert aber". Und die Vorgeschichte hast Du nicht richtig recherciert, da spielt noch ein anderer Thread mit.


    Irgendwelches newbee bashing war hier niemals das Thema noch ist es angesagt.


    Und natürlich muss man nicht auf Postings antworten, die einem nicht passen. Ich möchte mich aber nicht dafür entschuldigen müssen, dass ich es nochmals versucht habe - und vor allem, für die nächsten wirklich lern- und lesewilligen newbees eine derartige Aussage stehen einfach hier stehen gelassen zu haben.


    Glaube mir: Nachwuchs in unserem Metier liegt mir sehr am Herzen. Aber das muss dann auch ein Geben und Nehmen sein.


    Bernhard