Служба рассылки 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".
Я не знаю, почему этот код работает, а оригинал - нет. Хотя моя проблема была решена, кто-нибудь знает, почему мой оригинальный код не работает (только для ситуации, описанной выше), и модифицированный код работает?