Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Jenson am 19.10.04 - 10:47:50

Titel: Anzahl neue eMails ermitteln ?
Beitrag von: Jenson am 19.10.04 - 10:47:50
Hallo zusammen,

für eine Portalseite möchte ich die Anzahl an neuen eMails im Postfach des Benutzers ermitteln und das möglichst mit der Formelsprache.

Da auf dem Intranetserver auch gleichzeitig Domino Web Access läuft (iNotes) liegen die Mailboxen sowieso lokal auf dem Server vor. In dem Bereich in dem diese Portalseite angezeigt werden soll ist der Benutzer auch schon am Webserver authentifiziert gegen die Names des Servers.

Allerdings habe ich keinen blassen Schimmer wie ich die Anzahl der neuen eMails in den Maildatenbanken ermitteln soll. Ich kann vorallem keine neue Ansicht hinzufügen über die ich das dann ermitteln könnte, da unsere Mailschablone ziemlich "dicht" ist und wir ausserdem sonst jede Mail-Datenbank ändern müssten.

Gibt es da eine andere Möglichkeit ?

Server ist eine Domino 6.5.2 auf Linux mit deutschem Sprachpaket.

Danke im Vorraus für das entfernen jeglicher Bretter vor meinem Kopf !

Jenson
Titel: Re: Anzahl neue eMails ermitteln ?
Beitrag von: Driri am 19.10.04 - 12:01:35
Wie definierst Du "neu" ? Ungelesene Dokumente oder hinzugekommene Dokumente seit dem letzten Öffnen der Datenbank ?

Per Script gäbe es da UnprocessedDocuments und UnprocessedSearch. Ich bin mir aber nicht sicher, ob sich eine derartige Anforderung sauber umsetzen läßt.
Titel: Re: Anzahl neue eMails ermitteln ?
Beitrag von: Semeaphoros am 19.10.04 - 13:12:29
Hm, Ingo, die heissen zwar beide "Unprocessed", das hat aber in beiden Fällen nichts damit zu tun, was Jenson sucht, ich kenne jedenfalls keinen Weg über die genannten Properties an die gesuchten Werte zu kommen :( Aber auch was anderes sehe ich im Moment nicht.
Titel: Re: Anzahl neue eMails ermitteln ?
Beitrag von: Driri am 19.10.04 - 15:20:00
Hallo Jens,

ich hatte mich da auf das Beispiel aus der Designer-Hilfe verlassen :

Zitat
This agent script runs on all unread documents, and its purpose is to put unread documents into a folder.
If the agent does not contain a search, UnprocessedDocuments returns all unread documents in the database each time the agent runs, regardless of whether the agent has already run on some of the unread documents.
If the agent does contain searches, UnprocessedDocuments returns all unread documents in the database that meet the search criteria, regardless of whether the agent has already run on some of the unread documents.
Sub Initialize
     Dim session As New NotesSession
     Dim db As NotesDatabase
     Dim collection As NotesDocumentCollection
     Dim doc As NotesDocument   
     Set db = session.CurrentDatabase
     Set collection = db.UnprocessedDocuments
     Set doc = collection.GetFirstDocument()
     While Not(doc Is Nothing)
          Call doc.PutInFolder _
          ( "Stop dreaming! Read these documents!",True )
          Set doc = collection.GetNextDocument(doc)
     Wend
End Sub

Das Script soll angeblich alle ungelesenen Dokumente herauspicken können. Das wäre doch evtl. das, was Jenson will.
Titel: Re: Anzahl neue eMails ermitteln ?
Beitrag von: Semeaphoros am 19.10.04 - 15:30:09
Stimmt, hab ich übersehen, ist dann der Fall, wenn der Agent mit folgender Eigenschaft versehen ist:

All unread documents in  view

Heisst aber, dass man einen solchen Agenten nur aus einem View heraus starten kann. So aus dem hohlen Bauch heraus würde ich sagen, damit lässt sich das Ziel vermutlich irgendwie erreichen, es braucht aber wohl ein paar Verrenkungen, bis man soweit ist.

Danke für die Berichtigung
Titel: Re: Anzahl neue eMails ermitteln ?
Beitrag von: Driri am 19.10.04 - 17:22:49
Kein Problem. Und ich hab ja auch nicht behauptet, daß es einfach würde  ;)
Titel: Re: Anzahl neue eMails ermitteln ?
Beitrag von: Jenson am 28.10.04 - 17:03:41
:-) Etwas spät aber hier ist doch noch eine Antwort von mir :-) War in ungeplantem Urlaub.

Ich kann aber an den Mail-Datenbanken der User selber nix ändern, d.h. keine View hinzufügen oder an den vorhandenen etwas ändern. Die müssen Standard bleiben.

Also denke ich gibts da keinen Weg da dran zu kommen ?

Jenson
Titel: Re: Anzahl neue eMails ermitteln ?
Beitrag von: Driri am 28.10.04 - 17:12:51
Ich denke, da wirst Du ansonsten keine Chance haben.
Titel: Re: Anzahl neue eMails ermitteln ?
Beitrag von: Semeaphoros am 29.10.04 - 09:25:21
Jo, das sehe ich auch so.
Titel: Re: Anzahl neue eMails ermitteln ?
Beitrag von: Jenson am 29.10.04 - 15:16:34
Die Inbox der Mailbox ist auch keine Ansicht, oder? Wenn doch, dann könnte man doch die irgendwie nutzen ... Der Notes Client muss doch sicherlich auch über irgendein Merkmal die Farben z.B. auf rot setzen ...

Jenson
Titel: Re: Anzahl neue eMails ermitteln ?
Beitrag von: Semeaphoros am 29.10.04 - 15:55:52
Die Inbox ist ein Ordner und nicht eine Ansicht
Titel: Re: Anzahl neue eMails ermitteln ?
Beitrag von: datenbanken24 am 29.10.04 - 16:13:36
Geht wohl derzeit nur über die C API:

Getting the unread count from inbox folder of mailbox

(gefunden im Domino R6 Forum)

http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/0fdabb5e8529814785256d7100397d0e?OpenDocument

You can use LotusScript along with the C API to get this information:

Put the following in your (Declarations) section:

Declare Function NSFDbOpen Lib "nnotes.dll" (Byval PathName As String,rethDB As Long) As Integer

Declare Function NSFDbClose Lib "nnotes.dll" (Byval hDB As Long) As Integer

Declare Function NSFDbGetUnreadNoteTable Lib "nnotes.dll" (_
Byval hDB As Long,_
Byval UserName As String,_
Byval UserNameLength As Integer,_
Byval fCreateIfNotAvailable As Boolean,_
rethUnreadList As Long) As Integer

Declare Function IDDestroyTable Lib "nnotes.dll" (Byval hTable As Long) As Integer

Declare Function IDEntries Lib "nnotes.dll" (Byval hTable As Long) As Long


Then the following function will return the unread count for a particular user in a particular database:

Function GetUnreadCount(server As String,database As String,username As String) As Long
Dim rc As Integer
Dim hDB As Long
Dim hTable As Long
GetUnreadCount=-1
rc=NSFDbOpen(server+"!!"+database,hDB)
If rc=0 Then
rc=NSFDbGetUnreadNoteTable(hDB,username,Len(username),0,hTable)
If rc=0 Then
GetUnreadCount=IDEntries(hTable)
IDDestroyTable hTable
End If
NSFDbClose hDB
End If
End Function


Make sure the username is passed in full canonical format (e.g. UserName property of NotesSession)