0

WSS 3.0 リスト サービス

次の CAML クエリを使用して、画像ライブラリ (名前の画像) でGetListItems()を実行しています。

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

このクエリは、Uploads フォルダー内のすべてのファイルとフォルダーを正しく返します。

ただし、Uploads フォルダーに移動し、Uploads フォルダーで [ Edit Permissions ] を選択してから、[ Actions ] > [ Edit Permissions ] を選択し、確認ボックスで [ OK ] をクリックすると、このクエリは機能しなくなります。

パーミッションをまったく変更していないため、「パーミッションの編集」を選択して「親からパーミッションをコピーし、パーミッションの継承を停止」しただけなので、これがパーミッションに関連しているとは思いません。さらに、このクエリを実行してもエラー メッセージは表示されず、空の結果セットが返されるだけです。

私が試した他のこと:

  • 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);

これは、上記の状況では期待どおりに機能しませんでしたが、他のすべてのフォルダーとファイルでは機能していました。解決策は、次のように、リスト GUID の代わりにリスト名「Pictures」をGetListItemsに送信することでした。

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

更新
さらに、MSDNのドキュメントでは、Lists.GetListItem メソッドを使用する場合、リスト名の代わりに GUID を使用することを推奨しています。

listName : リストの表示名または GUID を含む文字列。中かっこ ({}) で囲む必要がある GUID を使用することをお勧めします。UserInfo テーブルをクエリすると、文字列に "UserInfo" が含まれます。

このコードが機能し、元のコードが機能しない理由がわかりません。私の問題は解決しましたが、元のコードが機能せず (上記で説明した状況のみ)、変更されたコードが機能する理由を知っている人はいますか?

4

1 に答える 1

0

そのため、十分な説明や文書化はされていませんが、さらに実験を重ねた結果、解決策が見つかりました。この問題は、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);

これは、上記の状況では期待どおりに機能しませんでしたが、他のすべてのフォルダーとファイルでは機能していました。解決策は、次のように、リスト GUID の代わりにリスト名「Pictures」をGetListItemsに送信することでした。

XmlNode returnNode = listProxy.GetListItems("Pictures", strViewID, queryNode, viewNode, _maxFolders, optionNode, null);
于 2009-10-30T15:50:06.650 に答える