Dokument in View löschen

  • Der Code ist in dem Click-Event einer Aktion enthalten, die zu einem View gehört.


    Sub Click(Source As Button)
    Dim coll As NotesDocumentCollection, _
    ws As New NotesUIWorkspace, _
    sourceview As NotesUIView, _
    doc As NotesDocument, _
    cnt As Double


    Set sourceview = ws.CurrentView
    Set coll = sourceview.Documents
    Set doc = coll.GetFirstDocument

    cnt = coll.Count

    veri = Msgbox("Möchten Sie " + Cstr(cnt) + " Dokumente löschen?", 4 + 32, "Dokument löschen")

    If veri <> 6 Then
    continue = False
    Exit Sub
    End If

    Set doc = coll.GetFirstDocument

    Do While Not (doc Is Nothing)
    Call doc.Remove(True)
    Set doc = coll.GetNextDocument(doc)
    Loop

    Call ws.ViewRefresh
    End Sub

  • Wie Homer schon meinte:


    Erstell einen Agenten Trigger Selected Documents


    Und dort folgenden Code rein


    Dim ses As NotesSession
    Dim db As NotesDatabase
    Dim dc As NotesDocumentCollection


    Set ses = New NotesSession
    Set db = ses.CurrentDatabase
    Set dc = db.UnprocessedDocuments


    call dc.RemoveAll(true)

  • ...bis auf den doppelten Verweis auf das doc kann ich nichts ungewöhnliches feststellen. Das Skript funktioniert so wie es hier steht bei mir tadellos...


    Hast Du vielleicht noch irgendwo ein Vorschaufenster auf das Dokument aktiviert...?

    [size=x-small]
    Computer sind da um zu rechnen!
    Nicht um Ausreden wie: "Ich kann nicht durch Null teilen!", auf den Bildschirm zu schreiben.
    [/size]

  • pascal_x


    Der View selbst hat ja eine Vorschau, wenn ich mit dem Cursor auf dem Dokument stehe, dann auf die Spalte links neben dem Dokument den Haken setze und dann das Skript laufen lasse, kommt die Meldung "Cannot delete blablabla"


    Wenn ich ein anderes Dokument per Cursor auswähle und dann ein anderes mit Haken versehe und dann das Skript laufen lasse, kommt: "Function requires a valid ADT argument" Hä?


    Noch was: Wenn ich in dem Skript @Command([EditClear]) aufrufe, funktionert es, aber ich will vor dem Löschen noch gewisse Dinge abfragen, deshalb der Aufwand.

  • ...aha da kommen wir der Sache schon näher.... Wenn Du das Dokument in der Vorschau geöffnet hast dann kannst Du es nicht gleichzeitig im Backend löschen... versuche mal mit set uidoc = ws.CurrentDocument und call uidoc close vorher das Dokument zu schliessen.

    [size=x-small]
    Computer sind da um zu rechnen!
    Nicht um Ausreden wie: "Ich kann nicht durch Null teilen!", auf den Bildschirm zu schreiben.
    [/size]

  • und fuer die Meldung "Function requires a valid ADT argument" musst Du die Schleife anpassen. Ungefaehr so:

    Code
    Set doc = coll.GetFirstDocument
    
    
    Do While Not (doc Is Nothing)
    set remove_doc = doc
    Set doc = coll.GetNextDocument(doc)
    Call remove.Remove(True)
    
    
    Loop
  • dnotes


    Dein letztes Skript funktioniert zum Teil. Wenn ich ein Dokument mit Haken versehe und dann ein anderes per Cursor auswähle, dann das Skript laufen lasse, dann wird das erste Dokument gelöscht. Wenn ich allerdings die Aktionsbutton nochmal drücke, dann erscheint: "Möchten Sie 1 Dokumente löschen?" obwohl keins ausgewählt ist.


    Bleibt immer noch das Problem, wenn ich das Dokument, auf dem ich per Cursor stehe, löschen will, klappt es nicht. Wahrscheinlich, weil dieses Dokument in der Vorschau geöffnet ist. Wie kann ich denn diese Vorschau schließen?

  • Diesen Code in einen Agenten und es laeuft. Ich bin da eh etwas skeptisch bezueglich des coll.count. Irgendwie kommt mir das fehlerhaft vor.


    Und das laeuft auch bei geoeffneter Vorschau ;)

  • Hat etwas länger gedauert. Ich hatte nämlich keine Berechtigung, einen Agenten anzulegen und die Rechtevergabe ist etwas komplizert...


    Ich muß leider eine grundsätzliche Frage zum Agenten stellen: Wie setze ich den ein? Ich habe im View eine Aktionsleiste mit Aktionen und eine dieser Aktionen soll den Agenten starten. Wie kriege ich das hin?


    Sorry für diese Fragen, aber ich bin Notes-Anfänger...

  • Nach 4 Seiten Postings mit viel Auf und Ab: Wie sähe es denn mit einem einfachen, alten @Command aus ?


    EditClear


    Führt den Menübefehl "Bearbeiten - Löschen" aus.
    Syntax
    @Command([EditClear])
    Verwendung
    In einer Ansicht, einem Ordner oder einem Dokument im Lesemodus markiert dieser Befehl das momentan ausgewählte Dokument, um es zu löschen.
    In einem Dokument im Bearbeitungsmodus löscht dieser Befehl die markierten Daten (Text, Tabellen, Grafiken, Verknüpfungen, Dateianhänge oder Objekte).
    Die Verwendung von @Command([EditGotoField]) im Anschluß an diesen Befehl führt zu einem Fehler.
    In einer Maske, einer Teilmaske, einer Ansicht oder einem Ordner im Gestaltungsmodus werden die markierten Daten, Felder oder Spalten gelöscht.
    Im Arbeitsbereich löscht dieser Befehl das ausgewählte Symbol, ohne jedoch die Datenbank zu löschen.
    Dieser Befehl wird nur nach der Auswertung der gesamten Formel ausgeführt, unabhängig davon, ob @Command oder @PostedCommand verwendet wird.
    Es ist sinnvoll, diesen Befehl über SmartIcons aufzurufen.
    Wenn Sie diesen Befehl in Web-Anwendungen einsetzen, löscht er das aktuelle Dokument. Verwenden Sie den Befehl in Web-Anwendungen nur in Masken, in Ansichtsaktionen kann er nicht eingesetzt werden.

  • LN4ever


    Den Befehl kenne ich! ;) Aber ich möchte vor der Löschaktion noch einige Prüfungen durchführen und dann entscheiden, ob gelöscht werden darf oder nicht und das geht ja wohl nur in LotusScript.

  • So lange die Prüfungen innerhalb eines Dokuments stattfinden, hast du mit der Formelsprache auch viele Möglichkeiten, z.B.


    @If(status="nixloesch";@Return(@Prompt([OK];"Error";"Löschen nicht erlaubt auf Grund von Status");NULL);
    @Command([EditClear])


    Mit Web wird es leider hakelig, da @Prompt nur sehr eingeschränkt zur Verfügung steht.

  • Gar keine schlechte Idee!


    Ich habe Adressen und Maschinen, die einer Adresse zugeordnet sind. Vor Löschen der Adresse will ich prüfen, ob noch Maschinen dieser Adresse zugeordnet sind. Jetzt muß ich beim Anlegen und Löschen dafür sorgen, daß das entsprechende Statusfeld in der Adresse gepflegt wird.


    Aber da habe ich beim Löschen einer Maschine wieder dasselbe Problem oder wie kann ich bei Löschen per @COMMAND ein Feld in einem Dokument einer anderen Datenbank füllen?