Esempio d'impiego
dell'ActiveX BSIEIMEX.DLL
Questa DLL rappresenta il motore del processo di
importazione/esportazione. è possibile utilizzarla ovunque necessiti
leggere o scrivere dati da e verso Business. In questa sezione viene
descritta l'interfaccia della DLL allo scopo di conoscere proprietà,
metodi ed eventi che essa rende disponibili.
Proprietà
db: è una proprietà aggetto di tipo DAO.Database che referenzia
il database correntemente aperto dell'azienda. Questa proprietà va sempre
impostata.
cn: è una proprietà aggetto di tipo DAO.Connection che
referenzia la connessione correntemente aperta al database azienda. Questa
proprietà deve essere impostata solo quando il database è diverso da
Microsoft Jet.
dbAP: è una proprietà aggetto di tipo DAO.Database che
referenzia il database procedura aperto Questa proprietà va sempre
impostata.
cnAP: è una proprietà aggetto di tipo DAO.Connection che
referenzia la connessione correntemente aperta al database procedura.
Questa proprietà deve essere impostata solo quando il database è diverso
da Microsoft Jet.
dbCmb: è una proprietà aggetto di tipo DAO.Database che
referenzia il database COMBO aperto Questa proprietà va sempre
impostata.
wsJet: è una proprietà aggetto di tipo DAO.Workspace che
referenzia l'area di lavoro per i database JET. Questa proprietà va sempre
impostata.
wsODBC: è una proprietà aggetto di tipo DAO.Workspace che
referenzia l'area di lavoro per le connessioni a database esterni. Questa
proprietà va sempre impostata.
Std: è una proprietà oggetto che referenzia l'oggetto Business
contenete tutte le più comuni proprietà e metodi utilizzati dal programma.
Va sempre impostata.
HandleWindowOwner: è una proprietà di tipo Long che va impostata
con l'handle della finestra padre, la finestra principale chiamate
l'oggetto BSIEIMEX.
Metodi
Init: metodo da chiamare dopo aver creato l'oggetto per
impostare tutte le variabili globali comuni, non dipendenti dall'azienda
caricata;
InitExt: metodo da chiamare dopo aver creato l'oggetto per
impostare tutte le variabili globali comuni, dipendenti dall'azienda
correntemente aperta;
Initialize: è un metodo da chiamare obbligatoriamente prima di
eseguire il processo di Import/Export. Non richiede nessun parametro.
AddCode: è un metodo mediante il quale e possibile aggiungere
variabili non oggetto allo Script Engine; accetta come parametro una
stringa che rappresenta la porzione di codice da aggiungere;
AddObject: è un metodo mediante il quale e possibile aggiungere
variabili oggetto allo Script Engine; accetta come parametro la stringa
'Name' che rappresenta il nome col quale l'oggetto aggiunto viene
identificato all'interno dello Script Engine, nel parametro 'Object', di
tipo Object, va indicato il riferimento alla variabile oggetto; il
parametro opzionale 'AddMembers', di tipo Boolean, indica se aggiungere o
meno tutti gli oggetti sottostanti di cui è costituito quello
aggiunto;
Esegui: è il metodo mediante il quale si lancia il processo; è
obbligatorio indicare i seguenti parametri:
- lProfilo: è una argomento numerico (di tipo Long) che indica
il codice del profilo da lanciare;
- strTabellaIN: è una stringa dove si specifica il nome della
tabella di origine, che è quella di Business nel caso di esportazione,
quella esterna nel caso di importazione;
- strTabellaOU: è una stringa dove si specifica il nome della
tabella di destinazione, che è quella di Business nel caso di
importazione, quella esterna nel caso di esportazione;
- strWorkPath: è una stringa che identifica la directory dove
sono contenuti i file da importare o che conterrà i file da esportare;
- strWhere: è un argomento opzionale che può contenere la
stringa di selezione dei dati (WHERE) da considerare della tabella di
origine;
Qualora non sia presente una 'Corrispondenza tabelle' che definisce
profilo, tabella origine e tabella destinazione indicati, si verificherà
un errore.
PausaImex: è il metodo mediante il quale è possibile mettere in
pausa un processo in esecuzione.
StopImex: è il metodo mediante il quale è possibile terminare un
processo che è in uno stato di pausa o in esecuzione.
Eventi
NotifyBreak: il programma lancia questo evento quando, in
seguito alla esecuzione del metodo PausaImex, è disponibile ad
essere posto in uno stato di pausa; può essere o meno intercettato;
NotifyMessageBar: il programma lancia questo evento quando
dispone di un messaggio da inserire in una eventuale status bar che
possiede il programma chiamante, il messaggio viene passato tramite
l'argometo 'Messaggio'; può essere o meno intercettato;
NotifyError: il programma lancia questo evento quando deve
segnalare al chiamante che si è verificato un errore o un situazione
anomala; questo evento passa i seguenti parametri:
- TipoErrore: contiene un valore che identifica il tipo di
messaggio notificato: bsIeErrorExit: questo è un errore grave che
fa terminare il processo in esecuzione; bsIeErrorMsgBox questo è
un messaggio di errore, che è possibile visualizzare in una MsgBox, che
non interrompe il programma; bsIeErrorLog: è un messaggio
destinato al Log.
- NumeroErrore: è il numero dell'errore, se esiste,
oppure è zero quando il messaggio non è stato originato da un errore.
- Contesto: è una stringa che descrive il nome della routine
dove si è verificato l'errore o l'evento segnalato.
- Messaggio: è una stringa che contiene il testo che descrive
l'errore o l'evento segnalato.
NotifyJob: il programma lancia questo evento tante volte quanto
sono i record che tratta; può essere utilizzato per implementare barre di
progressione o altri controlli che visualizzo lo stato di avanzamento del
processo in corso; questo evento passa i seguenti parametri:
- NumeroRelazione: è un valore numerico che indica il livello
di relazione a cui questo evento si riferisce.
- TabellaOrigine: è una stringa che contiene il nome
della tabella di origine a cui si riferisce questo evento.
- TotaleRighe: è una valore numerico che specifica il numero di
righe totali che il processo dovrebbe prendere in esame.
- RigaCorrente: è un valore numerico che specifica la riga
corrente trattata.
- RigheInserite: è un valore numerico che specifica il numero
di righe inserite fino a questo momento.
- RigheAggiornate: è un valore numerico che specifica il numero
di righe aggiornate fino a questo momento.
- RigheSaltate: è un valore numerico che specifica il numero di
righe che sono state scartate perche già presenti sulla destinazione e
non si è stata richiesta una operazione di aggiornamento.
- RigheErrate:. è un valore numerico che specifica il numero di
righe che non sono state inserite perche si sono verificati errori.
NotifyInput: il programma lancia questo evento quanto necessita
l'intervento utente durante il processo di importazione o esportazione;
questo evento passa i seguenti parametri:
- TipoInput: contiene un valore che identifica il tipo di
richiesta da fare all'utente: bsIeInputValue: è richiesto che
l'utente digiti un valore, mediante una InputBox ad esempio, valore che
dovrà essere ritornato nel parametro Risposta;
bsIeInputOKCancel è richiesto che venga visualizzata una MsgBox
dove è possibile premere il pulsante OK o Annulla;
bsIeInputAbortRetryIgnore: è richiesto che venga visualizzata una
MsgBox dove è possibile premere il pulsante Termina, Riprova o Annulla;
bsIeInputRetryCancel; è richiesto che venga visualizzata una
MsgBox dove è possibile premere il pulsante Riprova o Annulla;
bsIeInputYesNo: è richiesto che venga visualizzata una MsgBox
dove è possibile premere il pulsante Sì o No; bsIeInputYesNoCancel:
è richiesto che venga visualizzata una MsgBox dove è possibile
premere il pulsante Sì, No o Annulla.
- CaptionInput: contiene una stringa da utilizzare come caption
della MsgBox o InputBox di richiesta.
- Messaggio: contiene una stringa dove è indicato il messaggio
per l'utente.
- Risposta: è un parametro, passato per riferimento, che
contiene la risposta ottenuta dall'utente.
NotifyFinish: il programma lancia questo evento al termine del
processo per notificare il risultato finale; questo evento passa i
seguenti parametri:
- NumeroRelazione: è un valore numerico che indica il livello
di relazione a cui questo evento si riferisce.
- TabellaOrigine: è una stringa che contiene il nome
della tabella di origine a cui si riferisce questo evento.
- RigheDaElaborare: è una valore numerico che specifica il
numero di righe totali che il processo doveva prendere in esame.
- RigheElaborate: è un valore numerico che specifica il numero
totale di righe trattate.
- RigheInserite: è un valore numerico che specifica il numero
di righe inserite totali.
- RigheAggiornate: è un valore numerico che specifica il numero
di righe aggiornate totali.
- RigheSaltate: è un valore numerico che specifica il numero di
righe totale che sono state scartate perché già presenti sulla
destinazione e non si è stata richiesta una operazione di aggiornamento.
- RigheErrate:. è un valore numerico che specifica il numero di
righe totali che non sono state inserite perché si sono verificati
errori.
Esempio di codice 'Variabile oggetto IMEX
Dim WithEvents objImex As BSIEIMEX.CLSIEIMEX
Dim bBreak As Boolean
'Avvia il processo
Sub StartImex()
Dim bOK As Boolean
bBreak = False
Set objImex = CreateObject("BSIEIMEX.CLSIEIMEX")
With objImex
.Init gstrDir, gstrRptDir, gstrMSOfficeDir, gstrPrcConnect, gstrPrcExt,_
gstrPrcDir, gstrPrcDataType, gstrPrcPrefix, gstrPrcSubDataType,_
gstrCmbConnect, gstrCmbExt, gstrCmbDir, gstrCmbDataType, gstrCmbPrefix,_
gstrCmbSubDataType, gbGestErrorLog
.InitExt gstrOpnome, gstrPasswd, gstrCodazi, gstrExt, gstrPrefix,_
gstrConnect, gstrDataType, gstrSubDataType, gstrDirCodazi
Set .wsJet = gwsJet
Set .wsOdbc = gwsOdbc
Set .db = gdb
.HandleWindowOwner = Me.hWnd
Set .cn = gcn
Set .dbAP = gdbAP
Set .cnAP = gcnAP
Set .dbCmb = gdbCmb
Set .Std = objStd
If Not .Initialize Then
GoTo RoutineEnd
End If
bOk = .Esegui(3, "artico", "ArticoExport", "C:\Bus\Asc")
RoutineEnd:
Set objImex.Std = Nothing
Set objImex = Nothing
End Sub
'Interrompe il processo
Sub StopImex()
If Not objImex Is Nothing Then
objImex.StopImex
End If
End Sub
'Sospende il processo
Sub PausaImex()
If Not objImex Is Nothing Then
bBreak = True
objImex.PausaImex
End If
End Sub
Private Sub objImex_NotifyBreak()
Do
DoEvents
Loop Until bBreak = False
End Sub
Private Sub objImex_NotifyError(ByVal TipoErrore As _
BSIEIMEX.ImexConstantsErrorType, ByVal NumeroErrore As Long, _
ByVal Contesto As String, ByVal Messaggio As String)
Select Case TipoErrore
Case BSIEIMEX.bsIeErrorExit
WriteLog Messaggio
MsgBox Messaggio, vbCritical, "Errore"
Case BSIEIMEX.bsIeErrorLog
WriteLog Messaggio
Case BSIEIMEX.bsIeErrorMsgBox
WriteLog Messaggio
MsgBox Messaggio, vbInformation, "Messaggio"
End Select
DoEvents
End Sub
Private Sub objImex_NotifyFinish(ByVal NumeroRelazione As Integer, _
ByVal TabellaOrigine As String, ByVal RigheDaElaborare As Long, _
ByVal RigheElaborate As Long, ByVal RigheInserite As Long, _
ByVal RigheAggiornate As Long, ByVal RigheSaltate As Long, _
ByVal RigheErrate As Long)
Dim strMsg As String
strMsg = "Importazione/esportazione da/a '" & TabellaOrigine & _
"' terminata;" & vbNewLine & vbNewLine & _
"rige da elaborare: " & RigheDaElaborare & vbNewLine & _
"rige elaborate: " & RigheElaborate & vbNewLine & _
"rige aggiornate: " & RigheAggiornate & vbNewLine & _
"rige inserite: " & RigheInserite & vbNewLine & _
"rige scartate: " & RigheSaltate & vbNewLine & _
"rige con errori: " & RigheErrate
WriteLog strMsg
MsgBox strMsg, vbInformation, "Messaggio"
End Sub
Private Sub objImex_NotifyInput(ByVal TipoInput As _
BSIEIMEX.ImexConstantsInputType, ByVal CaptionInput As String, _
ByVal Messaggio As String, Risposta As Variant)
Select Case TipoInput
Case BSIEIMEX.bsIeInputValue
Risposta = InputBox(Messaggio, CaptionInput)
Case BSIEIMEX.bsIeInputOKCancel
Risposta = MsgBox(Messaggio, BSIEIMEX.bsIeInputOKCancel + _
vbQuestion, CaptionInput)
Case BSIEIMEX.bsIeInputAbortRetryIgnore
Risposta = MsgBox(Messaggio, BSIEIMEX.bsIeInputAbortRetryIgnore + _
vbQuestion, CaptionInput)
Case BSIEIMEX.bsIeInputRetryCancel
Risposta = MsgBox(Messaggio, BSIEIMEX.bsIeInputRetryCancel + _
vbQuestion, CaptionInput)
Case BSIEIMEX.bsIeInputYesNo
Risposta = MsgBox(Messaggio, BSIEIMEX.bsIeInputYesNo + _
vbQuestion, CaptionInput)
Case BSIEIMEX.bsIeInputYesNoCancel
Risposta = MsgBox(Messaggio, BSIEIMEX.bsIeInputYesNoCancel + _
vbQuestion, CaptionInput)
End Select
End Sub
Private Sub objImex_NotifyJob(ByVal NumeroRelazione As Integer, _
ByVal TabellaOrigine As String, ByVal TotaleRighe As Long, _
ByVal RigaCorrente As Long, ByVal RigheInserite As Long, _
ByVal RigheAggiornate As Long, ByVal RigheSaltate As Long, _
ByVal RigheErrate As Long)
StatusBar1.Panels(NumeroRelazione).Text = TabellaOrigine & " " & _
Format$(RigheInserite + RigheAggiornate, "#,##0") & " (" & _
Format$(RigaCorrente, "#,##0") & " di " & _
Format$(TotaleRighe, "#,##0") & ")"
DoEvents
End Sub
Private Sub objImex_NotifyMessageBar(ByVal Message As String)
If StatusBar1.Style = sbrNormal Then StatusBar1.Style = sbrSimple
StatusBar1.SimpleText = Message
DoEvents
End Sub
|