void OnCustomBuildCriteria(object sender, CustomBuildCriteriaEventArgs customBuildCriteriaEventArgs)
 {
     if (View != null && ((IModelListViewDisableFullTextForMemoFields)View.Model).DisableFullTextForMemoFields)
     {
         var filterController = Frame.GetController <FilterController>();
         var members          = removeUnlimitedSizeMembers(filterController.GetFullTextSearchProperties(), View.ObjectTypeInfo);
         customBuildCriteriaEventArgs.Criteria = new SearchCriteriaBuilder(
             View.ObjectTypeInfo,
             members,
             customBuildCriteriaEventArgs.SearchText, GroupOperatorType.Or, false).BuildCriteria();
         customBuildCriteriaEventArgs.Handled = true;
     }
 }
Пример #2
0
        void filterController_CustomBuildCriteria(object sender, CustomBuildCriteriaEventArgs e)
        {
            var filter = sender as FilterController;

            if (string.IsNullOrEmpty(e.SearchText))
            {
                e.Criteria = CriteriaOperator.Parse("1=0");
                e.Handled  = true;
                return;
            }
            string normalizedText = e.SearchText.ToUpper();

            if (View.Id == "MKB10_LookupListView")
            {
                var criteria = CriteriaOperator.Or(
                    CriteriaOperator.Parse("Iif(MKB is null, false, Contains(Upper(MKB),?))", normalizedText),
                    CriteriaOperator.Parse("Contains(Upper(NAME), ?)", normalizedText)
                    );
                e.Criteria = criteria;
                e.Handled  = true;
                return;
            }
            if (View.Id == "Kladr_LookupListView")
            {
                var criteria = CriteriaOperator.Or(
                    CriteriaOperator.Parse("Contains(Upper(Name), ?)", normalizedText)
                    );
                e.Criteria = criteria;
                e.Handled  = true;
                return;
            }
            if (View.Id == "TerritorialUsluga_LookupListView")
            {
                var criteria = CriteriaOperator.Or(
                    CriteriaOperator.Parse("Contains(Upper(Code),?)", normalizedText),
                    CriteriaOperator.Parse("Contains(Upper(Name), ?)", normalizedText)
                    );
                e.Criteria = criteria;
                e.Handled  = true;
                return;
            }
            if (View.Id == "Doctor_LookupListView" || View.Id == "Pacient_LookupListView")
            {
                var criteria = CriteriaOperator.Or(
                    CriteriaOperator.Parse("Contains(Upper(FirstName),?)", normalizedText),
                    CriteriaOperator.Parse("Contains(Upper(LastName), ?)", normalizedText),
                    CriteriaOperator.Parse("Contains(Upper(MiddleName), ?)", normalizedText),
                    CriteriaOperator.Parse("Contains(Upper(FullName), ?)", normalizedText)
                    );
                e.Criteria = criteria;
                e.Handled  = true;
                return;
            }

            if (filter != null)
            {
                var list = new List <CriteriaOperator>();
                foreach (var column in filter.View.Model.Columns)
                {
                    list.Add(CriteriaOperator.Parse(string.Format("Contains(Upper({0}), '{1}')", column.Id.ToString(), normalizedText)));
                }
                e.Criteria = CriteriaOperator.Or(list);
                e.Handled  = true;
            }
        }
