Dziękuję wszystkim za dając wgląd w jaki sposób są one obsługi. Zebrałem tutaj dużo wiedzy. Lubiłem @MartinHN używając parsera Razor z konkretnym modelem danych.
Jednak coś, co nie zadziałało zbyt dobrze dla mnie.
Wymagania:
muszę przechowywać szablony e-mail tak, że mogę wyświetlać to samo
Partnerów w każdej chwili. Dlatego powinien on być dostępny do przeglądania intranetu - najlepiej poprzez stronę internetową Sae jako hostowany interfejs API.
Projektanci front endowi powinni mieć możliwość łatwej modyfikacji szablonów. Dlatego chcę przechowywać go w prostym formacie HTML, aby projektant nie musiał przechodzić przez zbyt wiele technicznych szczegółów.
Szablony wiadomości e-mail powinny być łatwo dostępne dla modyfikacji dla administratorów (wymagania na przyszłość). W niedalekiej przyszłości pojawią się różne powiadomienia SMS, ekranowe. Dlatego szablony różnią się od siebie.
podstawie tych wymagań, zrobiłem następujący:
Ponieważ używałem MVC, stworzyłem folder o nazwie "statyczne", czyli dostępne mają być przeglądane bezpośrednio (i silnik MVC/http handler wykluczyć ten folder z wykonywania swoich działań MVC).
Z takim podejściem mogę łatwo osiągnąć pierwszego wymogu i mogę wysłać moje odnośnik do podmiotami jak http://api.aksdfjl.com/static/welcomeemailtemplate.html
Każdy szablon email dał własny html, więc łatwo było dla projektanta do uzyskać dostęp do tego samego i odsyłać go do repozytorium jako skrótu do mojego folderu repozytorium. HTML ma wbudowany CSS i jest całkowicie niezależny html na pocztę elektroniczną.
Ostatnim głównym wymaganiem było zachowanie tego projektu, a użytkownik może je zmodyfikować. Cóż, zdecydowanie nie chcę w ogóle zajmować się systemem plików. To, co zrobiłem, to teraz te powiadomienia do bazy danych, a ja je zainicjuję raz. Następnie panel administracyjny ma edytor wysiwyg html, który może dać im szybki podgląd, a także kontrolę nad tym, co powinien wysłać.
Teraz chciałem się upewnić, że przyszłe wymagania są łatwo obchodzić, a ponieważ moja firma wprowadzając różne powiadomień dla różnych trybach, takich jak e-mail, ekran powiadomień SMS. Zdecydowałem się rozszerzyć projekt oprogramowania za pomocą XML inicjalizatora szablonu, który przechowuje te odpowiedzi.
Matka wszystkich szablonów o nazwie - MessageTemplates.xml przechowuje różne informacje potrzebne do zainicjowania różnych typów szablonów, np. e-mail, sms, screen i in.
Oto jak kod wygląda teraz.
[HttpGet]
[Route("applications/initializenotificationtemplate")]
public IHttpActionResult InitializeNotificationTemplate()
{
return
InitializeNotificationTemplate(Path.Combine(HostingEnvironment.ApplicationPhysicalPath,
@"Static\InitializeData\MessageTemplates.xml"));
}
[NonAction]
public IHttpActionResult InitializeMailTemplate(string filePath)
{
try
{
_applicationService.InitializeTemplate(filePath);
return Ok("Application Notification templates are initialized.");
}
catch (Exception ex)
{
return InternalServerError(ex);
}
}
_applicationService.InitializeTemplate ma następującą definicję:
public bool InitializeTemplate(string filePath)
{
if (string.IsNullOrEmpty(filePath))
{
throw new ArgumentNullException("File Path");
}
if (!File.Exists(filePath))
{
throw new FileNotFoundException(filePath);
}
var data = _notificationTemplateService.Get();
var exceptionMessages = string.Empty;
if (data != null)
{
var historicalTemplates = data.ToList();
historicalTemplates.ForEach((d) => _notificationTemplateService.Delete(d, out exceptionMessages));
}
XDocument xmlDocument = XDocument.Load(filePath);
IEnumerable<NotificationTemplate> templates = (from template in xmlDocument.Descendants("Template")
select new NotificationTemplate()
{
Title = template.Element("Subject").Value,
Description = template.Element("Body").Value,
Type = (NotificationTypeOptions)Enum.Parse(typeof(NotificationTypeOptions), template.Element("Type").Value, true),
Category = (NotificationCategoryOptions)Enum.Parse(typeof(NotificationCategoryOptions), template.Attribute("category").Value, true),
}).ToList();
foreach (var t in templates)
{
var path = Path.Combine(Path.GetDirectoryName(filePath), Regex.Replace(t.Description, @"\t|\n|\r| ", ""));
if (File.Exists(path))
{
StreamReader reader = new StreamReader(path);
t.Description = reader.ReadToEnd();
}
else
{
t.Description = string.Empty;
}
}
return _notificationTemplateService.InsertRange(templates, out exceptionMessages);
}
to jak wygląda mój model, który jest taki sam jak pierwszy model bazy danych (code - podejście EF).
public class NotificationTemplate : IdentityBase
{
public string Category { get; set; }
public NotificationTypeOptions Type { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public NotificationTemplate()
{
Type = NotificationTypeOptions.Email;
}
}
[Flags]
public enum NotificationTypeOptions
{
Email = 0,
Screen = 1,
}
Po raz pierwszy, gdy zainstalować mój wniosek Wzywam zainicjować wywołanie API, które instalują swoje szablony powiadomień w bazie danych i dostępne i gotowe do użycia są wszystkie inne opcje.
Dzięki takiemu podejściu sprawiłem, że wszyscy byli zadowoleni w organizacji i ma wielką siłę, aby rozszerzyć tę dziedzinę, dzięki czemu łatwiej jest mi również wprowadzić nowe szablony.
Użyłem plików xml na mojej stronie internetowej i dało to radykalne skalowanie funkcji obsługiwanych przez szablony e-mail. –