/// <summary> /// Constructor when subject and body are already known. /// </summary> /// <param name="name"></param> /// <param name="lng"></param> /// <param name="subj"></param> /// <param name="body"></param> /// <param name="currentDepth"></param> /// <param name="smoSrv"></param> public Template(int id, string name, string lng, string subj, string body, int currentDepth, SmoClientHelper smoSrv) { Id = id; Name = name; Language = lng; Subject = subj; Body = body; currentDepth++; if (currentDepth <= maxDepth) { Placeholders = new List<string>(); TemplatePlaceholders = new List<Template>(); GetPlaceHolders(Subject, ref Placeholders); GetPlaceHolders(Body, ref Placeholders); TemplatePlaceholders = GetTemplatePlaceholders(Placeholders, currentDepth, smoSrv); foreach (Template t in TemplatePlaceholders) { if (!String.IsNullOrEmpty(t.Subject)) { Subject = ReplaceTemplatePlaceholder(Subject, t.Name, t.Subject); } if (!String.IsNullOrEmpty(t.Body)) { Body = ReplaceTemplatePlaceholder(Body, t.Name, t.Body); } } } }
/// <summary> /// Returns the list of placeholders, which reference to other templates. /// </summary> /// <param name="pHolders"></param> /// <param name="smoSrv"></param> /// <returns></returns> private List<Template> GetTemplatePlaceholders(IEnumerable<string> pHolders, int depth, SmoClientHelper smoSrv) { List<Template> tList = new List<Template>(); foreach (var pHolder in pHolders) { if (pHolder.StartsWith("Template.")) { Template t = new Template(pHolder.Replace("Template.", ""), Language, depth, smoSrv); tList.Add(t); } } return tList; }
///// <summary> ///// Sets the public properties Subject and Body ///// </summary> ///// <param name="smoServer">SmartObjectClientServer with connection</param> private void GetSubjectBody(SmoClientHelper smoServer) { StringBuilder sqlQuery = new StringBuilder(); sqlQuery.AppendFormat( "SELECT TOP 1 [Id], [EmailSubject], [EmailBody], [TemplateLanguage], [TemplateName] FROM K2Field_K2NE_SMO_EmailTemplate WHERE [TemplateLanguage] = '{0}' AND [TemplateName] = '{1}'", Language, Name); DataTable dTable = smoServer.ExecuteSQLQueryDataTable(sqlQuery.ToString()); if (dTable.Rows.Count == 0) return; Subject = dTable.Rows[0]["EmailSubject"].ToString(); Body = dTable.Rows[0]["EmailBody"].ToString(); }