Abbiamo una vera e propria applicazione MS Access sviluppata inizialmente per le nostre esigenze personali, che è stata trasformata in un software commerciale e venduta con successo. Il software è una sorta di "software completo per il tuo business" e contiene diversi moduli tra cui sistema di gestione dei documenti, pianificazione delle risorse aziendali, gestione dell'inventario, gestione delle relazioni con i clienti, analisi dei dati, ecc. Siamo abbastanza soddisfatti dell'attuale funzionalità dell'applicazione, ma per soddisfare le richieste dei nostri clienti ci rendiamo conto che dobbiamo passare a qualcosa di nuovo.
Abbiamo deciso di spostare gradualmente la nostra applicazione verso .Net perché possiamo attenerci a Visual Basic .Net: anche se è un nuovo linguaggio per la maggior parte degli sviluppatori qui, abbiamo una profonda conoscenza di VBA e diverse decine di piccoli progetti implementati in VB6.
Abbiamo già iniziato a spostare la funzionalità del livello dati della nostra applicazione su MS SQL Server, in modo che ogni manipolazione e ricerca dei dati venga eseguita direttamente sul server.
Quello che stiamo cercando sono le migliori pratiche per spostare gradualmente la nostra vasta GUI (circa 500-600 diverse forme incluse le sottomaschere, circa 200 report con supporto multilingua, ecc.). In seguito alla recente richiesta da parte del nostro potenziale cliente di implementare la crittografia asincrona dei dati sui documenti in DMS, saremmo anche felici di disaccoppiare completamente questa parte da MS Access e implementarla in .Net.
La domanda è come integrare senza problemi l'applicazione .Net con il sistema MS Access esistente, in modo da poterla richiamare con determinati parametri (diritti utente ecc.) e abilitare lo scambio di dati tra questa applicazione e l'applicazione MS Access in esecuzione.
Modifica
Abbiamo provato ad applicare alcune pratiche dal libro di Martin Fowler " Modelli di integrazione aziendale "per ottenere una certa integrazione tra l'applicazione MS Access e alcune piccole utility implementate in .Net per varie esigenze. Ma siamo riusciti a utilizzare il modello "database condiviso" e non siamo stati veramente soddisfatti della nostra soluzione.
Ad esempio, abbiamo implementato una piccola utility in esecuzione come servizio Windows che scarica automaticamente tutti i messaggi dal server di posta utilizzando la connessione POP3 e li memorizza in una tabella, mentre tutti gli allegati sono memorizzati nel file system.
Ciò che abbiamo fatto principalmente è che abbiamo utilizzato ADO.NET per accedere direttamente ai database MS Access in formato MDB e popolare la tabella con alcuni dati elaborati (come i dati sui messaggi di posta dall'esempio sopra: abbiamo campi per FROM, TO, CC , BCC, soggetto e corpo).
Non c'è alcun problema nel lavorare con il formato dati MDB da .Net , inoltre non vogliamo stare con MDB e quasi tutto su MS SQL Server 2008 - questo ci dà molto più libertà riguardo alla gestione e alla scalabilità dei dati.
Il problema principale qui è che non sappiamo come implementare una sorta di "callback" in Access in modo da poter attivare l'esecuzione di determinati codici VBA sull'aggiornamento dei dati.
Abbiamo nutrito grandi speranze con MS Access 2010 che supporta l'aggiornamento e inserisce i trigger per le tabelle di dati , ma abbiamo scoperto che possiamo utilizzare solo le macro MS Access per questi trigger e non c'è modo di eseguire alcun codice VBA personalizzato all'interno del trigger.
Abbiamo anche provato alcune soluzioni con l'invio di sequenze di tasti direttamente alla finestra di MS Access per simulare alcuni dati richiesti dall'utente. Funziona, ma non pensiamo che questa sia una soluzione affidabile che può essere utilizzata nella produzione.
Abbiamo anche esaminato DDE per MS Access, ma non siamo riusciti a trovare alcuna buona soluzione campione che implementasse i comandi DDE e li usassimo per i dati in-memory e lo scambio di comandi.
Quindi, il problema principale è far coesistere e interagire tra loro MS Access e l'applicazione .Net.
EDIT2 :
Ho dimenticato di menzionare cosa abbiamo anche implementato la libreria MSMQ in VBA per il passaggio dei messaggi tra .Net e MS Access, il problema era ancora la mancanza di callback qui: dovevamo davvero effettuare il polling della coda per nuovi messaggi e dato che VBA in realtà non supporta il multi-threading non è stata davvero una bella soluzione.