You might see that the Dropbox Community team have been busy working on some major updates to the Community itself! So, here is some info on what’s changed, what’s staying the same and what you can expect from the Dropbox Community overall.
Forum Discussion
bmilinski
5 years agoHelpful | Level 6
ParentSharedFolderId is Null when checking permissions
I previously made a program that goes through my entire team's DropBox permissions and creates a report from the data. It tells me their name, permissions for the current file/folder, the name of the current file/folder, and is supposed to share the parent folder's name. However, I am running into the issue of the "ParentSharedFolderID" being null even when I know from checking that the specified file/folder is in a parent folder. What could be causing this?
Here is my code:
private async void ButtonDebug_Click(object sender, EventArgs e)
{
ButtonDebug.Enabled = false;
//use dropbox client with access token from app console
using (DropboxTeamClient DBTeamClient = new DropboxTeamClient("MYCLIENTIDHERE"))
{
//get all the dropbox members
var members = await DBTeamClient.Team.MembersListAsync();
//loop through all members ordered by email alphabetical
foreach (var member in members.Members.OrderBy(a => a.Profile.Email))
{
int count = 0;
//get each user
var userClient = DBTeamClient.AsMember(member.Profile.TeamMemberId);
//actions to check
var actionsToCheck = new FolderAction[] { FolderAction.EditContents.Instance, FolderAction.InviteEditor.Instance };
//get each user's file information
var list = await userClient.Sharing.ListFoldersAsync(actions: actionsToCheck); // actions can optionally be supplied to check the permissions the user has for specific actions
//loop through the list of file and show permissions on folders
foreach (var item in list.Entries)
{
int length = item.AccessType.ToString().Length - 32 - 2;
System.Diagnostics.Debug.WriteLine("");
System.Diagnostics.Debug.WriteLine(member.Profile.Name.DisplayName);
System.Diagnostics.Debug.WriteLine(item.Name);
System.Diagnostics.Debug.WriteLine(item.AccessType.ToString().Substring(32, length));
string parentName = "N/A";
if (item.ParentSharedFolderId != null)
{
try
{
var parentSharedFolderMetadata = await userClient.Sharing.GetFolderMetadataAsync(item.ParentSharedFolderId);
System.Diagnostics.Debug.WriteLine(parentSharedFolderMetadata.Name);
parentName = parentSharedFolderMetadata.Name;
}
catch (DropboxException ex)
{
parentName = "N/A";
}
}
System.Diagnostics.Debug.WriteLine(count + "");
count++;
}
System.Diagnostics.Debug.WriteLine(count + " total folders");
}
}
ButtonDebug.Enabled = true;
}
I was able to solve my issue by using the following to retrieve the folder's meta data:
var itemMetaData = await userClient.Sharing.GetFolderMetadataAsync(item.SharedFolderId);
After that I got the parent folder's meta data and name from this:
var parentSharedFolderMetadata = await userClient.Sharing.GetFolderMetadataAsync(itemMetaData.ParentSharedFolderId);
parentName = parentSharedFolderMetadata.Name;
- Greg-DBDropbox Staff
I see you're calling Sharing.ListFoldersAsync to list the shared folders in the account. (By the way, make sure you check ListFoldersResult.Cursor to see if there are more entries to retrieve, in which case you should call back to ListFoldersContinueAsync.)
The ParentSharedFolderId property will only be set if the folder itself is contained inside another shared folder. Are you sure you're seeing this absent for folders insider other shared folders? I ask because you only said "the specified file/folder is in a parent folder", but not specifically that the parent folder is shared.
If that's not working properly though, please share the unexpected output you're seeing so we can take a look. You can open an API ticket if you'd prefer to share privately.
If the folder is in a non-shared parent folder and you want the path of that parent, you can retrieve it from the PathLower property. Note that that will only be present if the folder is mounted though.
- bmilinskiHelpful | Level 6
I was able to solve my issue by using the following to retrieve the folder's meta data:
var itemMetaData = await userClient.Sharing.GetFolderMetadataAsync(item.SharedFolderId);
After that I got the parent folder's meta data and name from this:
var parentSharedFolderMetadata = await userClient.Sharing.GetFolderMetadataAsync(itemMetaData.ParentSharedFolderId);
parentName = parentSharedFolderMetadata.Name;
About Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.
5,910 PostsLatest Activity: 4 days agoIf you need more help you can view your support options (expected response time for an email or ticket is 24 hours), or contact us on X or Facebook.
For more info on available support options for your Dropbox plan, see this article.
If you found the answer to your question in this Community thread, please 'like' the post to say thanks and to let us know it was useful!