Beispiel #1
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;
                    }
                }
            }
        }
Beispiel #2
0
        private static async void LoadFilterAdditionalParameters(FilterDescriptorDecorator filterDescriptor, PublishedProcessWithFiltersInfo process)
        {
            try
            {
                if (string.IsNullOrEmpty(filterDescriptor.ColumnName))
                {
                    return;
                }

                var filterFormat = new FilterFormatType { MemberType = filterDescriptor.MemberType };

                if (filterDescriptor.ColumnName == Constants.CurrentStateIdColumnName)
                {
                    if (process.IsStateEnabled)
                    {
                        filterDescriptor.FilterFormatMemberType = filterFormat;
                        filterDescriptor.FilteringProcessSystemName = process.SystemName;
                        filterDescriptor.CrossRefDisplayFieldsList = Constants.Name;
                        filterDescriptor.CrossRefFieldName = Constants.CurrentStateColumnName;
                        filterDescriptor.CrossRefProcessName = Constants.StateProcessName;
                    }

                    return;
                }

                var fieldInfo = await MemberInfoRetriever.GetMemberInfoAsync(process.Id, filterDescriptor.ColumnName);
                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;
                }
            }
            catch (DataPortalException)
            {
            }
        }