How to use SearchAsync to get a sub-folder ID from its name?
Dave-Lowndes opened this issue · comments
This is what I've tried so far - but it returns no results (the folder name does exist under the parent):
var items = await actor.SearchManager.SearchAsync( limit: 2, ancestorFolderIds: new List<string>() { parentFolderId }, type: "folder", scope: "user_content", keyword: folderName );
What am I doing wrong?
I just verified in both .net sdk and raw api level, a call to search folders under a folder is working
Please find below for my example
here is my raw api call
curl -X GET
'https://api.box.com/2.0/search?query=tmp&type=folder&ancestor_folder_ids=3567150497&scope=user_content'
-H 'authorization: Bearer TOKEN'
-H 'cache-control: no-cache'
-H 'postman-token: 2f854161-1aa1-2210-be69-7fbb859d7107'
Not sure why is not working for you, maybe the permission or is a shared folder? I need more context
Thanks @coolboy, I don't know what was wrong when I initially tried this (as I now get results), but I now find that it's returning sub-sub-folders, when I only wanted to get a single immediate child folder of the parent. Is there any way of restricting the search to just the immediate children of the parent?
After more testing, it seems that I'm actually only getting results when performing the search with an admin user - a normal user returns nothing.
Seeing that the same normal user account can get the folder items using FoldersManager.GetFolderItemsAsync (and then enumerate those to find the folder Id that matches the name), this search restriction seems odd, but perhaps understandable depending on it's underlying implementation.
I guess I'll have to stick with the slow FoldersManager.GetFolderItemsAsync method.
Sure, and you can find more information here -> https://developer.box.com/reference#searching-for-content
Just updated the link, not sure why it's not working on other token, maybe permission related, did the user has full access to the folder you are trying to search for?
How does the information you linked relate to SearchAsync?
Sorry too many things on my plate and get the wrong link.
See my updated response above, or this maybe internal wrong implementation in search, but I could not tell unless I know your account setup/context
@coolboy
Thanks for the updated link, I see mentioned there a significant limitation I wasn't aware of: "If an item is added to Box then it becomes accessible through the search endpoint after ten minutes."; which wouldn't be appropriate for our use, so I'll give up on it now.
It is unfortunate that there isn't a direct (and one would hope faster) way of getting a folder ID from a folder name than FoldersManager.GetFolderItemsAsync.
We are going to have get file/folder by path API coming soon FYI
We are going to have get file/folder by path API coming soon FYI
@coolboy any updates regarding this ?
@Maxwe11 The Get By Path API is not yet stable, but we will be adding it to this SDK when it is released.
@mattwiller is this available, yet?
@Maxwe11 The Get By Path API is not yet stable, but we will be adding it to this SDK when it is released.
@thesimmermon The Get By Path API is still not considered stable, so we're not yet planning to add it to the SDK. We'll add it in shortly after the API is made generally available!
@mattwiller @coolboy Is there any update on if/when the Get By Path API will be available? We have a use case where we have hundreds of thousands of folders in one folder, and need to get the folder id of one of those folders in order to process an upload. Using the search API doesn't work for us because it takes ten minutes for new folders to be indexed, and iterating through folders is taking a long time because of the number of folders to search through. In our tests it's taking upwards of 7 minutes to find the folder we are looking for, which is way too long for our needs (a user would be uploading a small file and waiting upwards of 7 minutes for it to finish, where the actual transfer of the file takes maybe 1 second). We really need a quick way to retrieve a folder id based on the path.