Newsgroup: it.comp.appl.notes-domino
Titolo: Agente per attach di posta

Esiste un agete che estrae in automatico gli attach e li sposta in una
cartella predefinita?
Grazie Paolo

 Grazie Paolo
Già fatto non mi risulta esista ma la realizzazione non è molto complicata.

 wrote in message
7vids1$s2r$1...@zamboni.dsnet.it...


> Potresti aggiungere qualcosa di piu'?
Sapevo che sarebbe andata a finire così...
mea culpa...
Specifico per i file di posta non lo ho ma posto qui una funzione che ho
creato in un DB per altri scopi.
Non ho il tempo di "semplificarla" eliminando le cose inutili ma non
dovrebbe essere difficile capirne il funzionamento ed adeguarla. In
particolare, le routine significative sono "ExtractFiles" e "EstraiFile". Il
resto lo ho allegato per completezza.
La routine dovrebbe essere richiamata da un agente che si attivi all'arrivo
di nuova posta mentre la mia prevede una selezione manuale da una vista.
Poi vanno stabilite le directory di estrazione (profile document?) ....
Spero sia sufficientemente chiara.
Sub Initialize
     Dim session As New NotesSession
     Dim db As NotesDatabase
     Dim view As NotesView
     Dim dc As NotesDocumentCollection 'la serie dei documenti da analizzare
     Dim doc As NotesDocument
     Dim doc2 As NotesDocument 'il documento in analisi
     Dim item As NotesRichTextItem 'l'item che contiene i files
     Dim id As Variant 'il NoteID del documento in analisi
     Dim i As Long 'cicla tra i documenti
     Dim p , pos As Integer 'usati per cercare l'estensione del nome file
     Dim stdir As String 'usato per memorizzare la directory corrente
     Dim outdir As String 'usato per chiedere all'utente la directory di
estrazione
     Dim sep As String 'usato per il separatore directory/file che è diverso
a seconda della piattaforma
     Dim currentlog As New NotesLog ( "Log agente estrazione file" )
'     Call currentlog.OpenMailLog ( "Giorgio Draghetti/art" , "Log agente
estrai files" )
     Call currentLog.OpenAgentLog
     Set db = session.currentdatabase
     Set dc = db.UnprocessedDocuments
     sep = GetDirSep 'recupera il separatore standard per i nomi di
directory (dipende dalla piattaforma
     stdir = Curdir$
     outdir = Inputbox$ ( "Directory di estrazione: " , "Estrazione dei
files da  " & dc.Count & " documenti Notes" , stdir )
     If ( outdir = "" ) Then
          Exit Sub 'l'utente ha premuto cancel
     End If
     For i = 1 To dc.count
          Set doc = dc.GetNthDocument ( i )
          id = doc.NoteID
          If ( doc.Riferimento ( 0 ) = "" ) Then
               ' i file sono da estrarre dal documento in analisi
               Call ExtractFiles ( doc , outdir , sep , id , currentlog )
          Else
               ' i file sono da estrarre dal documento di riferimento
               ' cerco documento di riferimento e se esiste, estraggo da lì
               Set view = db.getview("UnivID")
               Set doc2 = view.getdocumentbykey( doc.Riferimento ( 0 ) ,
True )
               If ( doc2 Is Nothing ) Then
               ' il documento di riferimento non esiste. Messaggio di errore
e rimango nel campo
                    Print "Il documento di riferimento " & doc.Riferimento
 0 ) & " non esiste!!! Continuo con prossimo documento"
                    Call currentlog.LogAction ( "Il documento di riferimento
" & doc.Riferimento ( 0 ) & " non esiste!!! Continuo con prossimo
documento" )
               Else
                    Call ExtractFiles (doc2 , outdir , sep , id ,
currentlog )
               End If
          End If
     Next
End Sub
Function ExtractFiles ( doc As NotesDocument , outdir As String , sep As
String , id As Variant , currentlog As NotesLog )
     ' Estrae tutti ifle presenti nel campo "File" del documento "doc" (max
6 file)
     ' assegna ai file estratti un nome composto da "outdir" + "sep" + "id"
+ progressivo da A a F
     ' il log delle operazione viene scritto in "currentlog"
     Dim NumFile As Integer
     Dim FExt As String
     Dim FName As String
     Dim item As NotesRichTextItem
     Set item = doc.GetFirstItem( "File" )
     Print "Analisi documento " & id
     Call currentlog.LogAction ( "Analisi documento " & id )
     'NumFile parte da 9 in modo da assegnare la lettera A al primo file
usando la conversione esadecimale
     If ( Isarray(item.embeddedObjects) ) Then
          NumFile = 9
          Forall o In item.EmbeddedObjects
               Select Case o.Type
               Case EMBED_OBJECTLINK :
                    Print "    Trovato un EMBED_OBJECTLINK: IGNORATO"
                    Call currentlog.LogAction ( "    Trovato un
EMBED_OBJECTLINK: IGNORATO" )
               Case EMBED_ATTACHMENT :
                    ' ho trovato un file allegato.
                    ' Lo estraggo su disco con la stessa estensione
esistente e nome del file uguale al NoteID+numero file (A=1, B=2, ...)
                    ' se i file allegati sono più di 6 (A-F), ignoro dal 6°
in poi
                    NumFile = NumFile + 1
                    If ( NumFile <= 15 ) Then
                         FExt = GetFileExtension ( o.Source )
                         FName = id & Hex$ ( NumFile ) & FExt
                         Call EstraiFile ( outdir & sep & FName , o ,
currentlog )
                    Else
                              ' non sono previsti più di 6 file all'interno
dello stesso documento
                         Print "   ERRORE: trovati più di 6 file all'interno
dello stesso documento. I rimanenti verranno ignorati"
                         Call currentlog.LogAction ( "    ERRORE: trovati
più di 6 file all'interno dello stesso documento. I rimanenti verranno
ignorati" )
                    End If
               Case EMBED_OBJECT :
                    Print "    Trovato un EMBED_OBJECT: IGNORATO"
                    Call currentlog.LogAction ( "    Trovato un
EMBED_OBJECT: IGNORATO" )
               End Select
          End Forall
     Else
          Print ("    ERRORE: il documento " & id & " non contiene oggetti -
ignorato" )
          Call currentlog.LogAction ( "    ERRORE: il documento " &
doc.NoteID & " non contiene oggetti - ignorato")
     End If
End Function
Function GetFileExtension ( nome As String ) As String
' la funzione ritorna l'estensione del file dato in input se esiste,
altrimenti "."
     ' nome = "" la funzione ritorna "."
     ' nome = "pippo." la funzione ritorna "."
     ' nome = "pippo" la funzione ritorna "."
     ' nome = "PIPPO.EPS" la funzione ritorna ".EPS"
     ' nome = "pippo.pippo.EPS la funzione ritorna ".EPS"
     Dim pos As Integer
     Dim p As Integer
     pos = 0
     p = Instr ( nome , "." )
     While ( p )
          pos = p
          p = Instr ( p+1 , nome , "." )
     Wend
     If ( pos <= 0 ) Then
          GetFileExtension = "."
     Else
          GetFileExtension = Mid$ ( nome , pos )
     End If
End Function
Function EstraiFile ( NewFName As Variant , obj As Variant , clog As
NotesLog ) As Variant
     Dim FName As String
     Dim FSize As Long
     Dim FClasse As String
     FName = obj.Source
     Print "Estraggo " & FName & " con nome " & NewFName
     Call clog.LogAction ( "   Estraggo " & FName & " con nome " &
NewFName )
     obj.ExtractFile ( NewFName )
End Function