WSS GetListItems не возвращает папки без унаследованных разрешений при вызове с GUID - PullRequest
0 голосов
/ 30 октября 2009

Служба рассылки WSS 3.0

Я выполняю GetListItems () в библиотеке изображений (имя Pictures), используя следующий запрос CAML:

<Query>
</Query>
<ViewFields>
  <FieldRef Name="EncodedAbsUrl"/>
  <FieldRef Name="Title"/>
  <FieldRef Name="ContentType"/>
</ViewFields>
<QueryOptions>
  <Folder>Pictures\Uploads</Folder>
  <ViewAttributes Scope="RecursiveAll"/>
</QueryOptions>

Этот запрос корректно возвращает все файлы и папки в папке «Uploads».

Однако, если я перейду в папку «Загрузка» и выберу Изменить разрешения в папке загрузки, затем выберите Действия > Изменить разрешения и затем нажмите ОК в окне подтверждения этот запрос больше не работает.

Я не верю, что это связано с разрешениями, потому что я совсем не изменил разрешения, я просто «скопировал [ied] разрешения от родителя, а затем остановил [ped] наследование разрешений», выбрав Изменить разрешения . Кроме того, Я не получаю сообщение об ошибке при выполнении этого запроса, Я просто получаю пустой набор результатов.

Другие вещи, которые я пробовал:

  • Удаление всех тегов в QueryOptions: Это по-прежнему не возвращает папку «Uploads» или любой файл или папку в ней
  • Добавление разрешений прямо в папку для моей учетной записи: это не помогает
  • Поиск чего-либо с похожей проблемой или каким-то другим решением: безрезультатно

Другая информация:

  • Вызов этого из C # Win Form App

Кто-нибудь знает, как это исправить или обойти это? Если требуется более подробная информация или уточнение, пожалуйста, дайте мне знать.

Так что после еще нескольких экспериментов решение было найдено, хотя и не было хорошо объяснено или задокументировано. Проблема была связана с тем, как вызывается функция GetListItems , вот код, который работал некорректно:

System.Xml.XmlNode ndListView = listProxy.GetListAndView("Pictures", "");
string strListID = ndListView.ChildNodes[0].Attributes["Name"].Value;
XmlNode returnNode = listProxy.GetListItems(strListID, strViewID, queryNode, viewNode, _maxFolders, optionNode, null);

Это не сработало, как ожидалось, для ситуации, описанной выше, однако, оно работало для всех остальных папок и файлов. Решением было отправить GetListItems имя списка "Pictures" вместо GUID списка, например, так:

XmlNode returnNode = listProxy.GetListItems("Pictures", strViewID, queryNode, viewNode, _maxFolders, optionNode, null);

Update
Кроме того, MSDN документация рекомендует использовать GUID вместо имени списка при использовании метода Lists.GetListItem:

listName : строка, содержащая либо отображаемое имя или GUID для список. Рекомендуется использовать GUID, который должен быть окружен Фигурные скобки ({}). При запросе Таблица UserInfo, строка содержит "UserInfo".

Я не знаю, почему этот код работает, а оригинал - нет. Хотя моя проблема была решена, кто-нибудь знает, почему мой оригинальный код не работает (только для ситуации, описанной выше), и модифицированный код работает?

1 Ответ

0 голосов
/ 30 октября 2009

Таким образом, после еще нескольких экспериментов решение было найдено, хотя и недостаточно хорошо объяснено или задокументировано. Проблема была связана с тем, как вызывается функция GetListItems , вот код, который работал некорректно:

System.Xml.XmlNode ndListView = listProxy.GetListAndView("Pictures", "");
string strListID = ndListView.ChildNodes[0].Attributes["Name"].Value;
XmlNode returnNode = listProxy.GetListItems(strListID, strViewID, queryNode, viewNode, _maxFolders, optionNode, null);

Это не сработало, как ожидалось, для ситуации, описанной выше, однако, оно работало для всех остальных папок и файлов. Решением было отправить GetListItems имя списка "Pictures" вместо GUID списка, например, так:

XmlNode returnNode = listProxy.GetListItems("Pictures", strViewID, queryNode, viewNode, _maxFolders, optionNode, null);
...