Пример #3
0
        /// <summary>
        /// Формирование собственного критерия в зависимости от наличия формы и полей полнотектсового поиска в атрибуте LikeSearchPathList,
        /// а также предустановленного фильтра в модели. Этот метод теперь всегда должен работать (из-за проверок указанных вещей)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void standardFilterController_CustomBuildCriteria(object sender, CustomBuildCriteriaEventArgs e)
        {
            // 2011-12-12. Фиксация понимания алгоитма работы и взаимодействия различных поисков.
            // Стандартный полнотекстовый
            // Поиск по полям, определённым в атрибутах LikeSearchPathListAttribute
            // Поиск по одной из собственных форм поиска
            //   Если LikeSearchPathListAttribute не определён и форма собственного поиска скрыта (т.е. currentFilterId == ""),
            //      то работает чисто стандартный полнотекстовый поиск
            //   Если LikeSearchPathListAttribute определён и форма собственного поиска скрыта (т.е. currentFilterId == ""),
            //      то работает полнотекстовый поиск только по полям, определённым в атрибутах LikeSearchPathListAttribute
            //   Если форма собственного поиска явлена (т.е. currentFilterId != ""),
            //      то поиск производится исключительно по параметрам формы

            string searchText = e.SearchText;   // ((FilterController)(sender)).FullTextFilterAction.Value;

            if (standardFullTextFilterAction != null)
            {
                InitVariablesForLikeSearchPathListAttribute(searchText, out criteriaForLikeSearchPathListAttribute, out propertiesForLikeSearchPathListAttribute);
            }

            string res = "";

            ListViewClearFilter.Enabled[DO_NOT_ENABLED]          = true; // Кнопка очистки фильтра делается видимой
            FilteringCriterionListAction.Enabled[DO_NOT_ENABLED] = true;


            // Собственная форма поиска определена и открыта перед пользователем
            if (currentFilterId != "")
            {
                // Учитываем фильтр из формы фильтрации, если она определена
                if (wp != null && !string.IsNullOrEmpty(wp.CriterionString))
                {
                    res = ((res == "") ? "" : "(" + res + ")" + " AND ") + "(" + wp.CriterionString + ")";
                }

                // Добавляем неизбежную нагрузку из модели

                // Фильтр из ListView в модели: listViewCriteria - присоединяем через AND
                if (!string.IsNullOrEmpty(listViewCriteria))
                {
                    res = ((res == "") ? "" : "(" + res + ")" + " AND ") + "(" + listViewCriteria + ")";
                }

                // Учитываем фильтры из коллекции фильтров в модели
                if (standardSetFilterAction != null && standardSetFilterAction.SelectedItem != null && standardSetFilterAction.SelectedItem.Data != null)
                {
                    if (!string.IsNullOrEmpty(standardSetFilterAction.SelectedItem.Data.ToString()))
                    {
                        res = "(" + res + ")" + " AND " + "(" + standardSetFilterAction.SelectedItem.Data.ToString() + ")";
                    }
                }

                criteriaBuilderString = res;

                e.Criteria = View.ObjectSpace.ParseCriteria(res);

                // Настраиваем видимости объектов на форме
                FilteringCriterionListAction.Enabled[DO_NOT_ENABLED] = true;
                ListViewApplyFilter.Enabled[DO_NOT_ENABLED]          = false;

                ListViewClearFilter.Enabled[DO_NOT_ENABLED] = false;
                //ListViewApplyFilter.Enabled[DO_NOT_ENABLED] = true;

                // Скрытие панели с фильтром
                //FilterPanelHide();

                e.Handled = true;
                return;
            }

            /*
             * // Собственная форма поиска не явлена
             *
             * // Анализ атрибута LikeSearchPathListAttribute
             * res = criteriaForLikeSearchPathListAttribute;
             *
             * // Если свой атрибут определён и заполнен, ищем только по полям заданным в атрибуте, которых может быть несколько
             * if (!string.IsNullOrEmpty(res)) {
             *
             *  // Список полей, которые сам контроллер поиска обнаруживает:
             *  // Работает, но не нужен в данном случае по соглашению об алгоритме работы контроллера
             *  //foreach (string propName in standardFilterController.GetFullTextSearchProperties()) {
             *  //    res += ((res == "") ? "" : " OR ") + "(" + propName + " like '%" + searchText + "%'" + ")";
             *  //}
             *
             *  // Добавляем неизбежную нагрузку из модели
             *
             *  // Фильтр из ListView в модели: listViewCriteria - присоединяем через AND
             *  if (!string.IsNullOrEmpty(listViewCriteria)) {
             *      res = ((res == "") ? "" : "(" + res + ")" + " AND ") + "(" + listViewCriteria + ")";
             *  }
             *
             *  // Учитываем фильтры из коллекции фильтров в модели
             *  if (standardSetFilterAction != null && standardSetFilterAction.SelectedItem != null && standardSetFilterAction.SelectedItem.Data != null) {
             *      if (!string.IsNullOrEmpty(standardSetFilterAction.SelectedItem.Data.ToString()))
             *          res = "(" + res + ")" + " AND " + "(" + standardSetFilterAction.SelectedItem.Data.ToString() + ")";
             *  }
             *
             *  //// Учитываем фильтр из формы фильтрации, если она определена
             *  //if (wp != null && !string.IsNullOrEmpty(wp.CriterionString)) {
             *  //    res = ((res == "") ? "" : "(" + res + ")" + " AND ") + "(" + wp.CriterionString + ")";
             *  //}
             *
             *  e.Criteria = CriteriaOperator.Parse(res);
             *
             *  // Настраиваем видимости объектов на форме
             *  FilteringCriterionListAction.Enabled[DO_NOT_ENABLED] = false;
             *  ListViewApplyFilter.Enabled[DO_NOT_ENABLED] = false;
             *
             *  ListViewClearFilter.Enabled[DO_NOT_ENABLED] = true;
             *  //ListViewApplyFilter.Enabled[DO_NOT_ENABLED] = true;
             *
             *  e.Handled = true;
             * }
             */
        }