Das Notes Forum

Lotus Notes / Domino 10 => ND10: Entwicklung => Thema gestartet von: tfrenz am 08.06.20 - 11:12:20



Titel: Trash in eigene Applikation
Beitrag von: tfrenz am 08.06.20 - 11:12:20
Hallo, es soll ein papierkorb in einer eingenen Applikation implementiert werden.
Habe einen Folder ($trash) erstellt, dann die DB Eigenschaften Softdeletion eingeschaltet.
Aber beim löschen eines Dokumentes mit DEL bleibt das Dokument in der Ansicht, wird nur das x vorne für gelöscht angezeigt.
Warum verschwindet das Dokument nicht in den Folder $trash ?
Gruß Thomas


Titel: Re: Trash in eigene Applikation
Beitrag von: shiraz am 08.06.20 - 11:50:57
https://atnotes.de/index.php/topic,48188.0.html (https://atnotes.de/index.php/topic,48188.0.html) ....


Titel: Re: Trash in eigene Applikation
Beitrag von: jBubbleBoy am 08.06.20 - 12:13:58
verstehe ich nicht, das Markieren mit X ist doch ein normales Verhalten beim Löschen ...

Man benötigt aber eine Ansicht vom Typ "enthält gelöschte Dokumente", um die weich gelöschten Dokumente zu sehen.


Titel: Re: Trash in eigene Applikation
Beitrag von: Tode am 08.06.20 - 17:54:23
Das Standardverhalten einer Notes- Applikation ist:

1. Markieren - Entfernen - Häkchen dran.
2. F9 oder Datenbank verlassen - Dokument verschwindet aus der Ansicht
3. WENN Softdeletion aktiviert ist, dann taucht das Dokument im Ordner "($Trash)" in einer bestimmten Ansicht auf, die -wie Erik schreibt- mit dem Typ "enthält gelöschte Dokumente" erstellt wurde. Wenn Softdeletion NICHT aktiviert ist, dann ist danach das Dokument wirklich weg.

Die Maildatenbank "tweaked" diesen Prozess, indem Sie den QueryDocumentDelete- Prozess mit Continue = False abbricht, und stattdessen die Dokumente direkt mittels NotesDocument.Remove löscht. Dadurch glauben viele Entwickler, dieses Verhalten wäre "normal" bei Softdeletions. Ist es aber nicht...


Titel: Re: Trash in eigene Applikation
Beitrag von: jBubbleBoy am 09.06.20 - 10:29:47
Naja nicht ganz ;)

denn es gibt keinen Ordnertyp für "gelöschte Dokumente". Diese Typ-Auswahl wird nur beim Erstellen einer Ansicht angeboten und Mail-DBs arbeiten mit der Softdeletion von Notes, wenn das mal anders war, dann muss das schon sehr lange her sein.
Wenn man die Softdeletion- Eigenschaft der Mail-DB entfernt, dann wird immer sofort gelöscht.

Die Mail-DB besitzt einen Ordner "($Trash)", aber damit wird nur das Drag & Drop der Dokumente in den Papierkorp "simuliert", dieser Ordner ist ist leer wenn man ihn direkt öffnet. Weiche Löschungen, in der Mail-DB, befinden sich in der Ansicht "($SoftDeletions)".


Titel: Re: Trash in eigene Applikation
Beitrag von: tfrenz am 09.06.20 - 10:34:43
Hallo und danke für sie Informationen  :)
Das mit den DB Eigenschaften, dem View $Softdeletion habe ich nun verstanden und auch so umgesetzt.
Aber wenn ich nun ein Dokument lösche, wird es nicht von der aktuellen Ansicht entfernt.
Erst nach F9 drücken.
Was muss ich hier noch angeben.


