Newsgroup: it.comp.appl.access
Titolo: Il fax è stato inviato?

Uso con profitto il metodo di Sergio Mazza dal sito comune: "6.131 Inviare
da VBA uno o più file per fax usando FaxServer di
Windows XP".
Esiste (via codice) un metodo per capire se il fax è passato? Inoltre si
riesce (sempre via codice) a capire se sono stati fatti i 3 tentativi di
invio?
Grazie.
Ciao
Silvio
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Silvio
Se l'invio produce un errore (qualsiasi) viene visualizzato un msgbox; 
questo era il modo più semplice (e veloce) che avevo trovato per segnalare 
il non invio, oltre al fatto che il documento non veniva copiato nella 
cartella indicata in ArchiveDirectory.
Non vedo il motivo per sapere se in quel momento (Job) il tal documento 
(FaxOutgoingJob.JobID) che fa parte di una coda di fax sta eseguendo il 
secondo o il teerzo tentativo; quando lo sai che fai? Lo elimini dalla coda? 
Vuoi ricrearti un'applicazione che gestisce il fax e le sue code?
Oggetto FaxServer:
http://msdn2.microsoft.com/en-us/library/ms689109.aspx
Job Status:
http://msdn2.microsoft.com/en-us/library/ms693448.aspx
Reference Fax Service:
http://msdn2.microsoft.com/en-us/library/ms686982.aspx
Ciao.
-- 
Sergio MAZZA 

 Vuoi ricrearti un'applicazione che gestisce il fax e le sue code?
Grazie per la risposta.
Scusa per il mio ritardo ma...apro un piccolo [OT]: qualcuno mi suggerisce
un news server gratuito che permetta l'invio su questo gruppo? Grazie.
Ma veniamo al fax. Hai assolutamente ragione: percorrendo quella strada mi
sarei ritrovato con problemi insormontabili. Forse è meglio che ti spieghi
cosa ho bisogno di realizzare.
Compilo degli ordini che poi invio con il mio bel tasto InviaFAX che usa la
tua procedura. Siccome gli ordini sono tanti e spesso vengono "abbozzati"
per poi essere "rifiniti" e inviati, a volte non ricordo se un ordine è
stato inviato o meno. Per questo mi ritrovo spesso a sfogliare la cartella
Fax Inviati alla ricerca di un certo foglio...
Vorrei creare un campo che indichi se l'ordine è
- in preparazione
- in fase di invio
- inviato
Per fare questo, in effetti, mi basterebbe qualcosa di molto più semplice di
quanto ho chiesto. Una mia idea era quella di individuare il nome del file
tif creato dalla procedura (l'ultimo che ho è
S-1-5-21-776561741-1547161642-725345543-1003$201c4bc31d05669.tif) e legarlo
all'ordine (con un campo) per poi verificare se c'è nelle cartelle di Fax In
Uscita o Fax Inviati. Ma non so neanche come trovare questo nome. Qualche
idea?
Grazie. Ciao.
Scusate la lungaggine.


 Silvio
Io aggiungerei anche una data ad ogni stato:
- in preparazione; dataPreparazione
- in fase di invio; dataInvio
- inviato; dataInviato
Non vedo problemi; si tratta di "disegnare" il flusso del lavoro e ad ogni 
variazione di stato del documento aggiornare il campo corrispondete (es. 
[inPreparazione] e [dataPreparazione]).
Quindi:
- appena crei un ordine avrà lo stato di [inPreparazione] = -1 (true) e la 
data della creazione;
- quando decidi di inviarlo, lo cerchi, lo invii e contestualmente cambi lo 
stato di [in fase di invio] = -1 con la data;
- quando esegui il codice di invio, aggiungi la riga che cambia lo stato di 
[inviato] = -1 con la data; il punto dove inserire la riga è:
...
 Print #1, "Fax: " & oDoc.Name & ", JobId: " & JobId & "...Inviato."
--> aggiorno [inviato] = -1 e la sua data
...
E comunque se hai lasciato la creazione del file di log:
'--> creo il file di log
Dim nomeFileLog As String
nomeFileLog = "C:\liste\logFaxInvio_" & Format(Date, "ddmmyyyy") & ".txt"
Open nomeFileLog For Output As #1
...
trovi tutto (o quasi) lì dentro...
Ciao.
-- 
Sergio MAZZA 


