2016-03-24 12 views
0

OneDriveから特定のフォルダオブジェクトを取得することに喜んでいません。私はユーザーが閲覧しているフォルダに基づいてパンくずリストの軌跡を作成するようにしています。ユーザーがにクリックした場合Office 365 MyFiles API - OneドライブのID文字列を使用してFolderオブジェクトを取得する方法

var rootFiles = await spClient.Files.ExecuteAsync(); 
var files = rootFiles.CurrentPage; 

:その後、私はそうのようなルートファイルとフォルダを取得しています

var spClient = await AuthenticationHelper.EnsureSharePointClientCreatedAsync("MyFiles"); 

:私はそうのようなユーザーのルートフォルダをターゲットとしているSharePointClientをインスタンス化しています物事をキックオフする

私はそのようなフォルダとファイルをフォローしています。

var folderFiles = await spClient.Files[selectedItemID].ToFolder().Children.ExecuteAsync(); 
var files = folderFiles.CurrentPage; 

ここでselectedItemIDは、ユーザーが選択したフォルダのプロパティーのIdです。

問題は、フォルダオブジェクト自体を取得しています。私はこれらの試みのいずれかを実行した場合は、ファイルを探している間、私は、ファイルオブジェクトを取得します

// first attempt 
var folder = await spClient.Files[selectedItemID].ToFolder().ExecuteAsync(); 

// second attempt - which is the same as first attempt with use of GetById() 
var folder = await spClient.Files.GetById(selectedItemID).ToFolder().ExecuteAsync(); 

// third attempt - which is the same as second attempt without chaining 
var thisItemFetcher = spClient.Files.GetById(selectedItemID); 
var thisFolderFetcher = thisItemFetcher.ToFolder(); 
var myFolder = await thisFolderFetcher.ExecuteAsync(); 
var folder = myFolder as Microsoft.Office365.SharePoint.FileServices.Folder; 

:私は、次のいずれかを実行しようとすると

Expected a relative URL path without query or fragment. 
Parameter name: entitySetName 

:私はこのエラーを得続けます問題ない。

もちろん、私はこのエラーを調べてみましたが、どこにも行きませんでした。

私がやっていることはかなり簡単です。私に必要なのは、現在表示されているフォルダのユーザーと右のルートフォルダまでのそれぞれの親のための単純なオブジェクトのリスト

{ 
    FolderID = folder.Id, 
    FolderName = folder.Name, 
} 

を返すことです。

私はfolder.ParentReference.Idプロパティに基づいてこれを再帰的に行うことができます。

これで、ユーザーが表示しているフォルダからファイルとフォルダのリストを要求するだけの理由が考えられるかもしれません。確かに返されたファイルやフォルダに基づいて.ParentReference.Idあなたは再帰を行うことができます。その質問に対する答えはまさにそのとおりです。フォルダが空の場合はどうなりますか?

私はここにいるこの単純ではない、それほど簡単な問題に誰かが光を当てることができますか? SkyDrive Folder object docsによると

A Folder object can be returned as part of: 
/FOLDER_ID/files 
/me/skydrive/files 
/me/skydrive/shared/files 
/USER_ID/skydrive/files 
/ALBUM_ID/files 

しかし、これはまた、Office 365のOneDriveに適用されるかどうかはわかりません。

最新OneDrive APIを見てみると、彼らは完全に異なる要求構造を使用するように見える:
GET /drive/items/{item-id}

SarePointClient.DriveItemsコレクションを公開していません。

私はあなたの好奇心のために、Microsoft Office 365 My Files Library v1.0.22をOneDriveにアクセスするために使用しています。

答えて

0

文書SkyDrive Folderオブジェクトはサービスエンドポイントhttps://apis.live.netを使用しています。

文書OneDrive APIは、サービス・エンドポイントを使用している: https://api.onedrive.com/v1.0(OneDrive) またはhttps:// {テナント} -my.sharepoint.com/_api/v2.0(ビジネスのためのOneDrive)。私が述べたようにOneDrive .NET SDK 1.1.29

How to get the Folder object using Id string from One Drive

GET /ドライブ/アイテム/ {アイテムのid}

oneDriveClient.Drive.Items["{item_id}"] 
+0

私が実際に何をしています。この場合

は、あなたが最新の.NET OneDrive SDKを使用する必要がありますMS Office 365用のMyFilesライブラリを使用しています。その代わりに、ユーザーのOneDriveを「SharePointClient.Files」コレクション経由で私に公開する「SharePointClient」があります。私の質問は、具体的には、 '' OneClient.Files.GetById( "{item_id}") ''で '' oneDriveClient.Drive.Items ["{item_id}"] ''を達成する方法を尋ねます。 – iiminov

+0

@ iiminov、ドキュメントによると、Office 365 Files APIは推奨されなくなりました。 OneDriveおよびOneDrive for Business開発では、OneDrive APIを使用します。そのため、.NET OneDrive SDKの使用をお勧めします。 –

関連する問題