Poiché la mia azienda compie la transizione verso l'utilizzo di SFDC come nostro principale sistema operativo, abbiamo riunito un paio di portali SFDC in cui possiamo pubblicare i documenti specifici dei clienti per essere visualizzati a piacere. Come tale, abbiamo avuto la necessità di implementare applicazioni pseudo-ETL in grado di estrarre metadati dai documenti che i nostri analisti generano internamente (la maggior parte sono formati PDF standard, XML o MS Office) e posizionati in rete " coda "cartelle. Da lì, le nostre applicazioni acquisiscono i documenti in coda e li caricano nella libreria di contenuti CRM di SFDC appropriata insieme ad alcuni pezzi selezionati di metadati. Ho utilizzato principalmente DbAmp per mediare le comunicazioni con SFDC (DbAmp è un provider di server collegato che consente di utilizzare le convenzioni SQL per interagire con i dati dell'organizzazione SFDC).
Sono riuscito a creare applicazioni [console] in C # che funzionano abbastanza bene e di solito sono strutturate in questo modo:
static void Main()
{
// Load parameters from app.config.
// Get documents from queue.
var files = someInterface.GetFiles(someFilterOrRegexPattern);
foreach (var file in files)
{
// Extract metadata from the file.
// Validate some attributes of the file; add any validation errors to an in-memory
// structure (e.g. List<ValidationErrors>).
if (isValid)
{
var fileData = File.ReadAllBytes(file);
// Upload using some wrapper for an ORM or DAL
someInterface.Upload(fileData, meta.Param1, meta.Param2, ...);
}
else
{
// Bounce the file
}
}
// Report any validation errors (via message bus or SMTP or some such).
}
E questo è praticamente tutto. Il più delle volte avvolgo tutte queste operazioni in una classe "Worker" che prende le interfacce necessarie come parametri del costruttore.
Questo approccio ha funzionato ragionevolmente bene, ma ho appena avuto questa sensazione nel mio intestino che c'è qualcosa di terribile in questo e vorrei un po 'di feedback. La scrittura di un processo ETL come app C # Console è una cattiva idea? Mi sto anche chiedendo se ci sono alcuni schemi di progettazione che sarebbero utili in questo scenario che sto chiaramente trascurando.
Grazie in anticipo!