private void LoadStates(EditorCreatedEventArgs e) { var viewModel = DataContext as IProcessFiltersTabViewModel; if (viewModel == null) { return; } var process = viewModel.Model; if (process == null) { return; } var comboBox = e.Editor.FindChildByType<RadComboBox>(); if (comboBox != null) { var infoList = new CustomInfoList(); foreach (var state in process.StateList.OrderBy(s => s.Name)) { infoList.Add(new StateInfoClass { Id = state.Id, Guid = state.Guid, Name = state.Name }); } dataFilter.Tag = true; comboBox.ItemsSource = infoList; comboBox.SelectedValuePath = "Guid"; comboBox.DisplayMemberPath = Constants.Name; Observable.FromEventPattern<SelectionChangedEventHandler, SelectionChangedEventArgs>( handler => comboBox.SelectionChanged += handler, handler => comboBox.SelectionChanged -= handler).SubscribeWeakly(this, OnComboBoxSelectionChanged); var weakListener = new WeakEventListener<ProcessFilterDetailsView, FrameworkElement, DependencyPropertyChangedEventArgs>(this, comboBox); comboBox.DataContextChanged += weakListener.OnEvent; weakListener.OnEventAction = OnStateComboBoxDataContextChanged; weakListener.OnDetachAction = DetachFromDataContextChangedEvent; } }
/// <summary>The setup cross ref options. Called from Process Builder.</summary> /// <param name="vm">The SimpleFilterViewModel.</param> /// <param name="model">The model.</param> public void SetupCrossRefOptions(SimpleFilterViewModel vm, ProcessEdit model) { if (vm == null || model == null || vm.SelectedMember == null) { return; } var propertyDefinition = (FieldPathPropertyDefinition)vm.SelectedMember.ItemPropertyDefinition; if (propertyDefinition.ColumnType != ColumnTypes.Reference && propertyDefinition.ColumnType != ColumnTypes.MultiReference) { return; } IsPublished = false; if (propertyDefinition.PropertyName == Constants.CurrentStateGuidColumnName) { var states = new CustomInfoList(); states.AddRange( model.StateList.OrderBy(s => s.Name).Select(state => new StateInfoClass { Id = state.Id, Name = state.Name, Guid = state.Guid })); FilteringProcessSystemName = null; CrossRefDisplayFieldsList = Constants.Name; CrossRefItems = states; CrossRefProcessName = Constants.StateProcessName; CrossRefAllowMultiple = false; return; } CrossRefFieldName = propertyDefinition.SystemName; CrossRefDisplayFieldsList = propertyDefinition.ReferencedFieldSystemName; CrossRefAllowMultiple = propertyDefinition.AllowMultiple; CrossRefProcessName = propertyDefinition.ReferencedProcessSystemName; }
private static async void LoadFilterAdditionalParameters(FilterDescriptorDecorator filterDescriptor, IProcessEdit process) { if (string.IsNullOrEmpty(filterDescriptor.ColumnName)) { return; } var filterFormat = new FilterFormatType { MemberType = filterDescriptor.MemberType }; if (filterDescriptor.ColumnName == Constants.CurrentStateIdColumnName) { filterDescriptor.FilteringProcessSystemName = process.SystemName; filterDescriptor.FilterFormatMemberType = filterFormat; filterDescriptor.CrossRefProcessName = Constants.StateProcessName; filterDescriptor.CrossRefDisplayFieldsList = Constants.Name; filterDescriptor.CrossRefFieldName = Constants.CurrentStateColumnName; return; } if (Constants.CurrentStateGuidColumnName.Equals(filterDescriptor.ColumnName)) { var states = new CustomInfoList(); states.AddRange( process.StateList.OrderBy(s => s.Name).Select(state => new StateInfoClass { Id = state.Id, Name = state.Name, Guid = state.Guid })); filterDescriptor.FilteringProcessSystemName = null; filterDescriptor.FilterFormatMemberType = filterFormat; filterDescriptor.CrossRefItems = states; filterDescriptor.CrossRefDisplayFieldsList = Constants.Name; filterDescriptor.CrossRefFieldName = Constants.CurrentStateColumnName; filterDescriptor.ItemsRetriever = new FilterValueEditorProcessStatesRetriever(process); filterDescriptor.CrossRefProcessName = Constants.StateProcessName; return; } var fieldNames = filterDescriptor.ColumnName.Split(new[] { Constants.FilterDescriptorMemberSeparator }, StringSplitOptions.None); FieldEdit field = null; foreach (var fieldEdit in process.GetAllFields()) { var fieldName = fieldEdit.SystemName; if (fieldNames.Length == 1 && IsFilteredById(fieldEdit)) { fieldName = fieldName + "Id"; } if (fieldName == fieldNames[0]) { field = fieldEdit; break; } } if (field == null) { return; } if (fieldNames.Length == 1) { if (field.ColumnType == ColumnTypes.DateTime) { var dateTimeFormat = GetDateTimeFormat(field); if (dateTimeFormat != null) { filterFormat.FormatType = dateTimeFormat.ToString(); } } filterDescriptor.FilteringProcessSystemName = process.SystemName; filterDescriptor.FilterFormatMemberType = filterFormat; var referencedProcessId = GetReferencedProcessId(field); if (referencedProcessId != null) { filterDescriptor.CrossRefDisplayFieldsList = GetDisplayFieldName(field); filterDescriptor.CrossRefFieldName = field.SystemName; PublishedProcessInfo.BeginGetProcessInfo( referencedProcessId.Value, (sender, result) => { if (result.Error == null) filterDescriptor.CrossRefProcessName = result.Object.SystemName; }); } } else { var referencedProcessId = GetReferencedProcessId(field); if (referencedProcessId != null) { var fieldPath = string.Join(Constants.FilterDescriptorMemberSeparator, fieldNames.Skip(1)); var fieldInfo = await MemberInfoRetriever.GetMemberInfoAsync(referencedProcessId.Value, fieldPath); if (fieldInfo == null) { return; } if (fieldInfo.ColumnType == ColumnTypes.DateTime && fieldInfo.DateTimeFormat != null) { filterFormat.FormatType = fieldInfo.DateTimeFormat.ToString(); } filterDescriptor.FilteringProcessSystemName = fieldInfo.DefinedIn; filterDescriptor.FilterFormatMemberType = filterFormat; if (!string.IsNullOrEmpty(fieldInfo.ReferencedProcessSystemName)) { filterDescriptor.CrossRefDisplayFieldsList = fieldInfo.ReferencedFieldSystemName; filterDescriptor.CrossRefFieldName = fieldInfo.SystemName; filterDescriptor.CrossRefProcessName = fieldInfo.ReferencedProcessSystemName; } } } }