/// <summary> /// The parse screen definition. /// </summary> /// <param name="definition"> /// The definition. /// </param> private void ParseScreenDefinition(SBString definition) { const int ButtonDesc = 11; const int Buttons = 12; const int Fields = 15; const int ProcessesBefore = 25; const int ProcessesAfter = 26; const int IntHelp = 27; const int FieldPos = 31; const int ConversionCode = 34; const int DefaultDerived = 35; const int Validation = 36; // So far I have not found where or what this is, in the BRANCH S1 screen it looks like a hangove from rev control. const int InputConversion = 39; const int StyleName = 51; try { // fields var noFields = definition.Dcount(Fields); for (int fno = 1; fno <= noFields; fno++) { var processBefore = (definition.Dcount() >= ProcessesBefore && definition.Extract(ProcessesBefore).Dcount() >= fno) ? definition.Extract(ProcessesBefore, fno).Value : string.Empty; var processAfter = (definition.Dcount() >= ProcessesAfter && definition.Extract(ProcessesAfter).Dcount() >= fno) ? definition.Extract(ProcessesAfter, fno).Value : string.Empty; var intuitiveHelp = (definition.Dcount() >= IntHelp && definition.Extract(IntHelp).Dcount() >= fno) ? definition.Extract(IntHelp, fno).Value : string.Empty; var conversionCode = (definition.Dcount() >= ConversionCode && definition.Extract(ConversionCode).Dcount() >= fno) ? definition.Extract(ConversionCode, fno).Value : string.Empty; var fieldDefault = string.Empty; if (definition.Dcount() >= FieldPos && definition.Extract(FieldPos).Dcount() >= fno) { fieldDefault = (!string.IsNullOrEmpty(definition.Extract(FieldPos, fno).Value) && definition.Extract(FieldPos, fno).Value.Substring(0, 1).Equals("0")) ? string.Empty : definition.Extract(DefaultDerived, fno).Value; } var derived = string.Empty; if (definition.Dcount() >= FieldPos && definition.Extract(FieldPos).Dcount() >= fno) { derived = (!string.IsNullOrEmpty(definition.Extract(FieldPos, fno).Value) && definition.Extract(FieldPos, fno).Value.Substring(0, 1).Equals("0")) ? string.Empty : definition.Extract(DefaultDerived, fno).Value; } var validation = (definition.Dcount() >= Validation && definition.Extract(Validation).Dcount() >= fno) ? definition.Extract(Validation, fno).Value : string.Empty; var styleName = (definition.Dcount() >= StyleName && definition.Extract(StyleName).Dcount() >= fno) ? definition.Extract(StyleName, fno).Value : string.Empty; this.FieldDescriptions.Add( new ScreenFieldDefinition(this.FileName, definition.Extract(Fields, fno).Value) { ProcessBefore = processBefore, ProcessAfter = processAfter, IntuitiveHelp = intuitiveHelp, ConversionCode = conversionCode, FieldDefault = fieldDefault, Derived = derived, Validation = validation, StyleName = styleName }); } // Buttons var noButtons = definition.Dcount(Buttons); for (int bNo = 1; bNo <= noButtons; bNo++) { if (!definition.Extract(Buttons, bNo).IsNullOrEmpty()) { DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression( SourceDefinition.Button, SourceDefinition.Process, definition.Extract(Buttons, bNo).Value, this, "Button " + definition.Extract(ButtonDesc, bNo).Value); } } // load the list of processes if (!string.IsNullOrWhiteSpace(definition.Extract(7, 1).Value)) { DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression( SourceDefinition.Screen, SourceDefinition.Process, definition.Extract(7, 1).Value, this, "Before Screen Display"); } if (!string.IsNullOrWhiteSpace(definition.Extract(7, 2).Value)) { DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression( SourceDefinition.Screen, SourceDefinition.Process, definition.Extract(7, 2).Value, this, "After Screen Display"); } if (!string.IsNullOrWhiteSpace(definition.Extract(7, 3).Value)) { DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression( SourceDefinition.Screen, SourceDefinition.Process, definition.Extract(7, 3).Value, this, "After Read Record"); } if (!string.IsNullOrWhiteSpace(definition.Extract(7, 4).Value)) { DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression( SourceDefinition.Screen, SourceDefinition.Process, definition.Extract(7, 4).Value, this, "After Accept"); } if (!string.IsNullOrWhiteSpace(definition.Extract(7, 5).Value)) { DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression( SourceDefinition.Screen, SourceDefinition.Process, definition.Extract(7, 5).Value, this, "After Update"); } if (!string.IsNullOrWhiteSpace(definition.Extract(7, 6).Value)) { DebugViewModel.Instance.ProcessAnalysisViewModel.LoadProcessFromExpression( SourceDefinition.Screen, SourceDefinition.Process, definition.Extract(7, 6).Value, this, "If Escape"); } // Buttons } catch (Exception exception) { CustomLogger.LogException(exception, "Exception parsing screen definition"); // MessageBox.Show("Exception parsing screen definition (" + exception.Message + ")"); } }