To copy documents across site collections in provider hosted app, we need to perform the following steps:
- Provide appropriate permissions to app
- Create client context for the source location
- Downloading document stream from source
- Create client context for the destination
- Uploading document to destination (This step is same as mentined in my previous post)
The approach I am going to display will also help if you want to create another site collection context from the existing one.
For the above scenario, please note the following points:
- App should have minimum “Write” permission on “Tenant” for the code to work as we are moving document from one site collection to another.
- I have used app-only policy. This is used as user might not have write permission on the whole tenant. The only downside is, in “Created By” field, instead of user name, it shows “SharePoint App”. I created a custom column to save actual user name.
Hope this helps. Happy coding!!
There are times when we want to know whether My Site exist for a particular user. In general, My Site is created when a user accesses the My Site (i.e. the “About Me” link) for the first time. For more details on My Site architecture check this msdn link.
Using CSOM, we can fetch a particular user’s my site link. The code for that is:
The above code returns my site url of the user but if my site does not exist then also it returns the my site host url of that user. So, in this case the url returned is something like:
This does not tell us whether my site actually exist or not unless we do some url manipulation. But there is a peroperty in the same code which returns my site relative url only if it exists and that property is PersonalSpace. This is present in UserProfileProperties of PeopleManager class.
The code to fetch that is :
This will return blank if my site does not exist else will return /personal/email_of_user
P.S. The code above could also be used in apps, just give Read permission to User Profile.