AppendDocLink erzeugt Fehler

  • Hallo und einen Guten Morgen,
    ich hätte da gerne ein Problem.
    In einer Schaltfläche ist der unten stehende LS-Code definiert.
    Gemäß Debugger kommt der Fehler sobald der DocLink eingefügt werden soll und der User erhält
    sinngemäß Fehlermeldung "Sie sind nicht zur Ausführung dieser Aktion berechtigt"
    System: Notes 8.5.3 FP 6
    User hat "Editor"-Recht auf die Datenbank und ist im Dokument auch als Autor gelistet.
    Ähnlicher Code funktioniert in anderen DB's einwandfrei, warum in dieser DB nicht :(
    Hat Jemand einen Tipp für mich?


    Dim Session As New NotesSession
    Dim db As NotesDatabase
    Set db = session.currentdatabase
    Dim wks As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = wks.CurrentDocument
    Dim Doc As NotesDocument
    Set Doc = uidoc.Document
    .
    .
    .
    Dim Memo As NotesDocument
    Set Memo = New Notesdocument(db)
    Dim RTI As NotesRichTextItem
    Set RTI = New NotesRichTextItem(Memo, "Body")
    Memo.Subject = "neuer Eintrag ""Ideenmanagement"" "
    Call RTI.AppendText("neuer Eintrag "+Chr(34)+doc.Titel(0)+Chr(34)+" >>> ")
    Call RTI.AppendDocLink(Doc, db.Title)
    Call Memo.Send(False, Verantwortliche)

  • Ist das doc bzw das übergeordnete uidoc schon mal gespeichert worden oder ist es noch ganz neu ?


    Beu letzterem hatte ich die Meldung auch schon öfters, weswegen ich einen DocLink immer nur erlaube wenn das zu verlinkende Dokument schon einmal gespeichert wurde.

  • Gibt es in deiner DB eine Defaultansicht, die alle Dokumente enthält ?
    Das kann gerade bei DocLinks sonst zu problemen und Fehlern führen


    Ansonsten, ganz blöde Frage vielleicht:


    Du bist dir sicher mit der Zeile in der der Fehler auftritt ?
    Am besten mal einen Errorhandler einbauen um sicherzugehen, nicht daß wir an der falschen Stelle suchen.

  • Hi Taurec,
    zu 1: eine Defaultansicht gibt es.
    zu 2: habe den Debugger mitlaufen lassen und der bricht genau in dieser Zeile ab.
    Komischerweise tritt bei mir als Admin der Fehler nicht auf ??

  • Probier doch mal aus wenn du statt db-Title einen festen String übergibst, ob der fehler dann auch noch auftritt.
    Wenn nicht würde ich den db.Title davor erst mal einer Stringvariablen zuweisen

  • Hallo,
    leider hilft auch das nicht. Komischerweise tritt bei mir (als Admin) der Fehler nicht auf. Scheint wohl irgendwie mit der Berechtigung zusammen zu hängen. Aber der User hat doch Editorenrecht auf die DB und im Dokument ist er als Autor gelistet und er kann das Dokument auch bearbeiten. Kommentiere ich den DocLink aus, läuft das Script auch einwandfrei durch. :(

  • Wie sieht es aus mit Rollen in der Maske?

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Hi,


    Mal ganz dumm gefragt.


    Du schreibst, dass du das UIDOC mit einem Reload neu laedst und dann erneut dem DOC zuweist.
    Bei diesem Reload werden aber keine Berechnungen angestellt, die den aktuellen Benutzer als "Berechtigten" fuer dieses
    DOC dann ausschliessen?
    Oder was eventuell auch noch sein kann, dass nach dem RELOAD und der Zuweisung des UIDOC zum DOC diese nicht
    korrekt laeuft und im DOC immer noch der "alte" Verweis enthalten ist.



    Andreas

  • Hallo,
    Nein, es erfolgen keine Berechnungen (recalc). Ich stelle einmal den gesamten Code dieses Buttons ein:
    Vielleicht sehe ich ja den Wald vor lauter Bäumen nicht.


    Dim Session As New NotesSession
    Dim db As NotesDatabase
    Set db = session.currentdatabase
    Dim wks As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = wks.CurrentDocument
    Dim Doc_Current As NotesDocument
    Dim Doc As NotesDocument
    Set Doc = db.GetProfileDocument("Profile")
    Verantwortliche = doc.GetItemValue("Verantwortliche")

    If Verantwortliche(0) <> "" Then
    Sichern_OK = True
    Call uidoc.Save
    Call uidoc.Reload
    Set Doc_Current = uidoc.Document
    Dim Memo As NotesDocument
    Set Memo = New NotesDocument(db)
    Dim RTI As NotesRichTextItem
    Set RTI = New NotesRichTextItem(Memo, "Body")
    Memo.Subject = "neuer Eintrag ""Ideenmanagement"" "
    Call RTI.AppendText("neuer Eintrag >> "+Chr(34)+Doc_Current.Titel(0)+Chr(34))
    Call RTI.AppendDocLink(Doc_Current, db.Title)
    Call Memo.Send(False, Verantwortliche)
    uidoc.FieldSetText("Status"), "Neu"
    Sichern_OK = True
    Call uidoc.Save
    Msgbox "Ihr Vorschlag wurde eingereicht."
    Call wks.OpenframeSet("Hauptsicht")
    Call uidoc.Close(True)
    End If

  • Ist auch sichergestellt, daß bei dem uidoc.Save das Dokument tatsächlich gespeichert wird und nicht durch eine QuerySave Bedingung daran gehindert wird (die z.B. beim Admin nicht greift) ?


    Ansonsten würde ich mir nach dem Speichern mal die UNID merken und das Dokument ganz frisch ger GetDocumentByUNID holen

  • Hallo,
    im Querysave habe ich nur folgenden Code (daran sollte es eigentlich nicht scheitern)


    If Sichern_OK = True Then
    'do nothing
    Else
    Messagebox(_
    " Bitte benutzen Sie die Schaltfläche 'Speichern & Verlassen', "+Chr(10)+ _
    " wenn Sie die Änderungen speichern möchten!! "),0+16,"Fehler...!!"
    continue = False
    End If

  • Hi,


    ich meinte aber eigentlich folgendes.


    Du schreibst, dass der aktuelle Benutzer Editoren-Rechte in der Db hat und auch als Autor in dem betreffenden Dokument
    gelistet ist.


    Sind es Autoren-Felder in dem Dokument? ==> bringen bei Editoren-Rechten auf der Db eh nichts.
    Sind Leser-Felder in dem Dokument vorhanden? Wenn ja, wie werden diese befuellt?



    Andreas

  • Hi,
    ich habe den Tipp von Taurec einmal aufgegriffen und versucht das Doc über die UNID zu öffnen:
    Aber wie zuvor....als Admin greift er sich das Doc_Current, beim User wird es nicht zugewiesen ??????
    Begreif ich nicht :( Irgendwie hat der User wohl kein Recht auf das Doc.


    If Verantwortliche(0) <> "" Then
    Sichern_OK = True
    Call uidoc.Save
    Call uidoc.Reload
    ID = wks.CurrentDocument.Document.UniversalID
    Set Doc_Current = db.GetDocumentByUNID(ID)
    Dim Memo As NotesDocument

    .
    .

  • Das deutet aber genau darauf hin, daß das Dokument entweder nicht gespeichert wurde oder aber der Benutzer keinen Zugriff darauf hat.
    Das würde ich auf jeden Fall mal validieren.
    Z.B. mal die UNID ausgeben und dann als Admin das Dokument holen und sich in genau diesem Zustand anschauen.

  • Da das Doc bereits gespeichert war, habe ich jetzt einmal das Doc direkt ohne erneutes Speichern zu gewiesen und bekomme einen Fehler angezeigt, der mir nichts sagt.


    "Falscher Datentyp in Methode NRun: SETPROP wurde gefunden, Unknow wurde erwartet" Hä ????


    Was soll mir das denn sagen?


    Den Code hatte ich zuvor auf das Notwendigste reduziert.
    Zugriff auf das Doc hat der User auf jeden Fall, denn im Memo.Subject übergebe ich den Doc_Current.Titel(0) und der wird korrekt gelesen.


    Dim Session As New NotesSession
    Dim db As NotesDatabase
    Set db = session.currentdatabase
    Dim wks As New NotesUIWorkspace
    Dim doc_current As NotesDocument
    Set Doc_Current = wks.currentdocument.Document
    Dim Memo As NotesDocument
    Set Memo = New NotesDocument(db)
    Dim RTI As NotesRichTextItem
    Set RTI = New NotesRichTextItem(Memo, "Body")
    Memo.Subject = "neuer Eintrag ""Ideenmanagement"" "
    Call RTI.AppendText("neuer Eintrag >> "+Chr(34)+Doc_Current.Titel(0)+Chr(34))
    Call RTI.AppendDocLink(Doc_Current , db.Title)
    Call Memo.Send(False, "Harald Wendt")

  • Ich schon wieder ;)
    ich hab's jetzt einmal per Java-Agent probiert, leider mit dem gleichen Ergebnis.
    Bei mir funktionierts, bei den Usern nicht :(
    Muss wohl doch irgendwie an Rechten liegen. Werde mal weiter graben, gebe Rückmeldung, wenn ich's gefunden habe.
    Zunächst einmal vielen Dank für eure Tipps.


    import lotus.domino.*;


    public class JavaAgent extends AgentBase {


    public void NotesMain() {


    try {
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();
    Document doc = agentContext.getDocumentContext();
    Database db = agentContext.getCurrentDatabase();
    Document Profildoc = db.getProfileDocument("Profile", null);
    String Empfaenger = Profildoc.getItemValueString("Verantwortliche");


    Document Memo = db.createDocument();
    Memo.appendItemValue("Form", "Memo");
    Memo.appendItemValue("Subject", "neuer Eintrag 'Ideenmanagement' ");
    RichTextItem body = Memo.createRichTextItem("Body");
    body.appendText("neuer Eintrag >> "+doc.getItemValueString("Titel")+" <<");
    body.addNewLine(1);
    body.appendText(">>> ");
    body.appendDocLink(doc, db.getTitle() ,"Verknüpfung zum Dokument");
    body.appendText(" <<<");
    Memo.send(Empfaenger);


    body.recycle();
    Memo.recycle();


    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    }


  • Hallo,
    ich glaube habe es gefunden! Es waren mehrere Autorenfelder im Dokument, dadurch ist es wahrscheinlich zu diesem Problem gekommen.
    Nochmals vielen Dank für die Unterstützung.