Cos'è una soluzione facile da usare per modificare i modelli di e-mail con le variabili di sostituzione?

9

Sto lavorando su un sistema in cui contiamo molti "amministratori / amministratori" che inviano email agli utenti dal database. Una delle caratteristiche principali è la possibilità di inviare email a più persone contemporaneamente, con informazioni specifiche relative a ciascuna di esse. Un'altra caratteristica fondamentale è quella di essere in grado di creare e-mail artigianali, perché tende ad essere necessario modificarle leggermente ogni volta, ma avere un modello di base consente di risparmiare un sacco di tempo.

Per questo, abbiamo la tipica soluzione "templates", in cui abbiamo un modello che assomiglia a qualcosa del genere:

Hello {{recipient.full_name}},

Your application to {{activity.title}} has been accepted. 
You have requested to participate on dates {{application.dates}}, in role {{application.role}}
Blah blah blah

Il problema che stiamo avendo è ovviamente che (come ci aspettavamo), i manager non ottengono l'intera idea di "variabili", e fanno cose come sovrascriverle, il che non consente loro di inviare più di una persona in una tempo, supponendo che quelli non vengano sostituiti e che il sistema sia rotto, o anche cose inspiegabili come "Hello {{John}}".

Il grosso problema è che questa non è relegata, come al solito, in una sezione "admin" dove solo pochi utenti esperti hanno accesso alla modifica dei modelli che vengono inviati automaticamente, e ci si aspetta che sappiano cosa sta facendo. Ogni utente del sistema viene esposto a questo problema.

La soluzione ovvia sarebbe sostituire le variabili prima che mostrano questo modello per l'utente da modificare, ma che non funziona quando invii email a più persone.

Questo sembra un problema abbastanza comune, e speriamo che qualcuno lo abbia già risolto.

Hai visto qualcosa / creato / puoi pensare a buone soluzioni a questo problema?

Aggiorna

Quello che ho finito per fare in base alla risposta di Daniel B stava rilevando, in base alla posizione del cursore, e posizione di {{}} nel codice se l'utente è attualmente "all'interno di una variabile" o "all'esterno". All'interno, mostro un piccolo pezzo di testo sotto la grande textarea che spiega che questo verrà sostituito, e che possono rimuoverlo completamente se lo desiderano, ma non possono modificarlo.

Lo faccio onClick, onChange, onKeyDown, onKeyUp. Per gli eventi "chiave", se siamo all'interno di una variabile, restituisco VERO solo se il codice chiave è uno dei pochi tasti "di navigazione". Altrimenti, restituisco FALSE, che impedisce efficacemente l'edizione di quella variabile.

Non è perfetto, ma è stato molto economico e sembra efficace.

    
posta Daniel Magliola 03.07.2012 - 11:15
fonte

2 risposte

3

Su richiesta dei commenti nella risposta di ChrisF, ecco una soluzione che ho usato in passato:

  • Utilizzare RichTextBox di WinForms per consentire all'utente di modificare il testo del modello.
  • Consenti il trascinamento (o altro inserimento) di variabili o segnaposto in RichTextBox.
  • Non consentire la modifica delle variabili stesse controllando la posizione corrente del cursore per i delimitatori delle variabili (i simboli {{e}}, nell'esempio).

La mia implementazione ha avuto un aspetto simile a questo:

Ha l'evidenziazione opzionale della variabile per differenziarlo dal testo standard.
I delimitatori variabili sono effettivamente lì, hanno solo gli stessi colori di primo piano e di sfondo.

Ovviamente, questo è molto diverso dalla tua implementazione, che è basata su HTML. Probabilmente guarderei come viene implementato l'editor di Gmail; sembra essere simile a una textarea, ma è in grado di avere immagini inline (faccine, ecc.), che è simile al comportamento che stai cercando.

    
risposta data 03.07.2012 - 14:25
fonte
4

Prenderemo in considerazione la possibilità di modificare il modo in cui il modello viene presentato all'utente in modo da poter rendere le parti che verranno modificate dal codice non modificabile. Qualcosa del genere:

I bit che non vuoi che l'utente cambi non sono ora modificabili. Puoi includere un pulsante di chiusura in modo che possano rimuovere gli elementi se non ne hanno bisogno. Puoi anche includere testo esplicativo e / o suggerimenti per spiegare cosa significano i bit {{...}} e perché dovrebbero essere lasciati in pace.

L'utilizzo di qualcosa come Silverlight / WPF WrapPanel per ogni paragrafo potrebbe darti qualcosa che consente a ciascuna parte (modificabile e non modificabile) di scorrere mentre il testo controllato dall'utente aumenta e si riduce.

    
risposta data 03.07.2012 - 11:53
fonte

Leggi altre domande sui tag