Grazie.
Ottima l'idea di memorizzare le date di invio etc...
Il problema è che se il fax ricevente è occupato (per tre tentativi), se ho
sbagliato ad inserire il numero etc...la tua procedura non mi da
(giustamente) nessun errore. Al limite ricevo una segnalazione di NON invio
dal servizio fax di Windows. Segnalazione che non riesco a gestire da
Access.
Se riuscissi a trovare il nome del file TIF, risolverei tutte queste
problematiche: se il file TIF è nella cartella dei fax inviati, il fax è
andato a buon fine.
Ho smanettato sulla tua procedura qualche anno fa e, a memoria, non mi pare
che nel file di log si registrasse il nome del file TIF (o sbaglio?).
In pratica, per dirlo in parole povere, vorrei gestire il fax DOPO che è
uscito da Access.
Forse mi sto creando più problemi del necessario?
Grazie ancora.
Ciao


 Silvio
Ciao.
-- 
Sergio MAZZA 

 Nell'esempio non c'è un file tif perché si trattava di inviare file word,
ma sostanzialmente è la stessa cosa.
Ma, attenzione: io parlo del file .TIF che crea il servizio fax di Windows e
che si trova inizialmente nella cartella "Fax in Uscita" e poi viene
spostato nella "Fax Inviati". E' una immagine raster della pagina e viene
creata da qualsiasi fonte parta il fax (anche da Word). Sto cercando il modo
di individuare da codice il nome del file .TIF creato durante l'invio del
fax da Access.
Grazie.


 Grazie.



Niente da fare, ho provato e riprovato ma non riesco a usarlo (forse devo
registrare qualcos'altro nei riferimenti, boh...).
Grazie per tutta la conversazione.


 Silvio
L'esempio in VB non era chiaro?
http://msdn2.microsoft.com/en-us/library/ms693393.aspx
Ciao.
-- 
Sergio MAZZA 


Chiarissimo ma mi da errore di compilazione sulla prima riga:
Dim objFaxServer As New FAXCOMEXLib.FaxServer
Nei riferimenti ho regolarmente registrato le solite:
- Faxcom 1.0 Type Library
- Microsoft Scripting Runtime
tanto è vero che invio (molti) fax con la tua procedura usando
Dim oFax As FaxServer, oFaxDoc As FaxDoc, JobId As Variant
'--> creazione oggetti
Set oFax = CreateObject("FaxServer.FaxServer")
'--> creazione documento fax
Set oFaxDoc = oFax.CreateDocument(strPathAndFileName)
...etc
Cosa manca???
Grazie per la pazienza.


 Silvio
L'oggetto FaxServer già l'hai creato con:
Set oFax = CreateObject("FaxServer.FaxServer")
Quello che manca, nel mio esempio, è la gestine delle code in uscita 
(FaxOutgoingQueue) e il documenti contenuti (FaxOutgoingJob).
Quindi:
...
Dim objFaxOutgoingQueue As FaxOutgoingQueue
Dim objFaxOutgoingJob As FaxOutgoingJob
'Get the outgoing queue object
Set objFaxOutgoingQueue = oFax.Folders.OutgoingQueue
'Refresh the queue object
objFaxOutgoingQueue.Refresh
MsgBox "There are  " & objFaxOutgoingQueue.GetJobs.Count & " faxes in the 
outgoing queue" '<-- giusto per vedere se funziona
'Get the job based on the item number
Set objFaxOutgoingJob = objFaxOutgoingQueue.GetJobs.Item(n)
...
da qui puoi continuare con il codice dell'esempio su MSDN e/o integrarlo tu.
Occhio sempre ad eliminare gli oggetti creati (Set obj... = Nothing), sia al 
termine della routine che nella gestione degli errori...
Ciao.
-- 
Sergio MAZZA 

 Dim objFaxOutgoingJob As FaxOutgoingJob
Niente da fare!!! Mi da errore di compilazione già su queste prime righe
anche se inserite dopo il:
Set oFax = CreateObject("FaxServer.FaxServer")
Errore: "Tipo definito dell'utente non definito"
Grazie.


 Silvio
Se hai inserito i riferimenti alla libreria: Microsoft Fax Service Extended 
COM Type Library
non dovresti trovare problemi.
Prova a inviare il codice...
Ciao.
-- 
Sergio MAZZA 

Insomma se c'e' difficolta' col fax usate la posta celere o i segnali di 
fumo! ;<)
-- 
ac
y-1=x

 COM Type Library...
Acc... non sapevo servisse anche questa. Pensavo bastassero le due:
- Faxcom 1.0 Type Library
- Microsoft Scripting Runtime
Curiosità: ma come si fa a capire che dll ci vogliono dai siti msdn?
In ogni caso, compila correttamente ma si blocca sul
'Get the outgoing queue object
Set objFaxOutgoingQueue = oFax.Folders.OutgoingQueue
Ti incollo l'intero codice (ancora da sistemare):
 '--> dichiarazione oggetti
