public static IFieldInfo Create(PropertyInfo prop, IEditableRoot editableRoot, IField field, object rawValue, IValidationContext validationContext) { var customAttr = prop.GetCustomAttribute<CommonSettingsAttribute>(); var promptAttr = prop.GetCustomAttribute<PromptAttribute>(); var docAttr = prop.GetCustomAttribute<DocumentationAttribute>(); var fieldTypeAttr = prop.GetCustomAttribute<FieldTypeAttribute>(); var hasCalculatedAttr = prop.GetCustomAttributes(typeof(CalculatedAttribute), false).Any(); var hasDefaultExpressionAttr = prop.GetCustomAttributes(typeof(HasDefaultExpressionAttribute), false).Any(); //Set common properties var fieldInfo = CreateFieldInfo(fieldTypeAttr.ColumnType, prop, rawValue, editableRoot); fieldInfo.Id = editableRoot.Id; fieldInfo.SystemName = field.SystemName; fieldInfo.DisplayName = customAttr.Name; fieldInfo.Width = customAttr.Width; fieldInfo.CanRead = editableRoot.CanReadProperty(prop.Name); fieldInfo.IsRequired = validationContext != null && validationContext.IsRequired(editableRoot.ProcessName, field.SystemName, editableRoot.GetCurrentStateGuid()); fieldInfo.CanRead = editableRoot.CanReadProperty(prop.Name); fieldInfo.CanWrite = editableRoot.CanWriteProperty(prop.Name) && !hasCalculatedAttr; fieldInfo.BackColor = GetBackColor(editableRoot, prop); fieldInfo.Prompt = promptAttr == null ? string.Format(CultureInfo.InvariantCulture, LanguageService.Translate("Tooltip_EnterPrompt"), customAttr.Name) : promptAttr.PromptString; fieldInfo.IsDocumentationAvailable = docAttr != null; if (hasCalculatedAttr || hasDefaultExpressionAttr) { fieldInfo.ExpressionType = hasCalculatedAttr ? FieldExpressionType.Calculated : FieldExpressionType.Default; fieldInfo.Expression = GetExpression(editableRoot, prop); } // docAttr == null ? string.Empty : ClrUnicodeConverter.ToText(docAttr.DocumentationBody), return fieldInfo; }
private static DetailsCommandResult CreateDetailsResult(IEditableRoot editableRoot) { var result = new DetailsCommandResult { Id = editableRoot.Id, DisplayName = editableRoot.ProcessDisplayName, IsTabbedUI = IsTabbedUI(editableRoot) }; var visibleFields = new HashSet<string>(editableRoot.Sections.SelectMany(s => s.Fields).Where(f => !f.IsHidden).Select(f => f.SystemName)); var validationContext = editableRoot.GetValidationContext(); foreach (var sect in editableRoot.Sections) { var section = new SectionInfo { Name = sect.Name }; var row = new RowInfo(); var rowLength = 0d; foreach (var field in sect.Fields) { var prop = editableRoot.GetPropertyByName(field.SystemName); if (!visibleFields.Contains(prop.Name)) { continue; } var fieldInfo = FieldInfoFactory.Create(prop, editableRoot, field, GetValue(prop, editableRoot), validationContext); if (rowLength + fieldInfo.Width > 100) { if (row.Fields.Any()) section.Rows.Add(row); row = new RowInfo(); rowLength = fieldInfo.Width >= 100 ? 100 : fieldInfo.Width; } else rowLength += fieldInfo.Width; row.Fields.Add(fieldInfo); } if (row.Fields.Any()) section.Rows.Add(row); if (section.Rows.Any()) result.Sections.Add(section); } result.States = new List<IStateInfo>(); var supportStates = editableRoot as ISupportStates; if (supportStates != null) { foreach (var s in supportStates.StateManager.States) { result.States.Add(new StateInfo(s.Name, s.Guid)); } } result.CurrentStateGuid = editableRoot.GetCurrentStateGuid(); return result; }