Data ultimo aggiornamento: 13/06/2012

Clicca per accedere al sito di NTS Informatica
Clicca per accedere all'argomento Clicca per accedere all'argomento Clicca per accedere all'argomento Clicca per accedere all'argomento
Clicca per accedere al sito di NTS Informatica

Note sul modulo di Import/Export (2° livello)

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
  
Clicca per accedere al sito di NTS Informatica