Sembra un potenziale candidato per una soluzione InfoPath. A prima vista, farà la maggior parte di tutto ciò che stai chiedendo.
Questo articolo fornisce una breve panoramica sulla creazione di un modulo di InfoPath basato su un'origine dati SQL.
http://office.microsoft.com/en-us/infopath-help/design-a-form-template-based-on-a-microsoft-sql-server-database-HP010086639.aspx
ho costruito una soluzione completamente personalizzata come si sta descrivendo, e se mai fatto di nuovo io probabilmente optare per 1) un prodotto di terze parti o 2) meno funzionalità. Puoi dedicare il 90% del tuo tempo a lavorare sul 10% del set di funzionalità.
MODIFICA: rileggi le tue domande ed ecco un feedback aggiuntivo.
1 - struttura dati flessibile: Un paio di cose da tenere a mente sono le prestazioni e la capacità di scrivere rapporti contro i dati. Più è generica la struttura dei dati, più sarà difficile raggiungerli (di nuovo, parlando per esperienza).
Contrariamente alle prestazioni e alla disponibilità del report, Microsoft SharePoint utilizza frammenti/documenti XML in tabelle generiche per la massima flessibilità. Non posso discutere con le caratteristiche di SharePoint, quindi questo ha fatto il lavoro e semplifica enormemente la struttura dei dati. XML funzionerà correttamente se fatto correttamente, ma molte persone troveranno più difficile scrivere query su XML. Anche se XML è un "cittadino di prima classe" per SQL Server, può avere o meno una struttura di tabella ottimizzata.
2 - Forme: Ho implementato moduli personalizzati utilizzando XML trasformato da XSLT. XML è spesso una buona scelta per la memorizzazione della struttura del modulo; XSLT è un mostro a sé, ma è è molto potente. Per quello che vale, InfoPath memorizza la struttura del modulo come XML.
Ho anche implementato moduli dinamici utilizzando i controlli personalizzati in .Net. Questo è un approccio molto orientato agli oggetti, ma (a seconda della complessità dell'interfaccia utente) può richiedere una quantità significativa di codice.
Infine, (sempre utilizzando SharePoint come esempio), Microsoft ha implementato in XML SharePoint liste di elenchi/formule orribilmente complicate. La complessità ha vanificato molti dei vantaggi. In altre parole, se segui il percorso XML, rendi le tue strutture pulite e semplici o avrai un incubo di manutenzione a portata di mano.
EDIT # 2: In riferimento alla domanda di Scott di seguito, ecco una struttura di dati di alto livello che eviterà i dati duplicati e non si basa su XML per la maggior parte della definizione di modulo.
Avvertenza: ho appena messo insieme questo disegno in SQL Management Studio ... ho trascorso solo 10 minuti; lo sviluppo di un sistema di moduli flessibile non è un compito banale, quindi questa è una semplificazione eccessiva. Non affronta la memorizzazione dei dati inseriti dall'utente, solo la definizione del modulo.
Le tabelle:
Form - top-level tavolo forma che contiene (come ci si indovina) la raccolta dei campi che compongono il modulo.
Campo: campi generici che possono essere riutilizzati attraverso i moduli. Ad esempio, non vuoi 50 diversi campi "Cognome" per 50 moduli diversi. Nota la colonna "DataTypeId". È possibile memorizzare qualsiasi tipo desiderato in questa colonna, ad esempio "numero", testo libero ", anche un valore che indica che l'utente deve scegliere da un elenco.
FormField - consente a un modulo di contenere 0-molti campi nel suo definizione Si potrebbe anche estendere questa tabella per indicare che l'utente può AGGIUNGERE il maggior numero di questo campo.
Vincolo: in pratica una tabella di ricerca che definisce un tipo di vincolo (forse è la lunghezza massima, le occorrenze massime, richiesto, ecc.)
FormFieldConstraint - associa un vincolo a una particolare istanza di un campo modulo.Questa tabella combina un modulo specifico con un campo specifico con un vincolo specifico. n; questo potenzialmente sarebbe un buon uso per XML per memorizzare le specifiche del vincolo.
In sostanza, suggerisco di creare un database normalizzato con pochi o nessun valore nullo e nessun dato duplicato. Una struttura come ho descritto ti porterebbe sulla strada per raggiungere quell'obiettivo.
Grazie per la risposta. 1) Sarei nervoso per memorizzare tutti i dati in xml. Per quanto riguarda la struttura dei dati generica, quale delle due opzioni (a e b) che ho elencato sarebbe più difficile? Mi sento come b sarebbe la soluzione più facile. Essere d'accordo? 2) Mi piace l'XML (pulito) migliore e migliore per il modulo, dovrò cercare in XSLT, non ne so molto. Sono curioso di sapere come hai creato i controlli personalizzati in .Net. Stavo pensando di creare controlli utente (uno per casella di testo, menu a discesa, ecc.), Ma come si crea il collegamento per la lettura/scrittura sul db? – scojomodena
@Scott J - guarda il mio post aggiornato. Ho pubblicato un esempio che dovrebbe eliminare la duplicazione di cui si parla nell'opzione B. Per quanto riguarda i controlli personalizzati ... i controlli utente funzionerebbero bene, a meno che non sia necessario condividerli tra gli assembly. Ogni controllo dovrebbe probabilmente implementare un'interfaccia comune che consenta loro di essere popolati con dati e di avere i dati raccolti da essi. Questi controlli verrebbero posizionati su una pagina padre/controllo che comprendeva come aggregare i dati da essi e trasferirli al livello aziendale. –