Newsgroup: it.comp.appl.access
Titolo: WebBrowser ed Access

Salve a tutti.
Grazie ai consigli di Cinzia sono andato abbastanza avanti nello sviluppo 
dell'applicativo che sto realizzando avanzatempo.
Ora ho un problema che non riesco a risolvere da alcuni giorni.
Ho una maschera con un controllo webbrowser attraverso il quale accedo ad 
Outlook Web Access e visualizzo una mail con alcuni allegati.
Vorrei poter salvare gli allegati sul disco locale, ma non risco a trovare 
il comando che mi consenta di fare questa cosa.
Eppure un metodo deve esistere, visto che facendo click col tasto destro del 
mouse su ogni allegato appare l'opzione per poter salvare l'oggetto. Ecco, 
io vorrei fare qualcosa di simile, ma con un pulsante che faccia tutto 
automaticamente, salvando gli allegati in dei files il cui nome viene 
generato dal programma.
La gestione dei nomi dei files l'ho realizzata, ma sto sbattendo la testa 
sul WebBrowser e sul suo oggetto MSHTML.HTMLDocument per trovare il modo per 
fare il download degli allegati, ma non ci sono riuscito.
L' oggetto MSHTML.HTMLDocument gestisce l'evento ExecWB, ma non sono 
riuscito a trovare il sistema per leggere e salvare gli allegati.
Per favore, datemi qualche suggerimento.
Grazie
Antonio


Ciao Antonio,
dopo che ti hanno tutti giustamente "redarguito" anch'io come Sergio ti dirņ
che non posso riprodurre la tua situazione e quindi temo di non essere molto
di aiuto... secondo me dovresti provare a guardare l'HTML che hai nel
controllo WebBrowser, cercare di capire se da lģ riesci a recuperare le
informazioni che ti servono, se gli allegati sono dei link, probabimente con
il metodo getElementsByTagName dell'oggetto document dovresti riuscire a
recuperare i link al file  e una volta ottenuti i percorsi un qualche modo
per accedeere ai file si trova...
-- 
Cinzia
---------------------------------------
|  
http://www.riolab.org
  |
---------------------------------------


Grazie Cinzia,
speravo proprio che tu conoscessi la strada che dovrei percorrere. Pazienza 
!!!
Il guaio č che io e l'inglese siamo come don Matteo e belzebů, e Internet, 
senza riuscire a dare parole chiave significative, č una miriade di 
informazioni, quasi tutte in inglese (il belzebů di prima) e non riesco a 
trovare l'indicazione della strada. Anche il sito MSDN non mi č stato molto 
di aiuto e mi viene anche da pensare che la Microsoft sia esageratamente 
prolissa su certe cose ed arida su altre. Quante classi sull'HTML !!! Ma 
servivano proprio tutte ? Non č forse che poche classi avrebbero potuto 
assolvere a tutti i problemi ? Ma ne hanno prodotto un'infinitŕ... magari 
con lo scopo recondito di mettere nei guai chi come me non sa da che parte 
girarsi.
Quando avrň trovato uno straccio di soluzione farň un nuovo intervento 
augurandomi di poter essere di aiuto a qualcuno.
Grazie ancora
Antonio

 Antonio
Non è un problema di "classi" ma di sapere come si comporta il codice HTMl 
in un browser. Se non hai queste nozioni, qualsiasi classe/funzionalità ti 
sembrerà fuori luogo.
Per essere precisi; la mia impossibilità nell'aiutarti è data dal fatto che 
oltre a non possedere (o avere accesso) al software che hai indicato, non 
conosco come viene disegnata la pagina web. Se utilizza frame; iframe o 
altre tecniche che possono invalidare qualsiasi mio suggerimento.
L'unico suggerimento che posso darti è "il come mi comporterei io"; quello 
di non utilizzare lo scorrimento dell'HTML quanto la possibilità di 
interfacciarmi direttamente con l'oggetto che legge le risorse e te le 
presenta su una pagina web. Questo perché se lo fa Outlook è probabile che 
tu lo possa fare anche da Access, se riesci a capire come...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:elm4dq$dof$1...@tdi.cu.mi.it...

