private void GenerateDataVariableClasse(StringBuilder assemblyCode, ExternalDataDefinition externalData, IProcessDefinition process) { if (!string.IsNullOrWhiteSpace(externalData.Expresion)) { foreach (var connection in externalData.ExternalDataConfigurationConnectionContextList) { var variableScripts = ExpressionService.PrepareScriptForMultipleDestinations(connection.Expresion, new object()); assemblyCode.AppendFormat(@" public class {0}_CalculatedVariable : ExternalDataReceiverBase<{2}Edit> {{ public {0}_CalculatedVariable(string data) {{ Data = data; }} {1} ", connection.SystemName, GenerateGetFieldMappings(externalData, process), process.Name); foreach (var variableContext in externalData.DataVariableList) { if (variableScripts.ContainsKey(variableContext.VariableSystemName)) { var variableName = variableContext.VariableSystemName; assemblyCode.AppendFormat(@" private bool _is{1}Calculated; private {0} _{1}; public {0} {1} {{ get {{ if(string.IsNullOrWhiteSpace(Data)) return default({0}); if(!_is{1}Calculated) {{ _{1} = {2}; _is{1}Calculated = true; }} return _{1}; }} }}", this.GetLiteralNameFromType(variableContext.VariableDataType), variableName, variableScripts[variableContext.VariableSystemName]); } } assemblyCode.AppendFormat(@" }}"); } } }
private string GenerateGetFieldMappings(ExternalDataDefinition externalData, IProcessDefinition process) { var assemblyCode = new StringBuilder(); var expressionScripts = ExpressionService.PrepareScriptForMultipleDestinations(externalData.Expresion, new object()); assemblyCode.AppendFormat(CultureInfo.InvariantCulture, @" protected override IEnumerable<FieldMapping> GetFieldMappings({0}Edit editObject, Cebos.Veyron.SharedTypes.Expressions.ExpressionContext context) {{ var item = editObject; // This variable is used in expressions. Don't remove. var mappings = new List<FieldMapping>(); ", process.Name); var resultFields = ExpressionService.GetResultFields(externalData.Expresion); var variableIndex = 0; foreach (var resultField in resultFields) { var mappingVariableName = AddExternalDataFieldMapping(assemblyCode, resultField, expressionScripts, ref variableIndex); assemblyCode.AppendFormat(@" mappings.Add({0});", mappingVariableName); } assemblyCode.AppendFormat(CultureInfo.InvariantCulture, @" return mappings; }} "); return assemblyCode.ToString(); }
private void GenerateExternalData( StringBuilder assemblyCode, IProcessDefinition process, ExternalDataDefinition externalData) { //Variable assemblyCode.AppendLine(@" dataVariables = new System.Collections.Generic.List<Cebos.Veyron.SharedTypes.DataVariableContext>();"); foreach (var context in externalData.DataVariableList) { assemblyCode.AppendFormat( @" dataVariables.Add(new Cebos.Veyron.SharedTypes.DataVariableContext({0},{1}, System.Guid.Parse(""{2}""),Cebos.Veyron.SharedTypes.DataVariablesType.{3}));", context.VariableName.ToLiteral(), context.VariableSystemName.ToLiteral(), context.Guid, context.VariableDataType); } assemblyCode.AppendLine(@" externalDataConfigurationConnectionContextList = new System.Collections.Generic.List<Cebos.Veyron.SharedTypes.ExternalDataConfigurationConnectionContext>(); "); foreach (var context in externalData.ExternalDataConfigurationConnectionContextList) { GenerateComputerConnectionList(assemblyCode, context.ComputerConnectionList); assemblyCode.AppendFormat( @" externalDataConfigurationConnectionContextList.Add(new Cebos.Veyron.SharedTypes.ExternalDataConfigurationConnectionContext( {0}, {15}, {1}, {2}, Cebos.Veyron.SharedTypes.SerialPortParity.{3}, {4}, {5}, {6}, Cebos.Veyron.SharedTypes.FlowControl.{7}, {8}, {9}, Cebos.Veyron.SharedTypes.ConnectionType.{10}, Cebos.Veyron.SharedTypes.StopBits.{11}, computerConnectionContextList, {12}, {13}, {14}, string.Empty));", context.Name.ToLiteral(), context.PortName.ToLiteral(), context.BaudRate.ToLiteral(), context.Parity, context.Dtr.ToLiteral(), context.FlowControlHighSignal.ToString(CultureInfo.InvariantCulture), context.ParityErrorChecking.ToLiteral(), context.FlowControl, context.Rts.ToLiteral(), context.DataBits.ToLiteral(), context.ConnectionType, context.StopBits, string.IsNullOrWhiteSpace(context.Vid) ? "string.Empty" : context.Vid.ToLiteral(), string.IsNullOrWhiteSpace(context.Pid) ? "string.Empty" : context.Pid.ToLiteral(), string.IsNullOrWhiteSpace(context.ParentIdPrefix) ? "string.Empty" : context.ParentIdPrefix.ToLiteral(), context.SystemName.ToLiteral()); } assemblyCode.AppendFormat(@" _externalDataList.Add(new Cebos.Veyron.SharedTypes.ExternalDataDefinition({0}, dataVariables, externalDataConfigurationConnectionContextList,{1}));", externalData.ExternalDataConnectionName.ToLiteral(), "ex".ToLiteral()); }