Microsoft.Sharepoint.Client 名前空間のクラスを使用して SharePoint サイトを操作しています。Windows Phone 7 で作業しているため、SPFolderCollection/SPFolder クラスが見つかりません。
非表示のフォルダーとシステム フォルダー (eg_vti_pvt) を除外する必要があります。
次のような例を見つけました。
// filter the folders like “_catalogs” or “_private”
if (folder.ParentListId != Guid.Empty)
{
SPList list = web.Lists[folder.ParentListId];
//filter the folders like “Reporting Templates” or “IWConvertdForms”
if (list.Hidden == false)
( http://go4answers.webhost4life.com/Example/know-spfolder-invisible-visible-27871.aspxから取られた例)。
ただし、「SP」クラスがないため、Windows Phone に実装できません (ParentListId メソッドはありません)。
どんなアイデア/回避策も大歓迎です。
ありがとうございました。
PS注意してください、CAMLの使用は絶対に避けたいと思います。ファイルとフォルダーの URL を一覧表示して取得できれば十分です。リストや通知を操作する必要はありません。
更新 したがって、次のように制限を回避できるようです:
Foldercollection folder_assist = new FolderCollection( WHAT DO I PUT HERE??? );
ctx.Load(folders);
ctx.ExecuteQueryAsync(delegate(object sender1, ClientRequestSucceededEventArgs args)
{
foreach (Folder f in folders)
{
ctx.Load(f.ParentFolder);
}
ctx.ExecuteQuery();
foreach (Folder f in folders)
{
List ejh;
// if we are in the top folder, the .parentfolder may be null
if (f.ParentFolder != null && f.ParentFolder.Name != "")
{
ejh = ctx.Web.Lists.GetByTitle(f.ParentFolder.Name);
}
else
{
ejh = ctx.Web.Lists.GetByTitle(f.Name);
}
ctx.Load(ejh);
try
{
ctx.ExecuteQuery();
}
catch
{
ejh = null;
}
if (ejh != null)
{
if (ejh.Id != Guid.Empty)
{
if (ejh.Hidden == false)
{
folder_assist.Add(f.ServerRelativeURL;
}
}
}
}
win.Dispatcher.BeginInvoke((Action)(() => DO SOME WORK...
}, delegate(object sender1, ClientRequestFailedEventArgs args)
{
win.Dispatcher.BeginInvoke((Action)(() => MessageBox.Show("something went wrong" + args.ToString())));
});
私が今経験している問題は最初の行にあります - Microsoft.Sharepoint.FolderCollection コンストラクターにはコンテキスト (私が持っていて簡単に渡すことができます) と ObjectPath タイプが必要なようです。非表示でも特別でもないすべてのフォルダ。
これを回避するにはどうすればよいですか?
更新 2
わかりました、かなり明白な結果です。私はファシストに使用List<Folder>
しました。
しかし、私が気づいたことがさらに2つあります。
a)私のソリューションのパフォーマンスはかなりひどいです。以前はリストを取得するのに少し時間がかかっていましたが (非同期スレッドでフィルタリングしていなかったとき)、リストを取得するのに 10 ~ 20 秒かかりました (そして、サーバーにはほんの一握りのアイテムしかありません!)。
アイデア/提案はありますか?(本当の問題は、フォルダー コレクションを UI スレッドに戻して解析し、1 つずつ追加することができないことです。これは、parentFolder に対してクエリを実行する必要があるためです。また、foreach() ループ内で非同期でそれを実行しようとすると、 UI スレッドはクエリの実行を待機しないため、インスタンス化されていないオブジェクトを取得します。AutoResetEvent を使用して待機させると、UI スレッドがロックされます。また、WP7 では ClientContext.Executequery( を使用することはできません。 )UIスレッドで。残念です。)
b) アクセスするすべてのフォルダー内に「フォーム」フォルダーがまだあるようです。現在取り組んでいますが、どんなアイデアでも大歓迎です。