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 If
Dove:

 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:
 
  Invio file X FAX.zip (108Kb) MSAccess97 database


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.