Showing posts with label REST. Show all posts
Showing posts with label REST. Show all posts

Saturday, February 6, 2021

Postman : Add item to SharePoint from postman using SharePoint REST api

Postman : Add item to SharePoint from postman using SharePoint REST api (Can be used to add/update items in SharePoint from external application through REST api)

 Problem statement : Leverage Postman desktop or chrome extension to make SharePoint REST api calls to add/update items in SharePoint online site


There are many articles available in internet to make READ type calls from Postman . I am not going to detail out all the basic steps to configure the Postman , rather I will be focusing on the information required to make the ADD/UPDATE type of REST api calls.

Note: I am using Postman desktop application , but you can do the same through Postman Google chrome extension as well . Postman desktop client


Step-1 : Configure app permission in SharePoint Register add-in

Step-2 : Retrieve tenant ID

Step-3 : Retrieve access token 

Step-4 : Connect SharePoint REST api to perform READ operations 

For Step 1 through 4 , I suggest this article which consists of all the details 

Additional reference article 

https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/authorization-and-authentication-of-sharepoint-add-ins

https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/complete-basic-operations-using-sharepoint-rest-endpoints


When you are confident that you are able to perform READ operations through Postman per above details , you are good to make next step to make Add/update operations , make below changes to ADD/UPDATE items in SharePoint list/libraries 


App registration 

While you register your app and provide permission level , make sure you are providing Write/Manage/FullControl types of access level , Refer to link App access level .

In my case I was trying to add a new item to SharePoint online list , I opted for below permission level , but you can provide minimum required permission as well 

<AppPermissionRequests AllowAppOnlyPolicy="true">

    <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/" Right="FullControl" />

</AppPermissionRequests>


Follow above process with new client ID and secret to record below items 

  1. Tenant ID (Bearer realm)
  2. ResourceID
  3. Client ID 
  4. Client Secret 
With all this info , as earlier make call to below REST api to retrieve access token

https://accounts.accesscontrol.windows.net/<TenantID>/tokens/OAuth/2

Copy "access_token" from the response


Next step is to try make a Write/Update type REST api call , In my case I wanted to try below REST API call to
add item to SPO list

POST https://{site_url}/_api/web/lists/GetByTitle('Test')/items Authorization: "Bearer " + accessToken Accept: "application/json;odata=verbose" Content-Type: "application/json;odata=verbose" Content-Length: {length of request body as integer} X-RequestDigest: "{form_digest_value}" { "__metadata": { "type": "SP.Data.TestListItem" }, "Title": "Test" }


As you can see we need 2 items highlighted in yellow to make this call
  1. Form digest value
  2. ListItemEntityTypeFullName - This is different for each list/Library
Retrieve "Form digest value"

We can use Postman to retrieve form digest value through below REST api call - Reference Link

https://SiteCollection/_api/contextinfo

In the header for this call you need to include

  • Accept - application/json;odata=verbose
  • Authorization - Bearer "Access token value"
Save the form digest value you receive in property " "FormDigestValue"

Retrieve "ListItemEntityTypeFullName "

Make another call as below to retrieve ListItemEntityTypeFullName 

https://SitecollectionURL/_api/web/lists/GetByTitle('ThiloshList')?$select=ListItemEntityTypeFullName

You should see a response as below , copy the value 

{
    "ListItemEntityTypeFullName": "SP.Data.ThiloshListListItem"
}


Make SharePoint REST api call to add item to SharePoint Online list 


Make REST api  POST call to 

https://SiteCollectionURL/_api/web/lists/GetByTitle('ThiloshList')/items

With below parameter in header

  1. Accept - application/json;odata=nometadata
  2. Authorization - Berer [access token]
  3. X-RequestDigest - [Form digest value previously copied]
  4. Content-Type - application/json;odata=verbose

In the Body , copy below JSON 

{
  "__metadata": {
    "type": "SP.Data.ThiloshListListItem"
  },
  "Title": "Test"
}

This will
  1. Authenticate the application
  2. Add the "test" item into "ThiloshList" SharePoint Online list


You can use same process to make any other ADD/Update SharePoint REST api calls.






Thursday, May 19, 2016

Add items to Sharepoint having multiselect Lookup through SharePoint REST


If you are trying to add the list items in the normal way using the REST you would probably get this error

"an unexpected 'primitivevalue' node was found when reading from the json reader"

This is because you would have used the wrong format of people picker or lookup field to update or add item .Below eg "spLookup" is my lookup field and is multiselect .Sharepoint creates the field named spLookupId .


function CreateListItems(){
var data = {
    __metadata: { 'type': 'SP.Data.ThiloshListItem' },
    Title: 'Create from the REST code',  
    spLookupId : { 'results': [1,2] }
};

var url = "/_api/web/lists/getbytitle('thilosh')/items";
var siteurl = "https://thilosh1224456.sharepoint.com/sites/TeamSite"
//var test = __spPageContextInfo.webAbsoluteUrl;
$.ajax({
       // url: __spPageContextInfo.webAbsoluteUrl + url,
   url : siteurl + url,
        type: "POST",
        headers: {
            "accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "content-Type": "application/json;odata=verbose"
        },
        data: JSON.stringify(data),
        success: function (data) {
            $("#resultArea").append("Item added from REST code");
        },
        error: function (error) {
            alert(JSON.stringify(error));
        }
    });
}