Name automatisch im Feld speichern

  • Hallo ich bins mal wieder ;)


    Ich hab da ein problem:


    Ich möchte, dass wenn ein User mein Notes-Doc. über einen Doc-Link in einer email öffnet,
    automatisch in einem Feld gespeichert wird.
    Aber auch nur dann, wenn Er die Rolle: [FM] hat und das Feld "Status" den Wert 5 hat.



    Ich komme da einfach nicht weiter..


    Ich lasse momentan in einem versteckten Hilfsfeld (Berechnet zur Anzeige) immer den Usernamen (@Username) anzeigen.


    In einem Berechneten Feld soll er dann den Wert aus dem Hilfsfeld übernehmen.


    Dort hab ich diese Formel:


    @If(Status="5" & @IsMember("[FM]";@UserRoles);@SetField("Diesesfeld";Hilfsfeld);"")



    Das Problem ist, dass er den Inhalt des Feldes nicht speichert. Hab schon alles mögliche probiert. Kann mir da einer helfen?



    thx im vorraus

  • @if(@contains(@userroles;"[FM]") & status = "5"; Hilfsfeld; DiesesFeld)
    Vorausgesetzt... Die Formel laeuft in "DiesFeld", das Feld Status ist gefuellt mit einer 5 und im Hilfsfeld steht der username..in welcher Form auch immer
    Wegen dem Nichtspeichern...was ist denn "DiesFeld" fuer ein Feldtyp bzw. wann tritt der Fehler auf??
    Es wird durch die obige Formel kein FileSave ausgefuehrt.

  • Vom Prinzip her müsstest du im PostOpen das Dokument speichern.
    Hat der User denn überhaupt Edit Berechtigung auf das Dokument ?
    Sonst geht da in dieser Form gar nichts.
    Wenn nein könntest du die Zugriffe z.B. in einem seperatem Dokument ablegen, indem du im QueryOpen diese Infos dorthin schreibst

  • Richtig schwierig wird's ja erst wenn man das wörtlich nimmt was du schreibst, und der Eintrag nur dann gemacht werden soll wenn er das Dokument über einen DocLink öffnet. Nicht wenn er über eine Ansicht reingeht.


    Meinst du das eventuell so?

    • Offizieller Beitrag

    bin mir nicht sicher obs funktioniert, aber im LotusScript kannst Du von einem Dokument den ParentView auslesen. Eventuell ist dieser leer, wenn Du das Dokument über einen Link öffnest, da das Dokument per DocID geöffnet wird. D.h. im PostOpen müsste in etwa sowas stehen:

    Code
    dim view as NotesView
    set view = Source.Document.ParentView
    If view is Nothing then
     '... wurde über einen Link geöffnet
    Else
      '... wurde über eine Ansicht geöffnet
    End IF


    Aber ohne Garantie, dass es funktioniert.


    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

  • Nein, aber dennoch....
    Vielleicht nicht 100% wasserdicht, aber eine Moeglichkeit!
    Wenn das Dokument aus einer Ansicht heraus geoeffnet wird, gibt es ein Objekt Notesuiview. Das Objekt gibt es nicht, wenn das Dok ueber einen Link aus einem anderen Dok geoeffnet wird.
    Das koennte man abfragen und wenn das Objekt nicht existiert, dann den usernamen eintragen.

  • Hi, danke für die antworten :)


    aber mein problem ist leider immernoch nicht gelöst.



    Kurz gesagt:


    ich will irgendwie irgendwo dokumentieren wer auf das dokument zugreift bzw. anschaut


    d.h. ich guck in das dokument rein, (über einen dokumentenlink) und schliesse es direkt wieder ohne irgendwas zu ändern.


    dann sollte ín einem feld mein name automatisch gespeichert werden.



    geht das überhaupt ohne auf einen button zu drücken?

    • Offizieller Beitrag

    so wie Du es jetzt beschreibst, willst Du immer dokumentieren wer wann das Dokument angesehen hat - verstehe ich Dich da richtig?


    Ja es geht. Im PostOpen der Maske kannst Du ein Feld beschreiben oder Du füllst die Historie beim QueryClose. Voraussetzung ist:
    - der User hat entweder Editorrechte auf die DB
    - der User hat Autorenrechte auf die DB und steht über eine Gruppe, Rolle oder direkt in einem Autorenfeld des Dokumentes.



    ODER
    Du baust eine eigene DB, in der mitgelogt wird, wer wann welches Dokument angesehen hat, dies bedeutet allerdings Aufwand.


    Gruß
    Dirk

  • Ja genau, nur dass ich das später noch von einem Statusfeld und einer Abfrage der Userrolle abhängig machen will.



    In Post open habe ich jetzt folgendes stehen:


    Sub Postopen(Source As Notesuidocument)
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument

    Set db = session.CurrentDatabase
    Set view = db.GetView("meineAnsicht")
    Set doc = New NotesDocument(db)


    Call doc.save(True,True)

    End Sub





    Wie kann ich denn nun in Lotus Script ein Feld in der aktuellen maske ansprechen?

    • Offizieller Beitrag

    Felder in Notes kannst Du so setzen:
    doc.Feldname = Value
    Value kann String, Zeit, Name, Zahl, Liste usw sein


    auslesen kannst Du das Feld mit
    wert = doc.Feldname(0)
    liest den ersten Wert eines Feldes aus. Felder sind im Script immer als Mehrfachfelder zu behandelen.


    an alle werte kommst Du über:
    wert = doc.GetItemValue("Feldname")


    oder auf einen Wert an der Stelle x kommst Du so ran:
    wert = doc.Feldname(x)


    Wie viele Werte in einem Feld stehen bekommst Du mit
    anzahl = ubound(doc.Feldname)
    raus.


    Gruß
    Dirk

  • Hallo Miteinander, ich hab das Problem leider immernoch nicht gelöst. Bei PostOpen hab ich folgenden Quellcode stehen:


    Sub Postopen(Source As Notesuidocument)

    Dim session As New NotesSession
    Dim workspace As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument, doc2 As NotesDocument
    Dim item As NotesItem
    Set uidoc = workspace.CurrentDocument
    Set doc = uidoc.Document
    Set db = session.CurrentDatabase
    Dim temp As String

    temp = doc.Feld1

    Set item = doc.ReplaceItemValue(Feld2,Feld1)
    'Set doc.Feld2 = doc.Feld1
    'Call source.FieldSetText("Feld2", temp )

    Call doc.save(True,True)

    End Sub



    Ich bekomme aber immer eine Fehlermeldung "Type Mismatch" oder was anderes.
    Ich verzweifel langsam :P

    • Offizieller Beitrag

    Dein Fehler ist:
    Dim temp As String ' temp ist ein String
    temp = doc.Feld1 ' und doc.Feld1 ist ein Array


    entweder Du definierst temp als Array oder die liest den Wert an der Stelle (0) aus.
    temp = doc.GetItemValue("Feld1")
    oder
    temp = doc.Feld1(0)


    Wenn Du Fehler im Script bekommst, schalte mal den Debugger ein und schau Dir die Variablen (Typ und Inhalt) an, die Du in dieser Zeile verwendest.


    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