Friday, August 2, 2019

SharePoint Hosted Apps REST API CRUD operations

CRUD operations using the REST API - SharePoint Hosted Apps 


'use strict';
var listName = "MyList";
var UpdateItemID = 0;
var createGo = true;
$(document).ready(function () {
    Read();
});

   

$(document).on("click", ".renameDeleteAnItem", function () {

    var btnType = $(this).attr("value");
    if (btnType == "Edit") {
        UpdateItemID = $(this).attr("Id");
        $("#txtTitle").val($(this).closest('tr').find('.itemTitle').text());
        // $("#txtName").val($(this).closest('tr').find('.itemName').text());

    }
    else if (btnType == "Delete") {      
        var url = _spPageContextInfo.webAbsoluteUrl;
        var itemId = $(this).attr("Id");
        Delete(itemId);
    }

});


function Create() {    
    var url = _spPageContextInfo.siteAbsoluteUrl;
    var title = $('#txtTitle').val();

    createListItemWithDetails(listName, url, title, function () {
       //Updating available items
        Read();
    }, function () {
        // alert("Ooops, an error occured. Please try again");
    });
}


function Read() {         
    var url = _spPageContextInfo.siteAbsoluteUrl;

    getListItems(listName, url, function (data) {
        var items = data.d.results;
        // Add all the new items
        var listItemsdata = '<div> <table border="1">';
        listItemsdata += '<tr style="background-color: #87b586">  <th>Title </th> <th>Actions</th> </tr>'
        for (var i = 0; i < items.length; i++) {
            listItemsdata += '<tr><td> <lable class="itemTitle">' + items[i].Title +
                '</label></td><td>'
                + '<input type="button" Id="' + items[i].ID + '" value="Edit" class="renameDeleteAnItem" /> <input type="button" Id="' + items[i].ID + '" value="Delete" class="renameDeleteAnItem" /> </td> </tr>';
        }
        listItemsdata += '</table></div>';

        $("#divShowItems").empty()
        $("#divShowItems").append(listItemsdata);
    }, function (data) {
        alert("Ooops, an error occured. Please try again");
    });
}

// occurs when a user clicks the update button
function Update() { 
    var url = _spPageContextInfo.siteAbsoluteUrl;
    var itemId = UpdateItemID; 
    var title = $('#txtTitle').val();
    updateListItem(itemId, listName, url, title, function () {
        alert("Item updated, refreshing avilable items");
        $('#txtTitle').val('');
        Read();
    }, function () {
        alert("Ooops, an error occured. Please try again");
    }); 
}

// occurs when a user clicks the delete button
function Delete(itemId) {
    var url = _spPageContextInfo.siteAbsoluteUrl;
    //var itemId = $('#DeleteItems').val();
    deleteListItem(itemId, listName, url, function () {
        alert("Item deleted, refreshing avilable items");
        Read();
    }, function () {
        alert("Ooops, an error occured. Please try again");
    });
}

// Delete Operation
function deleteListItem(itemId, listName, siteUrl, success, failure) {
    getListItemWithId(itemId, listName, siteUrl, function (data) {
        $.ajax({
            url: data.__metadata.uri,
            type: "POST",
            headers: {
                "Accept": "application/json;odata=verbose",
                "X-Http-Method": "DELETE",
                "X-RequestDigest": $("#__REQUESTDIGEST").val(),
                "If-Match": data.__metadata.etag
            },
            success: function (data) {
                success(data);
            },
            error: function (data) {
                failure(data);
            }
        });
    },
   function (data) {
       failure(data);
   });
}


// Update Operation
function updateListItem(itemId, listName, siteUrl, title, success, failure) {
    var itemType = GetItemTypeForListName(listName);

    var item = {
        "__metadata": { "type": itemType },
        "Title": title
    };

    getListItemWithId(itemId, listName, siteUrl, function (data) {
        $.ajax({
            url: data.__metadata.uri,
            type: "POST",
            contentType: "application/json;odata=verbose",
            data: JSON.stringify(item),
            headers: {
                "Accept": "application/json;odata=verbose",
                "X-RequestDigest": $("#__REQUESTDIGEST").val(),
                "X-HTTP-Method": "MERGE",
                "If-Match": data.__metadata.etag
            },
            success: function (data) {
                success(data);
            },
            error: function (data) {
                failure(data);
            }
        });
    }, function (data) {
        failure(data);
    });
}

// READ SPECIFIC ITEM operation
// itemId: The id of the item to get
function getListItemWithId(itemId, listName, siteurl, success, failure) {
    var url = siteurl + "/_api/web/lists/getbytitle('" + listName + "')/items?$filter=Id eq " + itemId;
    $.ajax({
        url: url,
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            if (data.d.results.length == 1) {
                success(data.d.results[0]);
            }
            else {
                failure("Multiple results obtained for the specified Id value");
            }
        },
        error: function (data) {
            failure(data);
        }
    });
}

// READ operation
function getListItems(listName, siteurl, success, failure) {
    $.ajax({
        url: siteurl + "/_api/web/lists/getbytitle('" + listName + "')/items",
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data) {
            success(data);
        },
        error: function (data) {
            failure(data);
        }
    });
}

// CREATE Operation
function createListItemWithDetails(listName, siteUrl, title, success, failure) {

    var itemType = GetItemTypeForListName(listName);
    var item = {
        "__metadata": { "type": itemType },
        "Title": title
    };

    $.ajax({
        url: siteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
        type: "POST",
        contentType: "application/json;odata=verbose",
        data: JSON.stringify(item),
        headers: {
            "Accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        },
        success: function (data) {
            success(data);
        },
        error: function (data) {
            debugger;
            alert("Error creating: "+ data.responseText);
            failure(data);
        }
    });
}

function GetItemTypeForListName(name) {
    return "SP.Data." + name.charAt(0).toUpperCase() + name.slice(1) + "ListItem";
}

<div>
        <table>
            <tr>
                <td>
                    <label>Title:</label>
                </td>
                <td>
                    <input type="text" id="txtTitle" />
                </td>
            </tr>
           
            <tr>
                <td></td>
                <td>

                    <input type="button" id="Create_Submit" value="Create" onclick="Create();" />                  
                    <input type="button" id="UpdateSubmit" value="Update" onclick="Update();" />
                    <input type="button" id="DeleteSubmit" value="Delete" onclick="Delete();" />

                </td>
            </tr>
        </table>


        <div id="divShowItems"></div>


    </div>