internal static void ApplyColumnFormat(ReportColumn reportColumn, ReportColumnConditionalFormat format) { DisplayFormat columnDisplayFormat = reportColumn.ColumnDisplayFormat != null?reportColumn.ColumnDisplayFormat.AsWritable <DisplayFormat>() : new DisplayFormat(); if (format.Rules != null && format.Rules.Count > 0) { columnDisplayFormat.ColumnShowText = format.ShowValue; columnDisplayFormat.DisableDefaultFormat = format.DisableDefaultFormat; switch (format.Style) { case ConditionalFormatStyleEnum.ProgressBar: ApplyProgressFormat(reportColumn, format.Rules); break; case ConditionalFormatStyleEnum.Highlight: ApplyHighlightFormat(reportColumn, format.Rules); break; case ConditionalFormatStyleEnum.Icon: ApplyIconFormat(reportColumn, format.Rules); break; } columnDisplayFormat.Save(); reportColumn.ColumnDisplayFormat = columnDisplayFormat; } else { columnDisplayFormat.Delete(); reportColumn.ColumnDisplayFormat = null; } reportColumn.Save(); }
/// <summary> /// Tries to get the rule based on the default condition rules for the choice field column. /// </summary> /// <param name="conditionalFormat">The conditional column format.</param> /// <param name="data">The data.</param> /// <param name="ruleIndex">Index of the rule.</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> /// <exception cref="System.InvalidOperationException">Predicate has not been set of condition.</exception> public bool TryGetDefaultRule(ReportColumnConditionalFormat conditionalFormat, object data, out long ruleIndex) { if (conditionalFormat != null && conditionalFormat.Rules != null && conditionalFormat.Rules.Count > 0) { for (int i = 0; i < conditionalFormat.Rules.Count; i++) { ReportConditionalFormatRule rule = conditionalFormat.Rules[i]; if (rule.Values == null || rule.Predicate == null) { continue; } if (rule.Predicate(data)) { ruleIndex = i; return(true); } } } ruleIndex = -1; return(false); }
/// <summary> /// Builds a list of conditional format rules for the report. /// </summary> /// <returns>Dictionary{GuidList{ReportConditionalFormatRule}}.</returns> public Dictionary <string, ReportColumnConditionalFormat> FormatsForReport(out Dictionary <string, ReportImageScale> imageScaleRules) { imageScaleRules = null; if (_formatRules != null && _formatRules.Count > 0) { Dictionary <string, ReportColumnConditionalFormat> formats = new Dictionary <string, ReportColumnConditionalFormat>(_formatRules.Count); EntityRef imageScale = null; EntityRef imageSize = null; ThumbnailSizeEnum thumbnailSizeEnum = null; foreach (KeyValuePair <string, List <ConditionInfo> > formatRule in _formatRules) { ReportColumnConditionalFormat columnFormat = new ReportColumnConditionalFormat(); List <ReportConditionalFormatRule> rules = new List <ReportConditionalFormatRule>(); foreach (ConditionInfo conditionInfo in formatRule.Value) { if (rules.Count <= 0) { columnFormat.Style = conditionInfo.Style; columnFormat.ShowValue = conditionInfo.ShowText; } ReportConditionalFormatRule rule = new ReportConditionalFormatRule { Operator = conditionInfo.Operator, }; if (conditionInfo.ColorRule != null) { if (conditionInfo.ColorRule.ForegroundColor != null) { rule.ForegroundColor = new ReportConditionColor { Alpha = conditionInfo.ColorRule.ForegroundColor.A, Blue = conditionInfo.ColorRule.ForegroundColor.B, Green = conditionInfo.ColorRule.ForegroundColor.G, Red = conditionInfo.ColorRule.ForegroundColor.R }; } if (conditionInfo.ColorRule.BackgroundColor != null) { rule.BackgroundColor = new ReportConditionColor { Alpha = conditionInfo.ColorRule.BackgroundColor.A, Blue = conditionInfo.ColorRule.BackgroundColor.B, Green = conditionInfo.ColorRule.BackgroundColor.G, Red = conditionInfo.ColorRule.BackgroundColor.R }; } } if (conditionInfo.LowerBounds != null || conditionInfo.Upperbounds != null) { rule.PercentageBounds = new ReportPercentageBounds { LowerBounds = conditionInfo.LowerBounds, UpperBounds = conditionInfo.Upperbounds }; } if (conditionInfo.IconRule != null && (conditionInfo.IconRule.IconId ?? 0) > 0) { if ((conditionInfo.IconRule.CfEntityId ?? 0) > 0) { IEntity cfEntity = Entity.Get(conditionInfo.IconRule.CfEntityId.Value); var cfi = cfEntity.As <ConditionalFormatIcon>(); if (cfi != null) { rule.CfEntityId = cfi.Id; rule.ImageEntityId = cfi.CondFormatImage != null ? cfi.CondFormatImage.Id : -1; } } else { IEntity entity = Entity.Get(conditionInfo.IconRule.IconId.Value); if (entity.Is <IconFileType>()) { rule.ImageEntityId = conditionInfo.IconRule.IconId.Value; } } if (imageScale == null) { imageScale = new EntityRef("core", "scaleImageProportionally"); } if (imageSize == null) { imageSize = new EntityRef("console", "iconThumbnailSize"); } if (thumbnailSizeEnum == null) { thumbnailSizeEnum = Entity.Get <ThumbnailSizeEnum>(imageSize); } if (imageScaleRules == null) { imageScaleRules = new Dictionary <string, ReportImageScale>(); } if (!imageScaleRules.ContainsKey(formatRule.Key)) { ReportImageScale reportImageScale = new ReportImageScale { ImageScaleId = imageScale.Id, ImageSizeId = imageSize.Id, ImageWidth = thumbnailSizeEnum.ThumbnailWidth ?? 16, ImageHeight = thumbnailSizeEnum.ThumbnailHeight ?? 16 }; imageScaleRules.Add(formatRule.Key, reportImageScale); } } // Handle the values for the typed value only if this is not an icon as it has relationships if (conditionInfo.Values != null && conditionInfo.Values.Count > 0) { if (conditionInfo.Values[0].Type is ChoiceRelationshipType || conditionInfo.Values[0].Type is InlineRelationshipType || conditionInfo.Values[0].Type is StructureLevelsType) { rule.Values = ProcessConditionValues(conditionInfo.Values); // If there are no values returned then this must be a text string rather than a list of entity identifiers. if (rule.Values == null) { rule.Value = conditionInfo.Values[0].ValueString; } } else { DateTime dateTimeValue; if ((conditionInfo.Values[0].Type is DateTimeType || conditionInfo.Values[0].Type is TimeType || conditionInfo.Values[0].Type is DateType) && (DateTime.TryParse(conditionInfo.Values[0].Value.ToString(), out dateTimeValue))) { rule.Value = dateTimeValue.ToString("yyyy-MM-ddTHH:mm:ssZ"); } else { rule.Value = conditionInfo.Values[0].ValueString; } } } rules.Add(rule); } columnFormat.Rules = rules; formats.Add(formatRule.Key, columnFormat); } return(formats); } return(null); }