Dim oFax As FaxServer, oFaxDoc As FaxDoc, JobId As Variant
'--> creazione oggetti
Set oFax = CreateObject("FaxServer.FaxServer")
'--> creazione documento fax
Set oFaxDoc = oFax.CreateDocument(strPathAndFileName)
'--> inizio impostazione server fax
    With oFax
        .Connect "" '<-- creo una connessione (al pc), se stringa nulla é il pc
locale
        .ArchiveDirectory = "C:\camet\Fax inviati" '<-- directory dove posizionare i
fax inviati
        .ArchiveOutboundFaxes = 1 '<-- salvataggio di una copia del fax nella
cartella
        .Branding = 1 '<-- scrivi intestazione del fax nel documento
        .DirtyDays = 5 '<-- giorni per ritentare l'invio se non riuscito
        .Retries = 1 '<-- numero ore per ritentare l'invio (del fax) non riuscito
        .RetryDelay = 5 '<-- numero minuti per ritentare l'invio (del fax) non
riuscito
        .ServerCoverpage = 0 '<-- non invio la pagina di informazioni
        .UseDeviceTsid = 1 '<-- invio l'identificativo del fax che trasmette
     End With
 
      With oFaxDoc
             .FaxNumber = NumeroDiFAX '<-- numero del fax
             .RecipientName = NomeDestinatario '<-- Inserisce il nome del destinatario
              On Error Resume Next '<-- verifica errore invio fax
               JobId = .Send '<-- invio fax
              If Err.Number <> 0 Then '<-- se si é verificato un errore
                      MsgBox "Errore: " & Application.AccessError(Err.Number) &_
                       " su invio fax: " & strPathAndFileName & ", JobId: " & JobId
               End If
 
      End With
'--> fine impostazione documento fax
       On Error GoTo 0 '<-- ripristino la gestione degli errori
 
 
'QUI COMINCIA L'ELABORAZIONE DELLA CODA DI FAX
 
Dim objFaxOutgoingQueue As FaxOutgoingQueue
Dim objFaxOutgoingJob As FaxOutgoingJob
'Get the outgoing queue object
Set objFaxOutgoingQueue = oFax.Folders.OutgoingQueue '<---da Errore perché
non
                                                                                                          'riconosce il sottoinsieme Folders
'Refresh the queue object
objFaxOutgoingQueue.Refresh
MsgBox "There are " & objFaxOutgoingQueue.GetJobs.Count & " faxes in the
outgoing queue" '<-- giusto per vedere se funziona
'Get the job based on the item number
Set objFaxOutgoingJob = objFaxOutgoingQueue.GetJobs.Item(0)
'distruggo i due nuovi oggetti
Set objFaxOutgoingJob = Nothing
Set objFaxOutgoingQueue = Nothing
'--> fine creazione documento fax
Set oFaxDoc = Nothing
oFax.Disconnect '<-- disconnetto il server fax
'--> distruggo gli oggetti
Set oFax = Nothing


 fumo! ;<)
...in effetti.... mi sono infilato in un vicolo (per me) cieco...


 y-1=x
Ciao.
-- 
Sergio MAZZA 

 Curiosità: ma come si fa a capire che dll ci vogliono dai siti msdn?
Su MSDN non credo ci sia questa informazione.
Io la trovo cercando nelle librerie in elenco nei riferimenti, o negli 
esempi di codice.

Manca la gestione degli errori con la distruzione di tutti gli oggetti.
(Curiosità) Ma hai installato il fax? Ti dovrebbe creare le directory dove 
archiviare i fax in ingresso e inviati; a quel punto fai riferimento a 
quelle cartelle:
http://msdn2.microsoft.com/en-us/library/aa358961.aspx
Documentazione:
Fax Service Extended COM Reference
http://msdn2.microsoft.com/en-us/library/ms686957.aspx
Fax Service Extended COM Samples
http://msdn2.microsoft.com/en-us/library/ms684503.aspx
Visual Basic Fax Administration Scenarios
http://msdn2.microsoft.com/en-us/library/ms693466.aspx
Ciao.
-- 
Sergio MAZZA 

 
http://msdn2.microsoft.com/en-us/library/ms693466.aspx
Ho notato che molte di queste pagine fanno riferimento a Windows Vista. Non
sarà mica questo il problema? Io uso XP professional con AccessXP.
Mah, riprendo a studiare queste pagine ma se vado avanti così, lascio
perdere tutto.
Grazie davvero di tutto.
Ciao
Silvio


 Grazie davvero di tutto.
E di che?!
