/// <summary> /// Adds the given client-query to the list of queries /// </summary> /// <param parameterName="parameterExternalName">The parameterName to show to the end user</param> /// <param parameterName="table">The table descriptor that the query belongs to</param> /// <param parameterName="predicate">The predicate that defines the filter for the query</param> /// <param parameterName="parameterDefinitions">The parameter definitions defining the functionParameters to be used</param> private LiteQueryViewModel NewUserQuery(string externalName, FeatureTableDescriptor table, System.Linq.Expressions.Expression predicate, ParameterDefinitionCollection parameterDefinitions, bool addToQueries) { LiteQueryViewModel clientQuery = null; if (IsAuthenticated && Queries != null) { var predicateText = predicate != null?predicate.GeoLinqText(useInternalParameterNames : true) : null; var queryDefinition = new FeatureCollectionQueryDefinition() { ServiceProviderGroup = table.ServiceProviderGroup, Context = ServiceProviderDatumContext.User, Name = externalName.ToLower(), ExternalName = externalName, TableDescriptor = table, ParameterDefinitions = parameterDefinitions }; clientQuery = new LiteQueryViewModel(this.Messenger, queryDefinition, predicateText); if (addToQueries) { Queries.Add(clientQuery); SaveUserQueries(); } } return(clientQuery); }
/// <summary> /// Detach from the query's remove command and property change notification /// </summary> /// <param name="query">The query to detach from</param> private void DetachQuery(LiteQueryViewModel query) { if (query != null) { query.RequestRemoveQuery -= RemoveUserQuery; query.PropertyChanged -= QueryPropertyChanged; } }
/// <summary> /// Whenever a query is renamed, restore it in the sorted collection /// </summary> /// <param parameterName="query">The query that was renamed</param> private void RenamedQuery(LiteQueryViewModel query) { if (Queries != null && query != null) { // Might need to be reordered; reinsert the item Queries.Remove(query); Queries.Add(query); SaveUserQueries(); } }
/// <summary> /// Setup the datacontext for this control /// </summary> private void SetupDataContext() { _viewModel = DataContext as LiteQueryViewModel; if (_viewModel != null) { SetBinding(IsExpandedProperty, new Binding(LiteQueryViewModel.IsExpandedPropertyName) { Mode = BindingMode.TwoWay }); } UpdateVisualState(false); }
/// <summary> /// Remove the specified query /// </summary> /// <param parameterName="query">The query to remove</param> private async void RemoveUserQuery(LiteQueryViewModel query) { if (Queries != null && query != null) { var caption = ApplicationResources.QueryRemoveTitle; var removeString = string.Format(ApplicationResources.QueryRemoveStringFormat, query.ExternalName); var result = await this.MessageBoxService.ShowAsync(removeString, caption, MessageBoxButton.OKCancel, MessageBoxResult.Cancel); if (result == MessageBoxResult.OK) { Queries.Remove(query); } if (query.Query != null && query.Query.Context == ServiceProviderDatumContext.User) { SaveUserQueries(); } } }
/// <summary> /// Constructs the storage model for the specified model /// </summary> /// <param name="model"></param> public LiteUserQueryStorageModel(LiteQueryViewModel model) { var query = model.Query; var table = query.TableDescriptor; ProjectName = TransactionContext.ActiveContext.ProjectName; ProviderName = table.ServiceProviderGroup.ServiceProvider.Name; ProviderGroup = new XYServiceProviderGroupDto(table.ServiceProviderGroup, false); if (query.ParameterDefinitions != null) { ParameterDefinitions = new XYParameterDefinitionCollectionDto(query.ParameterDefinitions); } Name = model.Name; ExternalName = model.ExternalName; TableName = table.Name; PredicateText = model.Predicate; }
/// <summary> /// Converts the storage model to a QueryViewModel that can be used within Lite. /// </summary> /// <param name="messenger">The messenger the ViewModel should be connected to</param> /// <param name="sources">The sources available for resolution of the Table</param> /// <returns>A LiteQueryViewModel</returns> public async Task <LiteQueryViewModel> ToUserQueryViewModel(Messenger messenger, ServiceProviderDatumCollection <FeatureSourceDescriptor> sources) { LiteQueryViewModel result = null; if (TransactionContext.ActiveContext.ProjectName == this.ProjectName) { var serviceProvider = ServiceProviderManager.Instance.ServiceProvider(ProviderName); if (serviceProvider != null) { var group = ProviderGroup.ToServiceProviderGroup(serviceProvider); var source = sources.Find(group); if (source != null) { var table = source.TableDescriptors[TableName]; // Check the table, since it can have disappeared in the mean-time if (table != null) { // Ensure we have a table with fields and all await table.EvaluateAsync(); var parameterDefinitions = this.ParameterDefinitions.ToParameterDefinitionCollection(serviceProvider); var queryDefinition = new FeatureCollectionQueryDefinition() { ServiceProviderGroup = table.ServiceProviderGroup, Context = ServiceProviderDatumContext.User, Name = Name, ExternalName = ExternalName, TableDescriptor = table, ParameterDefinitions = parameterDefinitions }; result = new LiteQueryViewModel(messenger, queryDefinition, PredicateText); } } } } return(result); }
/// <summary> /// Track the report creation /// </summary> public static void TrackQueryCreate(LiteQueryViewModel query) { TrackEvent(Category.Data, Action.Create, query.Name); }
/// <summary> /// Track the report creation /// </summary> public static void TrackQuery(LiteQueryViewModel query, Source source) { TrackEvent(Category.Data, Action.Query, string.Format("{0} from {1}", query.Name, source.ToString())); }