public void ExecuteTemplate(MicroTemplateInfo model) { if (model == null) { throw new ArgumentNullException(nameof(model)); } model.Result = ""; try { switch (model.SourceType) { case "Csv": ExecuteTemplateCsv(model); break; case "JsonArray": ExecuteTemplateJsonArray(model); break; case "JsonObject": ExecuteTemplateJsonObject(model); break; } } catch (Exception ex) { model.Result = "Error executing template:" + ex.Message; } }
private void ExecuteTemplateJsonObject(MicroTemplateInfo model) { var template = DotLiquid.Template.Parse(model.Template); var source = JsonConvert.DeserializeObject <ExpandoObject>(model.Source); var result = template.Render(Hash.FromDictionary(source)); model.Result += result + model.ItemSeparator; }
private void ExecuteTemplateJsonArray(MicroTemplateInfo model) { var template = DotLiquid.Template.Parse(model.Template); var arr = JsonConvert.DeserializeObject <List <ExpandoObject> >(model.Source); foreach (var item in arr) { var result = template.Render(Hash.FromDictionary(item)); model.Result += result + model.ItemSeparator; } }
public IActionResult PostTemplate([FromBody] MicroTemplateInfo model) { if (!ModelState.IsValid) { return(BadRequest()); } try { _microTemplateProcessor.ExecuteTemplate(model); return(Ok(model)); } catch (Exception ex) { return(Problem(UtilString.GetStringException(ex))); } }
public IActionResult GetTemplate([FromQuery] IDictionary <string, string> templateParams) { if (!ModelState.IsValid) { return(BadRequest()); } try { var model = MicroTemplateInfo.FromDictionary(templateParams); model.SetDefaultsForNulls(); _microTemplateProcessor.ExecuteTemplate(model); return(Ok(model)); } catch (Exception ex) { return(Problem(UtilString.GetStringException(ex))); } }
private void ExecuteTemplateCsv(MicroTemplateInfo model) { using var stream = new MemoryStream(Encoding.UTF8.GetBytes(model.Source ?? "")); using var reader = new StreamReader(stream); var config = new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = false, MissingFieldFound = null, Delimiter = model.CsvDelimiter, IgnoreBlankLines = true, }; using var csv = new CsvReader(reader, config); var records = csv.GetRecords <GenericRecord>(); int index = 0; foreach (var record in records) { record.SetIndex(index); var result = model.Template.FormatLiquid(record); model.Result += result + model.ItemSeparator; index++; } }
public TemplateModel() { Source = new MicroTemplateInfo(); }