how to download references from task details in ms graph?
I have the following reference from a task detail (plannerTaskDetails resource type):
https://my_domain.sharepoint.com/sites/HR2/Shared Documents/2.csv?web=1
and I want to download the file but I get:
'401 UNAUTHORIZED'
I have the following delegated permissions:
https://graph.microsoft.com/Files.Read.All
https://graph.microsoft.com/Group.Read.All
https://graph.microsoft.com/Sites.Read.All
I do not know if I have to add another permission. Any help is appreciated.
The actual value of the reference is 'https%3A//my_domain%2Esharepoint%2Ecom/sites/HR2/Shared Documents/2%2Ecsv?web=1' to get the url I have used:
from urllib.parse import unquote
url = 'https%3A//my_domain%2Esharepoint%2Ecom/sites/HR2/Shared Documents/2%2Ecsv?web=1'
sp_url = unquote(url)
sp_url
# 'https://my_domain.sharepoint.com/sites/HR2/Shared Documents/2.csv?web=1'
If I put the URL in a browser where I'm logged in I can download the file.
You can't use this url format to download the file with Microsoft Graph. The access token is for Microsoft Graph but your url is for https://my_domain.sharepoint.com.
Please refer to Download a file.
You should use GET https://graph.microsoft.com/sites/{siteId}/drive/root:/{item-path}:/content.
It will return a 302 Found response redirecting to a pre-authenticated download URL for the file. This is the same URL available through the #microsoft.graph.downloadUrl property on the DriveItem.
Then you can use this download url to download the file.
But based on my latest test, /content doesn't work for me. I'm not sure if it works for you. So there is another method here.
In your case, I assume that HR2 is a subsite under my_domain.sharepoint.com.
Then the real requests should be:
Call GET https://graph.microsoft.com/v1.0/sites/my_domain.sharepoint.com/sites to list the subsites and find the id of "HR2".
Call GET https://graph.microsoft.com/v1.0/sites/{id of "HR2"}/drive/root:/2.csv.
In the response, there is a #microsoft.graph.downloadUrl property. You can directly use that url to download the file.
If HR2 is another site collection, the requests should be:
Call GET https://graph.microsoft.com/v1.0/sites/my_domain.sharepoint.com:/sites/HR2 to get the id of "HR2".
The subsequent steps are the same as subsite.
Related
Suppose that I have the two following urls:
https://MYCOMPANY.sharepoint.com/sites/DevTeam/Shared%20Documents/Forms/AllItems.aspx
https://MYCOMPANY.sharepoint.com/sites/DevTeam/Shared%20Documents/Forms/AllItems.aspx?viewid=VIEW_ID&id=%2Fsites%2FDevTeam%2FShared%20Documents%2FGeneral
How do I "convert" them into graph api calls? Eg:
Only having the host name (MYCOMPANY.sharepoint.com) and the site name (DevTeam), how do I list all the root documents of the site drive with a graph api call?
Only having the host name (MYCOMPANY.sharepoint.com), the site name (DevTeam), an ID i'm not sure what corresponds to but that I can read in the url (VIEW_ID) and a path (DevTeam/Shared Documents/General), how di I list all the files in DevTeam/Shared Documents/General with a graph api call?
The first URL is for your site's document library. The 2nd URL is for the \General folder in that library.
To access a site given its URL, see: https://learn.microsoft.com/en-us/graph/api/site-get?view=graph-rest-1.0&tabs=http In your case, the API call would be
GET /sites/MYCOMPANY.sharepoint.com:dev/
To access the default document library ("drive") for a site, see: https://learn.microsoft.com/en-us/graph/api/drive-get?view=graph-rest-1.0&tabs=http In your case, the API call would be
GET /sites/MYCOMPANY.sharepoint.com:dev/drive
To list the files in a folder of a drive, see: https://learn.microsoft.com/en-us/graph/api/driveitem-list-children?view=graph-rest-1.0&tabs=http In your case, the API call would be
GET /sites/MYCOMPANY.sharepoint.com:dev/drive/root:/general:/children
I am making a new backend page where you should be able to download an export.
I already got the the route and the export working. If I call my export action from curl with sw-access-key I get my download: store-api/v3/_action/orderer-export/77f40024cfd448d9a90063a75dc9fb2e
How do I make the download link with auth?
Update
I added a service and created it like:
vendor/shopware/administration/Resources/app/administration/src/module/sw-import-export/service/importExport.service.js
Also changed store-api to api in my DownloadRoute.php: #RouteScope(scopes={"api"})
Now I can use this new service to call my API and the the file contents as response. Still no download.
Looking at \Shopware\Core\Content\ImportExport\Controller\ImportExportActionController::download I finally got it.
Simply add defaults={"auth_required"=false} to your route:
#Route("/api/v{version}/_action/import-export/file/download", name="api.action.import_export.file.download", defaults={"auth_required"=false}, methods={"GET"})
Security Warning: If your download contains non public information you need to add a secure token or download link. Otherwise your download is free for anyone. Shopwares own ImportExport generates download links with a token. Have a look there.
I'm trying to retrieve a document library by path using the Graph API and I'm not sure how to proceed.
The url to the library is for example the following:
https://hostname/sites/sitename/subsite/nameofdocumentlibrary/
I would like to have all the children through the Graph API. The issue: I know the document of the library but I don't know the ID of the library. It seems that it's possible to access it through the relative path but I'm not succeeding to it.
How do I do this?
My get url was the following:
/v1.0/sites/hostname:/sites/sitename/subsite/nameofdoccumentlibary/items
I'm always getting:
The provided path does not exist, or does not represent a site or UnknownError.
Any ideas ?
Try to use this:
GET https://graph.microsoft.com/v1.0/sites/{hostname},{spsite-id},{spweb-id}/lists/{list-id}
I don't check this in real life because I don't have SP Online. But it must working.
Use this link with SharePoint Graph API.
To get site id (site collection) you can go to your site collection and browse this endpoint:
https://hostname/sites/sitename/_api/site?$select=Id
To get web id (subsite) you can go to your subsite and browse this endpoint:
https://hostname/sites/sitename/subsite/_api/web?$select=Id
To get library Id you can just open Document Library Settings page. URL have library ID. You can transform it to real guid. Like this:
/_layouts/15/listedit.aspx?List=%7B603D7FA3-C801-46EB-A044-421234452901%7D
Must transformed to:
603D7FA3-C801-46EB-A044-421234452901
Following your feedback, I could now retrieve the document library using the display name (not the path in the url).
This is my request:
https://graph.microsoft.com/v1.0/sites/fullsubsiteid/lists/69369/items
69369 is my display Name here.
I can also use:
https://graph.microsoft.com/v1.0/sites/fullsubsiteid/lists/69369/drive
Now the first request, is returning an empty value array, while there is a "Documents" folder in the document library. How could I retrieve all folders/files etc in this document library? How can I use relative path?
Tx!
What is wrong with this:
https://graph.microsoft.com/v1.0/sites/insuriasa.sharepoint.com:/Sites/IFS:/drive/root/children
At the end of the day I want to be able to download this:
https://graph.microsoft.com/v1.0/sites/insuriasa.sharepoint.com:/Sites/IFS:/drive/root:/Std Forms/Discovery Invest/Servicing/change_of_contribution_form_retirement_annuity_plan.pdf
If you want to download the file content in a web application you should do a GET call on the item with ?select=#content.downloadUrl parameter. In the response you will get a pre-authenticated url in the property '#microsoft.graph.downloadUrl' on that you can do a get call without passing any extra authentication header to download the file.
If you are using in native clients then this Download Endpoint should work fine.
So let's say I have a full url into a sharepoint website.
In the past when I wanted to get the weburl and doc url, I used the "url to web url" method of the Front Page Server Extensions. (http://msdn.microsoft.com/en-us/library/ms460544.aspx).
So for example if you had a site at
http://webapp/site1/chidsite/a.doc
I want a method in CSOM that will return /site1/childsite as the weburl.
I see the Web.WebUrlFromPageUrlDirect() method in CSOM but I'm not sure I'm getting what I need back from it. In the Uri class I get back, would I use teh "AbsolutePath" property for the weburl?
What is the correct way to do this?
I also would like to get the docURL that is usually retrieved by a call to url to web url via frontpage extensions.
The fileurl will be the file location relative to the web site. So if the document is stored in the document library called "Documents", you will get a value of /Documents/file.ext.
Well, I've reverted to using the FrontPage extensions when doing URLToWebURL since I just wasn't sure what I was getting using CSOM methods. Though check the link below for answers I received elsewhere.
Information Pertaining to this issue