Hai parlato di frame, iframe, ma io non ne conosco la differenza. Capisco 
che per darmi i consigli giusti dovresti poter accedere al sito particolare 
e così via. In fin dei conti credo che avevo sbagliato l'oggetto e le 
domande nel messaggio originario. Vediamo se riesco a correggere il tiro.
Tramite il webbrowser riesco ad avere in N campi di testo l'indirizzo degli 
N allegati alla mail. Gli indirizzi sono del tipo url ("http://...") e, se 
lo adoperassi come indirizzo del webbrowser o di Internet Explorer, 
accederei a quella particolare pagina. Tanto per essere chiari: gli allegati 
ad una e-mail sono due immagini JPG ed un documento di tipo DOC, ebbene 
copiando il primo indirizzo in IE mi viene visualizzata la particolare 
immagine. Ma il mio scopo non è vedere quell'oggetto, ma copiarlo in locale 
in quanto lo spazio che i vari utenti hanno su Exchange comincia ad essere 
risicato: sono stati già costretti a cancellare diverse volte e qualche 
volta hanno cancellato qualcosa di importante. L'applicazione di Outlook Web 
Access non prevede la possibilità di scaricare le mail in locale, quindi ho 
già avuto un buon risultato essendo riuscito a riportare in locale la pagina 
web dell'e-mail. Ma per gli allegati come mi posso regolare ? Sarei tentato 
di dire che devono scaricarli uno ad uno usando il tasto destro del mouse... 
ma sarebbe una soluzione valida per gente "informatizzata" mentre la 
procedura che dovrei mettere in esecuzione dovrebbe essere a prova di 
"utonto" (tanto per utilizzare un termine che mi è sempre piaciuto molto).
Ecco quindi la domanda avendo corretto il tiro: quali classi e comandi si 
possono utilizzare per copiare un file del quale si ha l'indirizzo in 
formato url ?
Grazie
Antonio

 ha scritto nel messaggio 
news:457ecdcc$0$20812$5fc...@news.tiscali.it...

Non mi sembra tu abbia mai inserito il codice che utilizzi per aprire la 
pagina web nel controllo webbrowser; comunque dovresti "trovare" nella 
pagina web (documento) i link ed eseguirli (click).
Es. (codice non completo)
'-->
'--> oDocument è la pagina web visualizzata
'-->
on error goto errore
Dim oDocument As Object' IHTMLDocument
Me!WebBrowser.Navigate2 "
http://www.google.it
"
Do
    DoEvents
    If oApp.ReadyState = READYSTATE_COMPLETE Then
        Exit Do
    End If
Loop
Set oDocument = Me!WebBrowser.Document
'--> [inizio] naviga con i link
Dim oLink As Object
Set oLink = oDocument.getElementsByTagName("a")
Dim sngLink As Object
For Each sngLink In oLink
    If InStr(1, sngLink.innerText, "Gruppi") > 0 Then
        sngLink.Click '<-- click sul link
    End If
Next
Do
    DoEvents
    If Me!WebBrowser.ReadyState = READYSTATE_COMPLETE Then
        Exit Do
    End If
Loop
'<-- [fine] naviga con i link
uscita:
    Set sngLink = Nothing
    Set oLink = Nothing
    Set oDocument = Nothing
    Exit Sub
errore:
    Set sngLink = Nothing
    Set oLink = Nothing
    Set oDocument = Nothing
    MsgBox Application.AccessError(Err.Number) & ", " & Err.Number
'---
In questo esempio viene cercato un link che visualizza il testo "Gruppi" (If 
InStr(1, sngLink.innerText, "Gruppi")).
Ora, che visualizzano i link sulla tua pagina? Immagini? Testo? Hai 
possibilità di salvare la pagina HTML in un file (File - Salva con nome), 
zipparlo ed inviarmelo?
Ciao.
-- 
Sergio MAZZA 


GRANDE Sergio !!! Sapevo di poter contare su di te !!!
E' vero, non avevo mai riportato nessuna riga di codice per non appesantire 
il messaggio.
Ecco quello che ho scritto finora, tralasciando le cose che non interessano 
il webbrowser.
Più o meno in 15 giorni ho buttato giù quanto tu hai scritto in pochi minuti 
!!!
dim OggettoWebBrowser1 as SHDocVw.WebBrowser
dim OggettoWebBrowser2 as SHDocVw.WebBrowser
dim DocumentoHTML as MSHTML.HTMLDocument
dim ElementoDelDocumento as MSHTML.HTMLDocument
dim FrameDelDocumento as MSHTML.HTMLFrameElement
dim TabellaDelDocumento as MSHTML.HTMLTable
dim RigaDiTabella as MSHTML.HTMLTableRow
dim CellaDiTabella as MSHTML.HTMLTableCell
dim OggettoDelDocumento as MSHTML.ObjectElement
Private Sub Form_Load()
    set OggettoWebBrowser1 = me.WebBrowser1.object
    set OggettoWebBrowser2 = me.WebBrowser2.object
    OggettoWebBrowser1.navigate 
