SharePoint Online over Microsoft Graph: sites, document libraries,
lists and list items, and per-site app grants. Credentials, clouds,
retries and errors come from microsoft-graph; files in document
libraries go through microsoft-onedrive (a library is a drive:
pass its id as opts.drive).
Namespaces
::microsoft::sharepoint::sites- root site, site by URL or path, search, subsites, libraries::microsoft::sharepoint::lists- lists, list items with field selection, create/update/delete, subscriptions::microsoft::sharepoint::permissions-Sites.Selected/Lists.SelectedOperations.Selectedapp grants
Site ids look like contoso.sharepoint.com,{site-collection-guid},{web-guid}.
Get one from sites/get-site-by-url, sites/search-sites or
sites/get-root-site, and keep it.
Quick start
::sites ::microsoft::sharepoint::sites
::items ::microsoft::onedrive::items
::content ::microsoft::onedrive::content
site ::sites/get-site-by-url("https://contoso.sharepoint.com/sites/engineering")
lib ::sites/find-drive(site.id, "Documents")
files ::items/list-all-children("root", {drive: lib.id}, 100)
doc ::content/read-document(first(files), "pdf")
Functions
get-site-by-url of ::microsoft::sharepoint::sites/get-site-by-url
fn (url: Str): Map
fn (url: Str, opts: Map): Map
GET a site from its browser URL (https://contoso.sharepoint.com/sites/eng,
or a library or page URL inside it). See parse-site-url.
site ::microsoft::sharepoint::sites/get-site-by-url("https://contoso.sharepoint.com/sites/engineering")
grant-site of ::microsoft::sharepoint::permissions/grant-site
fn (site-id: Str, app-id: Str, display-name: Str?, roles: Vec): Map
fn (site-id: Str, app-id: Str, display-name: Str?, roles: Vec, opts: Map): Map
POST /sites/{site-id}/permissions - grant app app-id (its client id)
roles on a site, for an app consented Sites.Selected. Needs
Sites.FullControl.All. Returns the permission (keep its id to
revoke).
// Run once with an admin app's credentials
grant ::microsoft::sharepoint::permissions/grant-site(site-id, "11111111-2222-3333-4444-555555555555", "Contoso Indexer", ["read"], {
client-id: admin-app-id, client-secret: admin-secret, tenant-id: "contoso.onmicrosoft.com"
})
grant.id
list-drives of ::microsoft::sharepoint::sites/list-drives
fn (site-id: Str): Vec
fn (site-id: Str, opts: Map): Vec
GET /sites/{site-id}/drives - the site's document libraries, each a
drive (id, name, webUrl, driveType: "documentLibrary"). Pass
a library's id as opts.drive to microsoft-onedrive.
list-items of ::microsoft::sharepoint::lists/list-items
fn (site-id: Str, list: Str): Map
fn (site-id: Str, list: Str, opts: Map): Map
GET /sites/{site}/lists/{list}/items - one page of items with their
fields: Graph's {value, @odata.nextLink?}. See items-query.
page ::microsoft::sharepoint::lists/list-items(site-id, "Tickets", {
fields: ["Title", "Status", "Priority"],
filter: "fields/Status eq 'Open'",
allow-non-indexed: true,
top: 50
})
map(page.value, (i) { i.fields.Title })
list-path
fn (site-id: Str, list: Str): Str
The Graph path of a list by id or display name under a site: /sites/{site}/lists/{list} (pure).
search-sites of ::microsoft::sharepoint::sites/search-sites
fn (query: Str): Vec
fn (query: Str, opts: Map): Vec
fn (query: Str, opts: Map, limit: Int?): Vec
GET /sites?search={query} - sites whose name or description matches,
all pages or at most limit. "*" lists every site the caller can
see.
hits ::microsoft::sharepoint::sites/search-sites("engineering", {}, 20)
map(hits, (s) { s.webUrl })
site-path
fn (site-id: Str): Str
The Graph path of a site by id: /sites/{encoded id} (pure). Site ids contain commas, which are encoded.