Как я могу фильтровать на основе поля выбора при использовании listdata.svc в SharePoint 2010?
-
16-10-2019 - |
Вопрос
У меня есть список, который я пытаюсь запросить, используя listdata.svc. Я пытаюсь отказаться от записей в диапазоне дат и с определенным значением из проверенного поля выбора. Если я использую Lists.asmx, я могу построить CAML -запрос, чтобы отодвинуть необходимые мне записи, но я хочу использовать ListData.svc для этой солиции. Я могу отфильтровать на столбцах, значения которых хранятся в списке, и я использую «$ expand», чтобы отступить данные для моего поля выбора, но я не знаю, как структурировать URI Odata для фильтрации на основе выбора поле.
Я пробую такой запрос:
http://tssites/departments/appdev/_vti_bin/ListData.svc/TeamCalendar?$expand=Flags&$filter=Flags eq 'PTO'
Ошибка, которую я возвращаю, это:
Оператор 'EQ', несовместимый с типами операндов 'System.Collections.generic.Ienumerable`1 [[[Microsoft.SharePoint.linq.dataServiceEntity, Microsoft.SharePoint.linq, версия = 14.0.0.0, культура = нейтральная, publickeytoken = 71e9bce111e9429c]]' и 'System.string' в позиции 6.
Спасибо за вашу помощь.
Решение
Он не поддерживается для многосекционных полей (то есть поля, представленные в обычном пользовательском интерфейсе в качестве флажков). Следующая цитата на 2013 год, но те же правила применяются для ListData.svc. Однако вы можете фильтровать на стороне клиента, в зависимости от того, как вы представляете данные и используемые вами элементы управления.
Запросы для многозначных полей и пользователей
Поскольку поля многозначных поисков возвращаются как строка нескольких значений, для них нет способа запросить (например, эквивалент включения элемента или элемента Notincludes не поддерживается).
http://msdn.microsoft.com/en-us/library/fp142385(v=office.15).aspx
Другие советы
Поля выбора возвращаются со значением без необходимости расширения:
Пример: IP_WorkflowStatus = IP_WorkflowStatusValue
Вот пример запроса без использования расширения:
$filter=IP_WorkflowStatusValue eq '2-Validated'
Если вы хотите использовать расширение, вам необходимо использовать расширенное соотношение обозначения поля/поля:
$filter=IP_WorkflowStatus/Value eq '2-Validated'&$expand=IP_WorkflowStatus
Получите значение поля выбора в API REST, подключив «значение» к имени поля. Например, если имя вашего поля является флагами, используйте термин FlagSValue в строке фильтра. Это работает, если поле выбора не является полевым полем.
Ваш URL должен быть похож на
http: //tssites/departments/appdev/_vti_bin/listdata.svc/teamcalendar? $ expand = flags & $ filter = flagsValue EQ 'PTO'
Есть еще одна работа по этому вопросу. Создайте рассчитанный столбец и добавьте поле выбора в качестве формулы для него. Теперь используйте рассчитанный столбец для фильтрации.
Для множества поля выбора:
Следуйте по следующим шагам.
- Добавить новый текстовый столбец по имени flagscsv
- Измените редактирование элемента списка и добавьте в него веб -часть контента. Подключите HTML -страницу к веб -части контента. (Пусть имя HTML -страницы будет Content.html и загрузите это в библиотеки, такие как SiteAsests)
- Отредактируйте Content.html и используйте jQuery, чтобы добавить события изменения в параметры флагов. Сгенерируйте разделенные запятые значения выбранных параметров множества элементов и установите его на текстовую поле FlagSCS.
- Сохраните и закройте HTML -страницу. Теперь каждый раз, когда вы редактируете элемент списка, FLAGSCSV также будет обновляться.
- Вы можете использовать поле FladSCSV для фильтрации позже в вызове отдыха.
Просто .. Если вы хотите отфильтровать поле выбора с именем «Цвет», просто дайте так:
$ filter = colorValue EQ 'Blue' & $ Expand = Color
Просто добавьте значение с именем столбца. здесь ColorValue