Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: MrMagoo am 20.08.03 - 12:48:09
-
Hallo, folgendes Script funktioniert eigentlich bestens. Da ist "natürlich" aber eine kleine Sache. Ist es möglich, anstatt den Ordner vorzugeben, eine Dialogbox für die Ordnerauswahl zu öffen?
ich verwende das Script in einem Agenten und es sollen nur ausgewählte Mails berücksichtigt werden.
Danke
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim rtitem As Variant
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument
While Not (doc Is Nothing)
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
'Dateien in Verzeichnis c:\Ordner lösen
Call o.ExtractFile( "c:\Ordner\" & o.Name )
End Forall
End If
Set doc = collection.GetNextDocument(doc)
Wend
End Sub
-
Hilft Dir nicht notesUIWorkspace.SaveFileDialog ?
-
hm ich glaub ich verstehe dich nicht richtig. Ich will ja in einer Ansicht mehrer Mails erst per hand auswählen, den Agenten starten, der soll Fragen welches Verzeichnis und dann alle Datein in das Verzeichnis lösen. geht das mit ui ??
-
Du stellst doch nur die Frage im FrontEnd.
Ansonsten: Die Abfrage Pfad in den Button, Übergabe Pfad ins Environment, dann Agent aufrufen, der die Anhänge der gelösten Docs löst.
-
Hi,
ich hab so was mal mit nem Script gelöst (das ich mir irgendwo geklaut hatte ;D). Funktioniert aber glaub ich nur unter Windows.
Hier mal die Funktion :
Function BrowseFolder (path As String, windowtitle As String) As String
Dim X As Long, bi As BROWSEINFO, dwIList As Long
Dim wPos As Integer
Dim cam2 As String
bi.pszDisplayName = path
bi.hOwner = hWndAccessApp
bi.lpszTitle = title
bi.ulFlags = BIF_RETURNONLYFSDIRS
dwIList = SHBrowseForFolder (bi)
cam2 = Space$(512)
X = SHGetPathFromIDList(Byval dwIList, Byval cam2)
If X Then
wPos = Instr (cam2, Chr(0))
BrowseFolder = Left$ (cam2, wPos - 1)
Else
BrowseFolder = ""
End If
End Function
-
Also
@koehlerbv: habe mir die sache mit "notesUIWorkspace.SaveFileDialog " genauer angesehen. Ordnerauswahl klappt gut, allerdings muss beim speichern dann ein File name vorgegeben werden und ich krieg es nicht hin das ein Ordner für z.B 20 Mailanhänge genommen wird
@diri nun ja mit Funktionen habe ich noch nie etwas gemacht.
Wird die funktion im Agent aufgerufen?? wie??
LS gibt mir auch Fehler bei diesem Script, siehe Anhang
Gruß
-
Oops, sorry, da hab ich gepennt.
Okay, nochmal das ganze
Unter Declarations muß folgendes stehen :
Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (Byval pidl As Long, Byval pszPath As String) As Long
Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Die eigentliche Funktion (s.o.) solltest du ja schon drin haben.
Der Aufruf erfolgt dann so :
Dim folder As String
folder = BrowseFolder ("","")
In "folder" hast du dann Pfad als String drin. Den kannst du dann beim Lösen der Dateien angeben.
-
Also was soll ich sagen, es funktioniert, Danke
für alle nochmal das komplette Script. Dazu kommt dann noch die Funkton von Driri.
Zuerst wird ein Ordner abgefragt und dann die Anhänge der markierten Mails mit Ihrem Namen in diesem Ordner abgespeichert.
Sub Initialize
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim rtitem As Variant
Dim folder As String
folder = BrowseFolder ("","")
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument
While Not (doc Is Nothing)
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
'Dateien in Verzeichnis c:\reports lösen
Call o.ExtractFile( folder+"\" & o.Name )
End Forall
End If
Set doc = collection.GetNextDocument(doc)
Wend
End Sub
-
???
ich habe mir mal Eure Hirnschmalzproduktionen vorgenommen, da ich ein ähnliches Prob habe:
Ich will auch ein Verzeichnis-Auswahl-Fenster haben, um die darin liegenden PDF-Files an neue Doks anzuhängen.
Also (mein) Schritt 1: In einer Ansicht eine neue Aktion erstellen.
Schritt 2: Diri's Declaration in die Aktion Declaration packen
Schritt 3: Diri's Function darunter packen
Schritt 4: In den click-event nur
Dim folder As String
folder = BrowseFolder ("","")
mal zum Testen reinpacken.
Beim Speichern kommt dann alerdings folgende Fehlermeldung:
BrowserFolder:8: Not a member: HOWNER
Was habe ich falsch gemacht?
-
Seltsam, sollte eigentlich nicht sein.
Schau nochmal hier:
http://www.atnotes.de/index.php?board=9;action=display;threadid=10524
Da hatte ich das ganze mal zusammengefasst und klappt wunderbar bei copy & paste.
Was allerdings noch fehlt ist z.B. eine If - Abfrage wenn z.B. folder leer ist.
TMC