void AddInputDebugItemResultsAfterEvaluate(List <IDebugItem> result, ref string userModel, IBinaryDataList dataList, Dev2DecisionMode decisionMode, string expression, out ErrorResultTO error, DebugItem parent = null) { error = new ErrorResultTO(); if (expression != null && DataListUtil.IsEvaluated(expression)) { DebugOutputBase debugResult; if (error.HasErrors()) { debugResult = new DebugItemStaticDataParams("", expression, ""); } else { var expressiomToStringValue = EvaluateExpressiomToStringValue(expression, decisionMode, dataList); userModel = userModel.Replace(expression, expressiomToStringValue); ErrorResultTO errors; IDataListCompiler compiler = DataListFactory.CreateDataListCompiler(); IBinaryDataListEntry expressionsEntry = compiler.Evaluate(dataList.UID, enActionType.User, expression, false, out errors); debugResult = new DebugItemVariableParams(expression, "", expressionsEntry, dataList.UID); } var itemResults = debugResult.GetDebugItemResult(); var allReadyAdded = new List <IDebugItemResult>(); itemResults.ForEach(a => { var found = result.SelectMany(r => r.FetchResultsList()) .SingleOrDefault(r => r.Variable.Equals(a.Variable)); if (found != null) { allReadyAdded.Add(a); } }); allReadyAdded.ForEach(i => itemResults.Remove(i)); if (parent == null) { result.Add(new DebugItem(itemResults)); } else { parent.AddRange(itemResults); } } }
// Travis.Frisinger - 28.01.2013 : Amended for Debug public override List <DebugItem> GetDebugInputs(IBinaryDataList dataList) { List <IDebugItem> result = new List <IDebugItem>(); IDataListCompiler compiler = DataListFactory.CreateDataListCompiler(); var allErrors = new ErrorResultTO(); var val = new StringBuilder(Dev2DecisionStack.ExtractModelFromWorkflowPersistedData(ExpressionText)); try { Dev2DecisionStack dds = compiler.ConvertFromJsonToModel <Dev2DecisionStack>(val); ErrorResultTO error; string userModel = dds.GenerateUserFriendlyModel(dataList.UID, dds.Mode, out error); allErrors.MergeErrors(error); foreach (Dev2Decision dev2Decision in dds.TheStack) { AddInputDebugItemResultsAfterEvaluate(result, ref userModel, dataList, dds.Mode, dev2Decision.Col1, out error); allErrors.MergeErrors(error); AddInputDebugItemResultsAfterEvaluate(result, ref userModel, dataList, dds.Mode, dev2Decision.Col2, out error); allErrors.MergeErrors(error); AddInputDebugItemResultsAfterEvaluate(result, ref userModel, dataList, dds.Mode, dev2Decision.Col3, out error); allErrors.MergeErrors(error); } var itemToAdd = new DebugItem(); userModel = userModel.Replace("OR", " OR\r\n") .Replace("AND", " AND\r\n") .Replace("\r\n ", "\r\n") .Replace("\r\n\r\n", "\r\n") .Replace(" ", " "); AddDebugItem(new DebugItemStaticDataParams(userModel, "Statement"), itemToAdd); result.Add(itemToAdd); itemToAdd = new DebugItem(); AddDebugItem(new DebugItemStaticDataParams(dds.Mode == Dev2DecisionMode.AND ? "YES" : "NO", "Require All decisions to be True"), itemToAdd); result.Add(itemToAdd); } catch (JsonSerializationException) { Dev2Switch ds = new Dev2Switch { SwitchVariable = val.ToString() }; DebugItem itemToAdd = new DebugItem(); ErrorResultTO errors; IBinaryDataListEntry expressionsEntry = compiler.Evaluate(dataList.UID, enActionType.User, ds.SwitchVariable, false, out errors); var debugResult = new DebugItemVariableParams(ds.SwitchVariable, "Switch on", expressionsEntry, dataList.UID); itemToAdd.AddRange(debugResult.GetDebugItemResult()); result.Add(itemToAdd); } catch (Exception e) { allErrors.AddError(e.Message); } finally { if (allErrors.HasErrors()) { var serviceName = GetType().Name; DisplayAndWriteError(serviceName, allErrors); ErrorResultTO error; compiler.UpsertSystemTag(_dataListId, enSystemTag.Dev2Error, allErrors.MakeDataListReady(), out error); } } return(result.Select(a => a as DebugItem).ToList()); }