SharePoint: фильтрация списка, содержащего папки - PullRequest
2 голосов
/ 29 апреля 2009

У меня есть библиотека документов SharePoint, которая имеет структуру папок, используемую для организации документов (но также и для управления доступом через разрешения для папок).

Документы в библиотеке обновляются каждый месяц, и мы сохраняем версию документа каждого месяца в одной и той же папке; для фильтрации используется столбец «месяц», который будет содержать такие значения, как январь 09, февраль 09 и т. д. Он выглядит следующим образом:

    Title                  Month
    -----                  -----
    SubFolder 1
    SubFolder 2
[]  Interesting Facts      Jan 09
[]  Interesting Facts      Feb 09
[]  Interesting Facts      Mar 09
[]  Fascinating Numbers    Jan 09
[]  Fascinating Numbers    Feb 09
    ...

Теперь, поскольку пользователи, как правило, больше всего интересуются «текущим» месяцем, я бы хотел, чтобы они могли применить фильтр и выбрать (скажем) 9 марта. Однако, если они делают это, используя встроенный при фильтрации он также отфильтровывает папки, и они больше не могут перемещаться по иерархии папок. Это нехорошо - я хочу, чтобы они могли перемещаться между папками с неповрежденным фильтром, чтобы им не приходилось постоянно выключать и включать его.

Я подумал, что мог бы использовать пользовательское представление (выбирая, где type = folder или month = [month]), и в той степени, в которой это работает. Однако я могу заставить его работать только в течение фиксированного месяца, в то время как мне нужно, чтобы пользователь мог выбрать месяц - возможно, с помощью раскрывающегося элемента управления на странице (а я не хочу создать 60 просмотров за 5 лет, и при этом я не хочу создавать новые представления каждый месяц).

Я думал, что возможно создать представление в коде (а не через пользовательский интерфейс), но я не смог выяснить, как получить динамическое значение (пользовательский параметр) в запросе CAML .

Любые указатели с благодарностью оценены! И, кстати, я знаю о догмате, что папки плохие и что все должно быть просто списком. Однако, рассмотрев альтернативы, я все же предпочитаю использовать папки - если смогу решить эту проблему.

Заранее спасибо.

Ответы [ 6 ]

1 голос
/ 22 июля 2009

Не могли бы вы создать тип контента, который наследуется от папки, содержащей столбец Месяц? Затем замените обычный тип содержимого папки на новый в этом списке. Установите месяц соответствующим образом, и теперь ваш фильтр будет также содержать папку.

0 голосов
/ 31 мая 2009

Я много работал с фильтрацией и SPGridView. Может быть, вы можете получить что-то от просмотра этой записи в моем моем блоге. Как я уже сказал, не знаю, поможет ли это вам, но взгляните.

0 голосов
/ 07 мая 2009

@ Gary Фильтр Controls представления DATA (мой второй ответ) фактически сохраняет иерархию папок.

При необходимости вы можете поместить его в подпапки, но в вашем случае вас интересует только показ одной правильной папки?

Что вы делаете, это используете SP-дизайнер, я не мог найти способ сделать это через обычные веб-части.

  1. перетащите библиотеку общих документов в представление «Дизайн» для страницы
  2. Нажмите на общую стрелку задачи (>) и настройте столбцы, которые вы хотите показать
  3. Все еще в обычной задаче, примените фильтр выбора. Здесь вы хотите применить фильтр к столбцу «Месяц», чтобы столбец «Месяц» совпадал с текущим месяцем / годом, верно? Фильтр предоставит вам только возможность набирать что-то, набрать текущий месяц, скажем, 09 мая, затем переключиться в режим просмотра кода
  4. Найдите общую библиотеку документов и, в частности, найдите что-то вроде: & lt; Где & gt; .... Это запрос CAML, который я упоминал ранее. Вы можете сделать HTML-декодирование целиком, чтобы оно было немного более читабельным. Но по сути, фильтр - это простой CAML-запрос. Вы хотите изменить этот запрос так, чтобы ваша комбинация месяц / год соответствовала текущему месяцу / году. В CAML есть одна функция с именем , которая возвращает месяц в следующем формате: мм / гггг (вам может потребоваться изменить формат в столбце или создать новый, чтобы упростить для себя) - ваш запрос CAML что-то вроде этого:

<Where>
 <Eq>
   <FieldRef Name='Month'/>
   <Value Type='Number'><Month/></Value>
 </Eq>
</Where>

или HTML кодируется:

&lt ;Where&gt ;&lt ;Eq&gt ;&lt ;FieldRef Name='Month'/&gt ;&lt ;Value Type='Number'&gt ;&lt ;Month/&gt ;&lt ;/Value&gt ;&lt ;/Eq&gt ;&lt ;/Where&gt ;

Ключом к этому является то, что вы создаете фильтр только на корневом уровне в представлении данных. Как только они щелкают по папке, они просто добавляются в библиотеку документов и могут просматривать все, что находится внутри папки.

Надеюсь, это поможет!

ps: в HTML-кодировке мне пришлось добавить пробелы перед ';' чтобы вы могли видеть код.

0 голосов
/ 01 мая 2009

Я думаю, что нашел ваше решение - DataWebPart - это то, что мне помогло ...

Использование этого также было огромным открытием для глаз: Просмотр данных фильтра элементов управления ASP.NET

Чтобы подвести итог, вы можете просто заполнить свой раскрывающийся список со списком месяцев и месяцев, добавить общую библиотеку Doc на страницу через представление конструктора, использовать соединение фильтра с раскрывающимся списком ASP.NET и сразу же получить фильтр в месяц. Вы также можете использовать его по умолчанию на определенную дату, используя XSL, теперь все в представлении кода:)

0 голосов
/ 01 мая 2009

У меня сейчас точно такая же проблема, вместо простой даты мне нужно отфильтровать по именам папок, а затем показать эти папки на странице. После того, как они нажмут на папку, они смогут просматривать содержимое этой папки.

Я пока не нашел хорошего решения для этого, но для вас вы можете просто создать собственный CAML-запрос с помощью contentQueryWebpart.

Примерно так: Далее настроить CQWP

Но вы бы сделали это по дате / времени папки и ничего больше.

Ваш запрос будет выглядеть примерно так:

 <![CDATA[
    <Where>
     <Gt>
       <FieldRef Name="Created" Nullable="True" Type="DateTime"/>
       <Value Type="DateTime"><Today /></Value>
     </Gt>
   </Where>
   <OrderBy>
       <FieldRef Name="Created" Nullable="True" Type="DateTime"Ascending="FALSE"/>
   </OrderBy>]]>

Я бы добавил также имя папки, которую вы ищете, чтобы убедиться, что больше ничего не возвращается.

Надеюсь, это поможет. И, пожалуйста, сделайте обратную передачу, если вы найдете другое решение.

0 голосов
/ 30 апреля 2009

Вы можете попробовать использовать DataViewWebpart, отфильтрованный по веб-части формы , чтобы сделать это. Управление отображением папок и затем элементов папок при нажатии на них будет проблемой. Наверное, это одна из причин, по которой я не использую папки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...