Titel: Re: Trash in eigene Applikation
Beitrag von: Tode am 09.06.20 - 11:18:27
@Erik: Ich weiss nicht, woher Du diese Sicherheit nimmst... ich habe gerade im 11er Default Mailtemplate geschaut. Da steht im QueryDocumentDelete (u.a.) folgender Code:
Code:
Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
Dim preRNext, SupressDeleteDialogs As Integer, MtgOwner As Integer,  result As Integer
Dim tmpOwner As String, strFormNm As String, strToDoMessage As String
Dim iCalDocstoDel As NotesDocumentCollection,curDoc As notesdocument 'variables to support ical deletion logic
Dim profileDoc As Notesdocument
Dim e As Variant, v As Variant
Dim versionNumber As Integer


Const INVAL_DOCUMENT =  "Zum Ausführen dieser Aktionen müssen Sie ein Instanzdokument auswählen."
Const ERR_TITLE = "Fehler"

    ...

If Strcompare(strViewName, "Rules")  = 0 Then

      ...

Elseif Strcompare(strViewName, "($Sent)")  = 0 Then

...

For i=1 To source.documents.count
Set doc = source.documents.GetNthDocument(i)

If (nAction = 1) Then
If doc.isuidocopen Then
noteid = doc.noteid
Delete doc
Set doc = source.database.getdocumentbyid(noteid)
doc.remove True
Else
' Remove All
Call source.documents.RemoveAll(False)
Exit For
End If
Elseif nAction=2 Then
Call source.documents.stampall("ExcludeFromView", "S")
Exit For
End If
ws.viewrefresh
Next

ws.viewrefresh
Continue = False
BadDoc:
If Err = 4241 Then
Messagebox DocPreviewMessage, MB_ICONEXCLAMATION, DocPreviewTitle
Exit Sub
End If

' if C&S View or Note is Open in UI then....
Elseif strViewName = "" Or IsCSView(strViewName) Or IsToDoView(strViewName) Then

...

End if

If Not( profiledoc Is Nothing ) Then Delete profiledoc
continue=False
If (fRefresh = True) Then Call ws.viewrefresh
If RefreshCalendar = True Then Call ws.ViewRefreshByDBid(source.Database.ReplicaID,"($Calendar)",True)
Exit Sub 'backwards compatibility

End Sub
An jeder Stelle, an der "tatsächlich" gelöscht wird, ist ein zusätzliches "doc.Remove" oder "source.documents.RemoveAll(False)" und ein "continue = false"...

Im selben Code ist übrigens auch die Abfrage auf "@IsSoftDeleteEnabled" drin, und wenn nicht, dann reagiert der Code tatsächlich anders...

Das heisst: ohne diesen Code werden die Mails IMMER bis zum Drücken von "F9" in der Ansicht bleiben, und erst danach in den Trash wandern... Also genau das Verhalten, was tfrenz bescvhreibt...   


Titel: Re: Trash in eigene Applikation
Beitrag von: jBubbleBoy am 09.06.20 - 15:54:49
@Torsten: Ein doc.Remove, in Kombination mit einem continue = false, ändert nichts an einer gesetzten Softdeletion-Datenbankeigenschaft und etwas anderes habe ich nie behauptet ;)

Wenn man das F9 drücken umgehen möchte, dann hilft genau diese Kombination von remove und continue=false. Muss in das Datenbankereignis Querydocumentdelete gesetzt werden:
Code:
Call source.Documents.Removeall(true)
continue = False
On Error Resume Next
Dim ws As New NotesUIWorkspace
ws.Viewrefresh


Titel: Re: Trash in eigene Applikation
Beitrag von: Tode am 09.06.20 - 16:08:04
Aber dann versteen wir uns ja... Genau das wollte ich ja sagen: Das normale Verhalten ist: Dokument bleibt da mit Häkchen, egal ob Softdeletion oder nicht... Wenn man das Häkchen nicht will, dann muss man im QueryDocumentDelete eingreifen...


Titel: Re: Trash in eigene Applikation
Beitrag von: tfrenz am 09.06.20 - 16:13:46
Hallo,
Danke n jBubbleBoy, das mit Viewrefresh war das was mir gefehlt hat.
Jetzt funktioniert es so wie es sein soll.
Auch Danke an Tode, für die exakte Erklärung