General |
6.111 Inviare da VBA per FAX una copertina e/o un file usando SDK di WinFax PRO 10.0 di Symantec |
Roberto |
Nella funzione WinFaxSDK contenuta nel modulo Funzione WinFax SDK del database di esempio allegato si opera facendo riferimento a SDK (Software Development Kit) le cui funzioni, oggetti e metodi vengono installati automaticamente durante l’installazione di WinFax PRO 10.0 della Symantec. Per usare la suddetta funzione è necessario aggiungere al database il riferimento WinFax Automation Server. La funzione WinFaxSDK permette di inviare per fax una copertina e/o un file scelti dall’utilizzatore. Il file, prima di essere inviato viene convertito in un file di tipo WinFax. La funzione inoltre permette: 1) Di impostare il nome ed il numero di fax del destinatario. 2) Di impostare il nome dell’azienda del destinatario. 3) Di impostare il path completo del file da inviare per fax. 4) Di impostare il testo della copertina. 5) Di impostare il tipo di copertina da usare: si può usare quella di default od indicare il path di una delle copertine contenute nel database copertine di WinFax il cui elenco nel database di esempio è ottenuto tramite la funzione ElencoCopertine. 6) Di impostare l’oggetto del fax. 7) Di impostare la data e l’orario di invio del fax se diversi da quelli correnti (invio differito). 8) Di decidere la risoluzione del fax. 9) Di decidere la priorità del fax. 10) Di decidere se visualizzare o meno la finestra di dialogo invio fax. 11) Di decidere se visualizzare o meno la finestra di progressione di invio fax. 12) Di decidere se mettere o meno in hold (alias sospendere) l’output di WinFax. 13) Di decidere se cancellare o meno le pagine fax dopo che sono state regolarmente inviate. Durante l’esecuzione della funzione occorre che il Controller di WinFax sia aperto. Se viene trovato chiuso, la funzione chiede di aprirlo ed eventualmente propone che l’apertura del Controller sia effettuato dalla funzione stessa. La funzione WinFaxSDK è stata sviluppata e testata con Access 97 in ambiente Windows ME; si presuppone però che funzioni anche con versioni successive di Access e in ambienti operativi diversi da Windows ME. Quando viene aperto per la prima volta il database di esempio allegato, poiché la tabella rubrica telefonica è vuota, il programma chiede di inserire nella rubrica almeno un nominativo con il suo relativo numero di fax. La funzione WinFaxSDK restituisce il valore True se la copertina e/o il file sono stati ceduti correttamente al controller di WinFax, mentre restituisce il valore False in caso contrario. Il richiamo della funzione andrà effettuato nel modo seguente: Dim varInvio As Boolean varInvio = WinFaxSDK(NumeroFAX, NomeFAX, SocietàFAX, DataFAX, OrarioFAX, _ TestoCopertina, CopertinaFAX, OggettoFAX, Risoluzione , Priorità, _ FinestraDialogo, FinestraProgressione, Sospendi, FileAllegato, CancellaPagine) If varInvio = True Then MsgBox "Fax ceduto correttamente al Controller di WinFax" Else EsitoInvio = "Invio FAX fallito" End IfDove: 1) NumeroFax è una variabile stringa che contiene il numero di FAX del destinatario; se NumeroFAX è Null o ha lunghezza zero, verrà chiesto di digitare un numero di FAX in una finestra di dialogo. 2) NomeFAX è una variabile stringa che contiene il nome del destinatario del FAX; può anche assumere il valore Null o la lunghezza zero. 3) SocietàFAX è una variabile stringa che contiene il nome della società del destinatario del FAX; può anche assumere il valore null o avere lunghezza zero 4) DataFAX è una variabile stringa che contiene la data di invio FAX nella forma anglosassone mm/gg/aa ; se ha un valore Null o ha lunghezza zero, il FAX verrà trasmesso nella data odierna 5) OrarioFAX è una variabile stringa che contiene l'orario in cui inviare il FAX nella forma HH:nn:ss ; se ha un valore Null o ha lunghezza zero, il fax verrà inviato all'ora corrente. 6) TestoCopertina è una variabile stringa che contiene il testo del messaggio da scrivere nella copertina; può anche assumere il valore Null o avere lunghezza zero, nel qual caso la copertina non viene inviata. 7) CopertinaFAX è una variabile stringa che contiene il path completo del file .CVP che contiene la copertina da usare; può anche assumere il valore Null o avere lunghezza zero, nel qual caso viene usata la copertina di default. 8) OggettoFAX è una variabile stringa che contiene l'oggetto del FAX; può anche assumere il valore Null o avere lunghezza zero 9) Risoluzione è una variabile numerica intera che contiene il valore 1 se Alta risoluzione, 0 se Bassa risoluzione. Se il valore numerico è diverso da 0 e da 1 verrà usata la risoluzione di default. 10) Priorità è una variabile numerica intera che contiene il valore 1 se Alta, 2 se Normale e 3 se Bassa. Se il valore numerico è diverso da 1, 2 o 3 verrà usata la priorità di default. 11) FinestraDialogo è una variabile numerica intera che contiene il valore 1 se va visualizzata oppure 0 se non va visualizzata la finestra di dialogo prima dell’invio del FAX; se il valore numerico è diverso da questi due valori, si terrà conto delle impostazioni di default. 12) FinestraProgressione è una variabile numerica intera che contiene il valore 1 se va visualizzata oppure 0 se non va visualizzata la finestra di progressione durante l’invio del FAX; se il valore numerico è diverso da questi due valori, si terrà conto delle impostazioni di default. 13) Sospendi è una variabile numerica intera: se ha il valore 1 l'output del fax sarà sospeso, se ha il valore 0 l'output del fax NON sarà sospeso, se assume altri valori si terrà conto delle impostazioni di default. 14) FileAllegato è una variabile stringa che contiene il path completo del file che va inviato per fax dopo essere stato debitamente convertito in file di tipo WinFax. Può assumere anche il valore Null o avere lunghezza zero nel caso in cui si voglia inviare solo la copertina. 15) CancellaPagine è una variabile numerica intera che può assumere il valore 1 se tutte le pagine fax debbono essere cancellate dopo che è stato effettuato il loro regolare invio, oppure il valore 0 in caso contrario. Qualsiasi altro valore numerico contenga fa sì che si tenga conto delle impostazioni di default. Nel caso in cui non sia possibile aprire il database di esempio allegato, diamo qui di seguito il listato del codice VBA della funzione di cui sopra. Declare Function FindWindow& Lib "user32" Alias "FindWindowA" _ (ByVal IpClassName As String, ByVal IpWindowName As String) '************************************************************************** '* '* Questa funzione serve ad inviare per FAX una copertina fax e/o un file facendo uso '* dell' Application Software Development Kit (SDK) di WinFax PRO 10.0 della Symantec '* '* Autore: Roberto '* Data: Marzo 2003 '* '* Affinchè questa funzione non segnali errore, occorre aggiungere '* al database il riferimento a WinFax Automation Server '* '* Per migliorare la performance della funzione, prima dell'esecuzione, attivare il '* Controller di WinFax PRO che altrimenti verrà aperto dalla funzione stessa. '* '**************************************************************************** Public Function WinFaxSDK(NumeroFAX As Variant, NomeDestinatario As Variant, _ SocietàDestinatario As Variant, DataInvio As Variant, OraInvio As Variant, _ TestoCopertina As Variant, FileCopertina As Variant, Oggetto As Variant, _ Risoluzione As Integer, Priorità As Integer, SendDialog As Integer, _ CallProgress As Integer, InHold As Integer, Allegato As Variant, _ CancellaPagine As Integer) As Boolean 'NumeroFAX Variabile Stringa che contiene il numero di FAX; se NumeroFAX è Null o ' ha lunghezza zero, verrà chiesto di digitare un numero di FAX in una ' finestra di dialogo 'NomeDestinatario Variabile Stringa che contiene il nome del destinatario del FAX; può ' anche assumere il valore Null o la lunghezza zero 'SocietàDestinatario Variabile Stringa che contiene il nome della società del destinatario ' può anche assumere il valore null o avere lunghezza zero 'DataInvio Variabile Stringa che contiene la data di invio FAX nella forma mm/gg/aa ; ' se ha un valore Null o ha lunghezza zero, il FAX verrà trasmesso nella data odierna 'OrarioInvio Variabile Stringa che contiene l'orario in cui inviare il FAX nella forma HH:nn:ss ; ' se ha un valore Null o ha lunghezza zero, il fax verrà inviato all'ora corrente. 'TestoCopertina Variabile Striga che contiene il testo del messaggio da scrivere nella copertina; ' può anche assumere il valore Null o avere lunghezza zero 'FileCopertina Variabile Stringa che contiene il path completo del file .CVP che contiene ' la copertina da usare; può anche assumere il valore Null o avere lunghezza zero 'Oggetto Variabile Stringa che contiene l'oggetto del FAX; ' può anche assumere il valore Null o avere lunghezza zero 'Risoluzione Variabile Intera che contiene il valore 1 se Alta risoluzione, 0 se Bassa risoluzione ' Se il valore numerico è diverso da 0 e da 1 verà usata la risoluzione di default 'Priorità Variabile Intera che contiene il valore 1 se Alta, 2 se Normale e 3 se Bassa ' Se il valore numerico è diverso da 1, 2 o 3 verrà usata la priorità di default 'SendDialog Variabile Intera che contiene il valore 1 se va visualizzata oppure 0 se non va ' visualizzata la finestra di dialogo; se il valore numerico è diverso da questi due ' valori, si terrà conto dellle impostazioni di default 'CallProgress Variabile Intera che contiene il valore 1 se va visualizzata oppure 0 se non va ' visualizzata la finestra di progressione dell'invio; se il valore numerico è ' diverso da questi due valori, si terrà conto dellle impostazioni di default 'InHold Variabile Intera: se ha il valore 1 l'output del fax sarà sospeso, se ha il valore 0 ' l'output del fax NON sarà sospeso, se assume altri valori si terrà conto delle ' impostazioni di default 'Allegato Variabile Stringa che contiene il path completo del file che va inviato per fax ' dopo essere stato convertito in file di tipo WinFax. ' Può assumere anche il valore Null o avere lunghezza zero 'CancellaPagine Variabile Intera che può assumere il valore 1 se tutte le pagine fax debbono ' essere cancellate dopo che è stato effettuato il loro regolare invio, oppure il ' valore 0 in caso contrario. Qualsiasi altro valore numerico contenga fa sì che si ' tenga conto delle impostazioni di default Dim objWinfaxSend As Object ' dichiara la variabile oggetto per l'invio fax Dim lngChannelNumber As Long Dim Esito As Integer ' variabile per l'esito invio fax Dim Comodo As Variant ' variabile di comodo per la funzione Shell Dim MioNumeroFAX As Variant ' Numero di telefono cui inviare il fax ' Attiva la routine per il trattamento personalizzato degli errori On Error GoTo WinFaxSDK_Error ' Verifica se il Controller di WinFax è attiva If FindWindow("Cfaxmng", vbNullString) <= 0 Then ' Se Il Controller di WinFax non è attivo, danne notizia all'operatore MsgBox "Il Controller di WinFax non è attivo", vbCritical + vbOKOnly, "Messaggio WinFax" Dim pageObj As Object Dim pagesObj As Object Dim MioIndirizzo As String Dim PrimaCopertina Set pagesObj = CreateObject("WinFax.CoverPages") Set pageObj = pagesObj.Item(1) PrimaCopertina = pageObj.GetFilename Set pageObj = Nothing Set pagesObj = Nothing If Nz(PrimaCopertina, "") <> "" Then MioIndirizzo = Left(PrimaCopertina, Len(PrimaCopertina) - Len(Dir(PrimaCopertina)) - 10) & "FAXMNG32.EXE" Else MioIndirizzo = "C:\Programmi\WinFax\FAXMNG32.EXE" End If If Dir(MioIndirizzo) = "" Then ' Se il Controller NON è contenuto nella directory C:\Programmi\WinFax ' richiedi che il Controller venga attivato manualmente ... MsgBox "Attiva manualmente il Controller di WinFax", _ vbExclamation + vbOKOnly, "Messaggio WinFax" Else If MsgBox("Vuoi che lo attivo io automaticamente?", vbQuestion + vbYesNo, _ "Controller WinFax non Attivo") = vbYes Then ' Se il Controller è contenuto nella directory C:\Programmi\WinFax ' e l'operatore lo ritiene opportuno, attivalo Comodo = Shell(MioIndirizzo, vbMinimizedNoFocus) ' Dai notizia all'operatore dell'avvenuta attivazione del Controller di WinFax MsgBox "Dopo che il Controller è attivo pigia OK", vbInformation + vbOKOnly, "Messaggio WinFax" ' Continua l'invio del FAX GoTo Riprova End If End If ' ... imposta l'esito di invio a negativo... WinFaxSDK = False ' ... ed esci dalla funzione GoTo WinFaxSDK_Exit End If Riprova: ' crea l'oggetto WinFax Set objWinfaxSend = CreateObject("WinFax.SDKSend8.0") ' Resetta tutte le impostazioni specifiche di non-recipiente, ' impostandole al loro valore di default objWinfaxSend.ResetGeneralSettings MioNumeroFAX = NumeroFAX If Nz(NumeroFAX, "") = "" And Nz(NomeDestinatario, "") = "" Then ' se il numero di fax ed il nome del destinatario ' non sono significativi fai digitare un numero di fax MioNumeroFAX = InputBox("Digita un numero di FAX!", "Destinatario sconosciuto") If MioNumeroFAX = "" Then ' se non è stato digitato un numero di fax, danne notizia e ... MsgBox "Non hai digitato un numero di FAX!" _ & Chr$(10) & Chr$(13) & "Questo FAX non sarà inviato!", _ vbCritical + vbOKOnly, "Destinatario sconosciuto" ' ... imposta l'esito di invio a negativo ... WinFaxSDK = False ' ... ed esci dalla funzione Exit Function End If Else If Nz(NumeroFAX, "") = "" Then ' Se il numero di fax non è significativo ' fai digitare un numero di fax MioNumeroFAX = InputBox("Digita il numero di FAX" & Chr$(10) & _ Chr$(13) & "di " & NomeDestinatario, "Numero di FAX sconosciuto") If MioNumeroFAX = "" Then ' Se non non è stato digitato un numero di fax, danne notizia e ... MsgBox "Non hai digitato un numero di FAX!" _ & Chr$(10) & Chr$(13) & "Questo FAX non sarà inviato!", _ vbCritical + vbOKOnly, "Numero di FAX sconosciuto" ' ... imposta l'esito di invio a negativo ... WinFaxSDK = False ' ... ed esci dalla funzione Exit Function End If End If End If 'Imposta il numero di fax objWinfaxSend.SetNumber (MioNumeroFAX) If Nz(NomeDestinatario, "") <> "" Then ' se è significativo, imposta il nome del destinatario objWinfaxSend.SetTo (NomeDestinatario) End If If Nz(SocietàDestinatario) <> "" Then ' se è significativa, imposta la società del destinatario objWinfaxSend.SetCompany (SocietàDestinatario) End If If Nz(DataInvio, "") <> "" Then ' se è significativa, imposta la data di invio fax ' Se non si imposta questo parametro, WinFax usa la data odierna objWinfaxSend.SetDate (DataInvio) End If If Nz(OraInvio, "") <> "" Then ' se è significativo, imposta l'orario di invio fax. ' Se non si imposta tale parametro, WinFax usa l'orario corrente objWinfaxSend.SetTime (OraInvio) End If If Nz(TestoCopertina, "") <> "" Then ' se è significativo, imposta il testo della copertina fax objWinfaxSend.SetCoverText (TestoCopertina) End If If Nz(FileCopertina, "") <> "" Then ' se è significativo, imposta il nome del file che contiene la copertina del fax. ' Se non viene impostato tale parametro, WinFax usa la copertina di default objWinfaxSend.SetCoverFile (FileCopertina) End If If Nz(TestoCopertina, "") <> "" Then ' Se il testo della copertina è significatico ' imposta a SI l'uso della copertine del fax objWinfaxSend.SetUseCover (1) Else ' Se il testo della copertina non è significatico ' imposta a NO l'uso della copertine del fax objWinfaxSend.SetUseCover (0) End If If Nz(Oggetto, "") <> "" Then ' se è significativo, imposta l'oggetto della copertina fax objWinfaxSend.SetSubject (Oggetto) End If If Risoluzione = 0 Or Risoluzione = 1 Then ' se la risoluzione è bassa (=0) o alta (=1) ' imposta la risoluzione del fax che sta per essere inviato. ' Se il parametro non è impostato WinFax usa la risoluzione di default objWinfaxSend.SetResolution (Risoluzione) End If If Priorità >= 1 And Priorità <= 3 Then ' Se la priorità è Alta (=1), Normale (=2) oppure Bassa (=3) ' imposta la priorità del fax che sta per essere inviato. ' Se il parametro non è impostato WinFax usa la priorità di default objWinfaxSend.SetPriority (Priorità) End If If SendDialog = 0 Or SendDialog = 1 Then ' Se la visualizzazione della finestra di dialogo è = 1 (SI) oppure = 0 (NO) ' imposta la visualizzazione della finestra di dialogo. ' Se il parametro non è impostato WinFax usa l'impostazione di default objWinfaxSend.ShowSendScreen (SendDialog) End If If CallProgress = 0 Or CallProgress = 1 Then ' Se la visualizzazione della finistra di progressione è = 1 (SI) oppure = 0 (NO), ' imposta la visualizzazione della finestra di progressione. ' Se il parametro non è impostato WinFax usa l'impostazione di default objWinfaxSend.ShowCallProgress (CallProgress) End If If InHold = 0 Or InHold = 1 Then ' Se InHold contiene il valore 1, l'otput è messo in hold. ' Se InHold contiene il valore 0, l'otput NON è messo in hold ' Se il parametro non è impostato, valgono le impostazioni di default objWinfaxSend.SetHold (InHold) End If If Nz(Allegato, "") <> "" Then ' se è significativo, imposta il path completo del file ' che contiene la copertina fax che si vuole usare objWinfaxSend.AddAttachmentFile (Allegato) End If If CancellaPagine = 1 Then ' Dà istruzione a WinFax di cancellare tutte le pagine ' dopo che sono state inviate con successo objWinfaxSend.SetDeleteAfterSend (1) Else If CancellaPagine = 0 Then ' Dà istruzione a WinFax di NON cancellare tutte le ' pagine anche dopo che sono state inviate con successo objWinfaxSend.SetDeleteAfterSend (0) End If End If ' aggiungi un recipiente al Send Job objWinfaxSend.AddRecipient ' Dà istruzioni a WinFax di iniziare il processo di invio Esito = objWinfaxSend.Send(0) If Esito = 1 Then ' Se il processo di invio ha dato errore... WinFaxSDK = False Else ' Se il processo di invio NON ha dato errore... WinFaxSDK = True End If ' Chiudi l'oggetto WinFax Set objWinfaxSend = Nothing WinFaxSDK_Exit: Exit Function '************************************** '* ROUTINE DI GESTIONE DEGLI ERRORI '************************************** WinFaxSDK_Error: ' visualizza il numero e la descrizione degli altri errori MsgBox Err.Number & " " & Err.Description ' imposta l'esito di invio a negativo... WinFaxSDK = False ' ... ed esci dalla funzione GoTo WinFaxSDK_Exit End Function Download: |