private ResultOperation SaveInto() { VariableService variableService = new VariableService(base.UnitOfWork); ResultOperation resultOperation = new ResultOperation(); //Resort this.SetDataList because of variable dependencies. var listSetDataList = this.SetDataList.ToList(); for (int i = 0; i < listSetDataList.Count; i++) { var item = listSetDataList[i]; sysBpmsVariable variable = variableService.GetInfo(base.EngineSharedModel?.CurrentProcessID, base.EngineSharedModel?.CurrentApplicationPageID, item.Key, new string[] { $"{nameof(sysBpmsVariable.DependentVariableDependencies)}.{nameof(sysBpmsVariableDependency.ToVariable)}" }); foreach (sysBpmsVariableDependency vDependency in variable.DependentVariableDependencies) { var parentVariable = listSetDataList.Select((c, index) => new { item = c, index }).FirstOrDefault(c => c.item.Key != item.Key && c.item.Key == vDependency.ToVariable.Name && i < c.index); //if variable has a dependency which has higher index ,this code block replace both of them. if (parentVariable != null) { listSetDataList[i] = parentVariable.item; listSetDataList[parentVariable.index] = item; i--; } } } this.SetDataList = listSetDataList.ToDictionary(c => c.Key, c => c.Value); //save variables. foreach (var item in this.SetDataList) { if (resultOperation.IsSuccess) { sysBpmsVariable variable = variableService.GetInfo(base.EngineSharedModel?.CurrentProcessID, base.EngineSharedModel?.CurrentApplicationPageID, item.Key, new string[] { nameof(sysBpmsVariable.DependentVariableDependencies) }); if (variable != null) { switch ((sysBpmsVariable.e_RelationTypeLU)variable.RelationTypeLU) { case sysBpmsVariable.e_RelationTypeLU.Local: resultOperation = new SystemicVariableTypeEngine(base.EngineSharedModel, variable, base.EngineSharedModel?.CurrentProcessID, this.ThreadID, this.AdditionalParams, this.UnitOfWork).SaveValues(item.Value); break; case sysBpmsVariable.e_RelationTypeLU.Entity: resultOperation = new EntityVariableTypeEngine(base.EngineSharedModel, variable, base.EngineSharedModel?.CurrentProcessID, this.ThreadID, this.AdditionalParams, this.UnitOfWork).SaveValues(item.Value, this.SetDataList); item.Value.SetValue("ID", resultOperation.CurrentObject); break; case sysBpmsVariable.e_RelationTypeLU.SqlQuery: resultOperation = new SqlQueryVariableTypeEngine(base.EngineSharedModel, variable, base.EngineSharedModel?.CurrentProcessID, this.ThreadID, this.AdditionalParams, this.UnitOfWork).SaveValues(item.Value); break; } } } } return(resultOperation); }
private VariableModel GetEntitiesByName(string VarName, List <QueryModel> additionalParams = null, PagingProperties currentPaging = null, string containerQuery = null, string[] includes = null) { if (additionalParams != null) { this.AdditionalParams = additionalParams; } if (!this.GetDataList.Any(c => c.Name == VarName)) { sysBpmsVariable _Variable = new VariableService(base.UnitOfWork).GetInfo(base.EngineSharedModel?.CurrentProcessID, base.EngineSharedModel?.CurrentApplicationPageID, VarName, new string[] { nameof(sysBpmsVariable.DependentVariableDependencies) }); List <DataModel> _DataModel = new List <DataModel>(); if (_Variable != null) { switch ((sysBpmsVariable.e_RelationTypeLU)_Variable.RelationTypeLU) { case sysBpmsVariable.e_RelationTypeLU.SqlQuery: //this set each DataModel's key corresponding to returned columns by query and then set value into it. _DataModel = new SqlQueryVariableTypeEngine(base.EngineSharedModel, _Variable, base.EngineSharedModel?.CurrentProcessID, this.ThreadID, this.AdditionalParams, base.UnitOfWork).GetResult(currentPaging, containerQuery); break; case sysBpmsVariable.e_RelationTypeLU.Local: //this set each DataModel's key corresponding to variable name and then set value into it. _DataModel = new SystemicVariableTypeEngine(base.EngineSharedModel, _Variable, base.EngineSharedModel?.CurrentProcessID, this.ThreadID, this.AdditionalParams, base.UnitOfWork).GetResult(); break; case sysBpmsVariable.e_RelationTypeLU.Entity: //this set each DataModel's key corresponding to returned columns by query and then set value into it. //this method return one DataModel if the _Variable FilterTypeLU is Filtered otherwise it will return list of DataModel. _DataModel = new EntityVariableTypeEngine(base.EngineSharedModel, _Variable, base.EngineSharedModel?.CurrentProcessID, this.ThreadID, this.AdditionalParams, base.UnitOfWork).GetResult(currentPaging, containerQuery, includes); break; } this.GetDataList.Add(new VariableModel(VarName, _DataModel)); } } return(this.GetDataList.FirstOrDefault(c => c.Name == VarName)); }