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; } } } }
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) { } }