Abbiamo un'applicazione MS Access davvero grande sviluppata internamente inizialmente per le nostre esigenze personali, che è stata poi trasformata in un software commerciale e venduta con successo. Il software è una sorta di "software a tutto tondo per la tua azienda" e contiene diversi moduli tra cui il sistema di gestione dei documenti, la pianificazione delle risorse aziendali, la gestione dell'inventario, la gestione delle relazioni con i clienti, l'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 qui è un nuovo linguaggio per la maggior parte degli sviluppatori, 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 di dati venga eseguita direttamente sul server.
Ciò che stiamo cercando sono le migliori pratiche per spostare gradualmente la nostra ampia GUI (circa 500-600 moduli diversi tra cui sottomaschere, circa 200 report con supporto multilingue, ecc.). A seguito della recente richiesta del nostro potenziale cliente di implementare la crittografia dei dati asincrona sui documenti in DMS, saremo anche felici di separare 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 che possiamo invocarla con determinati parametri (diritti utente ecc.) E abilitare lo scambio di dati tra questa applicazione e l'esecuzione dell'applicazione MS Access.
MODIFICARE:
Abbiamo cercato di applicare alcune pratiche del libro " Schemi di integrazione aziendale " di Martin Fowler per ottenere una certa integrazione tra l'applicazione MS Access e alcune piccole utility che abbiamo implementato in .Net per varie esigenze. Ma siamo riusciti a utilizzare solo il modello "database condiviso" e non siamo rimasti molto 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.
Quello che abbiamo fatto principalmente è stato usare 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 dell'esempio precedente: abbiamo campi per FROM, TO, CC, BCC, Soggetto e corpo).
Non c'è assolutamente alcun problema a lavorare con il formato di dati MDB da .Net , inoltre non vogliamo rimanere con MDB e sovradimensionare quasi tutto a MS SQL Server 2008 - questo ci dà molta più libertà riguardo la gestione e la 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 un determinato codice VBA sull'aggiornamento dei dati.
Avevamo grandi speranze con MS Access 2010 che supporta l' aggiornamento e l'inserimento di trigger per le tabelle di dati , ma si è scoperto che possiamo usare solo macro di MS Access per questi trigger e non è possibile 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 imitare alcune richieste di dati invocate dall'utente. Funziona, ma non pensiamo che questa sia una soluzione affidabile che può essere utilizzata in produzione.
Abbiamo anche esaminato DDE per MS Access, ma non siamo riusciti a trovare alcuna buona soluzione di esempio che implementasse i comandi DDE e li usasse per lo scambio di dati e comandi in memoria.
Quindi, il problema principale è far coesistere le applicazioni MS Access e .Net e interagire tra loro.
EDIT2 :
Ho dimenticato di menzionare ciò che abbiamo implementato anche la libreria MSMQ in VBA per il passaggio di messaggi tra .Net e MS Access, il problema era di nuovo la mancanza di richiamata qui: dovevamo davvero sondare la coda per i nuovi messaggi e dato che VBA non supporta davvero il multi-threading non era davvero una bella soluzione.