/// <summary> /// Fills the listbox with script editor caller + data fields, calc fields, params and report fields.. /// </summary> /// <param name="report">The report.</param> /// <param name="ds">The data source to get dbfields from.</param> /// <param name="contextKind">The context kind.</param> public void FillWithFields(C1FlexReport report, DataSource ds, ScriptEditorContextKind contextKind) { this.BeginUpdate(); this.Items.Clear(); ScriptValueList.FillListWithFields(this.Items, report, ds, contextKind, false); this.EndUpdate(); }
/// <summary> /// Try to guess the context name for custom Map field. /// </summary> /// <returns>true, if it's the context name for custom Map field; otherwise, false.</returns> /// <remarks> /// Wrap all codes for custom Map field here to bypass the type checking, if the CustomField assembly is inavailable.. /// </remarks> private static bool GuessCustomMapContextName(C1FlexReport report, object @object, string propertyName, out string dsName, out ScriptEditorContextKind kind) { if (@object is Maps.MapOwnedItemBase) { if (propertyName == "DataSourceFilterExpression") { dsName = report.DataSourceName; kind = ScriptEditorContextKind.DataHandler; } else { kind = ScriptEditorContextKind.ReportScript; if (@object is Maps.LayerBase) { var layer = (Maps.LayerBase)@object; dsName = string.IsNullOrEmpty(layer.DataSource) ? report.DataSourceName : layer.DataSource; } else if (@object is Maps.ILayerReferencedItem) { var layer = ((Maps.ILayerReferencedItem)@object).Layer; dsName = (layer == null || string.IsNullOrEmpty(layer.DataSource)) ? report.DataSourceName : layer.DataSource; } else { dsName = report.DataSourceName; } } return(true); } else { dsName = report.DataSourceName; kind = ScriptEditorContextKind.ReportScript; return(false); } }
public static string MakeContextName(string dataSourceName, ScriptEditorContextKind kind) { dataSourceName = dataSourceName ?? string.Empty; switch (kind) { case ScriptEditorContextKind.DataHandler: return(dataSourceName + "_data"); case ScriptEditorContextKind.ReportScript: return(dataSourceName + "_rep"); case ScriptEditorContextKind.DataView: return(dataSourceName + "_DataView"); case ScriptEditorContextKind.MetaView: return("_MetaView"); default: System.Diagnostics.Debug.Assert(false); return(null); } }
public static void FillListWithFields(IList list, C1FlexReport report, DataSource ds, ScriptEditorContextKind contextKind, bool imageFieldsToo) { list.Add(ScriptValueList.ScriptEditorItem.One); if (ds != null) { // In 'meta view', db fields are added as strings rather than as expressions: bool metaView = contextKind == ScriptEditorContextKind.MetaView; // todo: maybe draw an icon for image fields? if (ds.IsDataSourceInfoFetched) { var info = ds.DataSourceInfo; if (info.TextFields.Count > 0 || (imageFieldsToo && info.ImageFields.Count > 0)) { list.Add(new ScriptValueList.LabelItem(Strings.Common.DbFields)); } info.TextFields.Select(tf_ => new ScriptValueList.ValueItem(tf_.Name, !metaView)).ToList().ForEach(v_ => list.Add(v_)); if (imageFieldsToo) { info.ImageFields.Select(tf_ => new ScriptValueList.ValueItem(tf_.Name, !metaView)).ToList().ForEach(v_ => list.Add(v_)); } } var cfs = ds.CalculatedFields.Select(f_ => f_.Name).Where(s_ => !string.IsNullOrEmpty(s_)); if (cfs.Count() > 0) { list.Add(new ScriptValueList.LabelItem(Strings.Common.CalcFields)); cfs.Select(cf_ => new ScriptValueList.ValueItem(cf_, !metaView)).ToList().ForEach(v_ => list.Add(v_)); } } if (report.Parameters.Count > 0) { list.Add(new ScriptValueList.LabelItem(Strings.Common.ReportParams)); report.Parameters.Select(p_ => new ScriptValueList.ValueItem(p_.Name, true)).ToList().ForEach(v_ => list.Add(v_)); } if (contextKind == ScriptEditorContextKind.ReportScript && report.Fields.Count > 0) { list.Add(new ScriptValueList.LabelItem(Strings.Common.ReportFields)); report.Fields.Select(f_ => new ScriptValueList.ValueItem(f_.Name, true)).ToList().ForEach(v_ => list.Add(v_)); } }
/// <summary> /// Use this method to reasonably accurately guess context name (i.e. data source and kind) /// based on the object on which a property is going to be edited. /// For use in type converters/ui editors. /// Note that if item type is not recognized, it defaults to ReportScript - so no need /// to add specific support for report script items. /// </summary> /// <param name="object"></param> /// <returns></returns> /// <seealso cref="MakeContextName"/> public static void GuessContextName(C1FlexReport report, object @object, string propertyName, out string dsName, out ScriptEditorContextKind kind) { if (report == null || @object == null) { dsName = null; kind = ScriptEditorContextKind.ReportScript; } else if (@object is DataSource) { dsName = ((DataSource)@object).Name; if (propertyName == "Filter") { if (((DataSource)@object).FilterSyntax == FilterExpressionSyntax.DataView) { kind = ScriptEditorContextKind.DataView; } else { kind = ScriptEditorContextKind.DataHandler; } } else { kind = ScriptEditorContextKind.DataHandler; } } else if (@object is ReportParameter) { dsName = report.DataSourceName; kind = ScriptEditorContextKind.DataHandler; } else if (@object is CalculatedField) { dsName = ((CalculatedField)@object).DataSource.Name; kind = ScriptEditorContextKind.DataHandler; } else if (@object is SortDefinition) { if (propertyName == "Expression") { dsName = null; kind = ScriptEditorContextKind.MetaView; } else // is an 'else' possible? { dsName = ((SortDefinition)@object).Owner.Owner.Name; kind = ScriptEditorContextKind.DataHandler; } } else if (@object is Group) { dsName = ((Group)@object).ParentReport.DataSourceName; kind = ScriptEditorContextKind.DataHandler; } else if (@object is ChartField) { if (propertyName == "FilterExpression") { dsName = ((ChartField)@object).DataSource; kind = ScriptEditorContextKind.DataHandler; } else { dsName = report.DataSourceName; kind = ScriptEditorContextKind.ReportScript; } } else if (@object is FlexChartFieldBase) { kind = ScriptEditorContextKind.DataHandler; dsName = GetDataSourceName((FlexChartFieldBase)@object, report); } else if (@object is FCF.Series) { kind = ScriptEditorContextKind.DataHandler; if (!string.IsNullOrEmpty(((FCF.Series)@object).DataSourceName)) { dsName = ((FCF.Series)@object).DataSourceName; } else { dsName = GetDataSourceName(((FCF.Series)@object).Field, report); } } else if (@object is FCF.ChartObject) { kind = ScriptEditorContextKind.DataHandler; dsName = GetDataSourceName(((FCF.ChartObject)@object).Field, report); } /*else if (@object is ReportLinkTargetBookmark) * { * ReportLinkTargetBookmark rltb = (ReportLinkTargetBookmark)@object; * if (rltb.) * }*/ #if MAP else if (@object is IMapObject) { var mapObject = @object as IMapObject; var template = GetParent <MapTemplate>(mapObject); var spatialData = GetParent <MapSpatialData>(mapObject); var layerData = GetParent <MapLayerData>(mapObject); var vectorLayerBase = GetParent <MapVectorsLayerBase>(mapObject); if (vectorLayerBase == null) { // properties not in vector layer dsName = report.DataSourceName; } else if (layerData != null) { // properties in layer data if (propertyName == "DataSourceName" || propertyName == "DataSourceFilter") { dsName = report.DataSourceName; } else { dsName = layerData.DataSourceName.ToString(); if (string.IsNullOrEmpty(dsName)) { dsName = report.DataSourceName; } } } else if (spatialData != null && template == null) { // properties of SpatialData dsName = report.DataSourceName; } else { // properties in vector layer if (vectorLayerBase.LayerData == null) { dsName = report.DataSourceName; } else { dsName = vectorLayerBase.LayerData.DataSourceName.ToString(); if (string.IsNullOrEmpty(dsName)) { dsName = report.DataSourceName; } } } kind = (propertyName == "ItemFilter" || propertyName == "DataSourceFilter") ? ScriptEditorContextKind.DataHandler : ScriptEditorContextKind.ReportScript; } #endif // otherwise, first try to guess custom Map field, // the default is report script / main data source: else { if (!MainForm.CustomFieldsAssemblyAvailable || !GuessCustomMapContextName(report, @object, propertyName, out dsName, out kind)) { dsName = report.DataSourceName; kind = ScriptEditorContextKind.ReportScript; } } }