Newsgroup: it.comp.appl.notes-domino
Titolo: Domanda difficile

Un grazie fin d'ora a chi mi dara' attenzione e (magari) qualche idea...
ho fatto un piccolo agente che parte ogni volta che un nuovo messaggio
arriva nel mio db di posta. Questo agente spolvera gli 'Unprocessed
Documents', verifica che abbiano attachment e, in questo caso, provvede a
esaminarli e a copiarli su cartelle del PC ....
Le linee in esame sono queste:
Set ListaDocumenti = db.UnprocessedDocuments
For k = 1 To ListaDocumenti.Count   ....
Set Doc = ListaDocumenti.GetNthDocument(k)   ....
Set doc_body = Doc.GetFirstItem("Body")       .....
If doc.HasEmbedded Then  .....
Forall o In Doc_body.EmbeddedObjects
quindi, viene fatto un ciclo su tutti gli unprocessed documents del
database, si sceglie il k-esimo, si guarda il suo body e se ci sono allegati
si compie un ciclo ForAll su tutti gli allegati ....
Il programmino funziona a meraviglia se i messaggi vengono spediti da client
Notes... se i messaggi vengono spediti da utenti connessi via browser al
Server domino, invece, l'agente si blocca sull'ultima riga con un messaggio
di errore 'Type mismatch' ...
Da notare che i messaggi (ma non necessariamente tutti quelli spediti con un
browser danno questo problema... solo una piccola parte) che bloccano
l'agente si presentano graficamente 'strani' ... se aperti con il client
Notes, mostrano il testo, una lunga riga nera e sotto l'icona
dell'attachment...
Può forse essere un problema di codifica (MIME, ...) ?
Qualcuno ha avuto problemi simili ...?
Grazie a tutti e ciao
Giovanni (
g...@prx.it
)

Qual è questa ultima riga?
Stai attento perchè se utilizzi una collection devi inserire
oltre al nome del campo anche (0) tale mancanza è una delle possibili cause
che scatena
il type mismatch
es:   doc.campo(0)
ma ripeto questa è una delle tante cause che generano tale errore.
Probabilmente hai compiuto un errore di sintassi da qualche parte.
Ciao!

Gli attachments possono essere inseriti in un rich text field o direttamente
nel documento.
Quando l'agente ti da errore probabilmente il campo Body non esiste
(dovresti verificarlo con Doc.HasItem)
e gli attachments si trovano a livello del documento (in
Doc.EmbeddedObjects).
Ciao.
    Emanuele


Gli attachments possono essere inseriti in un rich text field o direttamente
nel documento.
Quando l'agente ti da errore probabilmente il campo Body non esiste
(dovresti verificarlo con Doc.HasItem)
e gli attachments si trovano a livello del documento (in
Doc.EmbeddedObjects).
... Grazie per la veloce risposta... purtroppo nei casi di errore il campo
body esiste. In effetti i messaggi incriminati non hanno nessuna
particolarità (sono solo spediti con Explorer5 e si presentano graficamente
come ti accennavo); la riga che dà errore (type mismatch) è quella sulla
quale vado ad assegnare all' alias il valore degli n allegati che possono
essere nel documanto in esame:
Forall o In Doc_body.EmbeddedObjects
Aggiungo una cosa: se io conosco già il nome dell'allegato che mi interessa
posso fregare anche quei messaggi particolari con l'istruzione:
Set obj = doc.GetAttachment( "nome.xls")
Call obj.ExtractFile( "D:\Allegati\prova")
Infatti il GetAttachment funziona sempre, mentre il classico ForAll dà
subito errore.
Secondo te, ci sono altri modi di esaminare il doc.EmbeddedObjects ...? Può
darsi che il problema sia che nei casi sfigati questo oggetto non sia un
container, quindi non sia ispezionabile con il ForAll ....
Boh ....
Ancora grazie. Se vuoi ti invio di seguito le righe dell'agentino:
Sub Initialize
 Dim db As NotesDatabase
 Dim Session As New notessession
 Dim ListaDocumenti As NotesDocumentCollection
 Dim h,k,j As Integer
 Dim var,doc_body As Variant
 Dim doc As notesDocument
 Dim obj As notesEmbeddedObject
 Dim objarr(1 To 2) As notesEmbeddedObject
 Set db = session.CurrentDatabase
 Set ListaDocumenti = db.AllDocuments
 For k = 1 To ListaDocumenti.Count
  Set Doc = ListaDocumenti.GetNthDocument(k)
  Set doc_body = Doc.GetFirstItem("Body")
  If doc.HasEmbedded Then
   Messagebox doc.body
   Forall o In Doc_body.EmbeddedObjects
    If (o.Type = Embed_Attachment) Then Messagebox "...."
   End Forall
  End If
 Next k
End Sub