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;
        }
Exemple #3
0
        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;
                    }
                }
            }
        }