"https://.......
outlookwebaccessaziendale.com
"
    do while OggettoWebBrowser1.Busy or _
                OggettoWebBrowser1.readyState < 4
        DoEvents
    loop
end sub
Private Sub WebBrowser1_NewWindow2 (ppDisp as Object, Cancel as Boolean)
    set ppDisp = me.WebBrowser2.object
    me.PulsanteLetturaMail.Enabled = True
end sub
Private Sub PulsanteLetturaMail_CliCk()
    me.TestoDelMessaggio = ""
    set DocumentoHTML = me.WebBrowser2.object.Document
    set TabellaDelDocumento = DocumentoHTML.getElementById("tblHeader")
    set RigaDiTabella = TabellaDelDocumento.Rows(0)
    set CellaDiTabella = RigaDiTabella.Cells(3)
    me.TestoDelMessaggio = me.TestoDelMessaggio & "Inviato:    " & _
                CellaDiTabella.innerText & vbCrLf
    set ElementoDelDocumento = DocumentoHTML.getElementById ("_trFromText")
    me.TestoDelMessaggio = me.TestoDelMessaggio & "Da          " & _
                ElementoDelDocumento.innerText & vbCrLf
...
...
    set FrameDelDocumento = DocumentoHTML.Frames(0).Document
    me.TestoDelMessaggio = me.TestoDelMessaggio & vbCrLf & _
                FrameDelDocumento.body.innerText & vbCrLf
...
...
    set ElementoDelDocumento = DocumentoHTML.getElementById 
("idAttachmentWell")
    set OggettoDelDocumento = ElementoDelDocumento.ChildNodes(2)
ho tralasciato il controllo che ho fatto per decidere di prendere il nodo 2.
A questo punto avevo visto che OggettoDelDocumento.href contiene un 
indirizzo tipo url ("https://.....") che, copiandolo nella barra indirizzi 
di IE, mi fa vedere il documento catturato.
Non avevo visto che esiste il metodo .Click che, in pratica, fa la stessa 
cosa.
Comunque il risultato che mi prefiggo è di copiare l'allegato, non di 
aprirlo. E questo, purtroppo, non sono ancora riuscito a farlo.
Ti ringrazio tanto per la disponibilità offertami, ma in questa azienda 
considerano la posta elettronica altamente riservata... posso operare, in 
modo limitato, con le credenziali "prestatemi" da un dipendente più 
flessibile degli altri. Capirai quindi che, con dispiacere, non posso 
inviarti la copia della mail catturata.
Un'ultima cosa... c'è un motivo per cui non utilizzi le definizioni 
appropriate, privilegiando la definizione generica Object ?
Ancora un grazie grande, grande.
Saluti a tutti
Antonio

 Antonio
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Fortunatamente mi hanno dato ulteriore tempo per cercare una soluzione più 
comoda.
Forse la mia testa dura, in questo caso, è un pregio e non un difetto.
Continuerò a cercare come fare a copiare un file del quale si ha l'indirizzo 
tipo url, evitando di far partire il programma che l'ha generato: anche 
perchè non su tutti i pc sono presenti tutti i programmi, mentre il 
salvataggio sul server locale potrebbe comunque garantire una reale 
possibilità di esecuzione off-line.
Se trovo la soluzione la condividerò con voi tutti.
Saluti
Antonio


Ciao Antonio,
allora se hai gli indirizzi HTTP sei a cavallo qui trovi un po di API:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internetreadfile.asp
e qui un esempio pronto: 
http://www.mvps.org/access/resources/downloads.htm
Internet Data Transfer library


 Antonio
(oltre al suggerimento di Cinzia)
Se hai modo di "operare" sul server (o chi per te), abilita l'ftp nella 
cartella principale dove risiedono i documenti; cambiare il protocollo da 
http a ftp ed ottenere il file non c'è (o non ci dovrebbe essere) 
problema...
Ciao.
-- 
Sergio MAZZA 

Lo sapevo !!! Lo sapevo che potevo contare su voi due.
GRAZIE
Antonio