/// <summary> /// Renders a condition step /// </summary> /// <param name="template">Export template</param> /// <param name="data">Dialog Step Data</param> /// <param name="flexFieldObject">Flex field object to which the dialog belongs</param> /// <param name="conditionNode">Condition node to render</param> /// <returns>Dialog Step Render Result</returns> public async Task <ExportDialogStepRenderResult> RenderDialogStep(ExportTemplate template, ExportDialogData data, FlexFieldObject flexFieldObject, ConditionNode conditionNode) { ExportDialogStepRenderResult renderResult = new ExportDialogStepRenderResult(); Template parsedTemplate = ScribanParsingUtil.ParseTemplate(template.Code, _errorCollection); if (parsedTemplate == null) { return(renderResult); } ScribanCondition conditionData = new ScribanCondition(); SetRenderObjectBaseDataFromFlexFieldObject(conditionData, data, flexFieldObject); conditionData.AllConditions = await BuildAllConditions(data, flexFieldObject, conditionNode); conditionData.Conditions = conditionData.AllConditions.Where(c => c.ChildNode != null).ToList(); conditionData.Else = BuildElsePart(data, flexFieldObject); TemplateContext context = BuildTemplateContext(conditionData); renderResult.StepCode = await parsedTemplate.RenderAsync(context); return(renderResult); }
/// <summary> /// Builds the template context for exporting /// </summary> /// <param name="conditionData">Condition data to export</param> /// <returns>Template context</returns> private TemplateContext BuildTemplateContext(ScribanCondition conditionData) { ScriptObject exportObject = new ScriptObject(); exportObject.Add(ConditionKey, conditionData); TemplateContext context = new TemplateContext(); context.TemplateLoader = new ScribanIncludeTemplateLoader(_exportCachedDbAccess, _errorCollection); context.PushGlobal(exportObject); return(context); }