Wednesday, December 23, 2015

SharePoint-hosted apps: Add Fields (Columns) to SharePoint List in Host Web using JSOM



var onQuerySucceeded = function(sender, args) {
    alert("List Field Updated");
}

var onQueryFailed = function (sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

var createFields = function (listName) {
    var clientContext = new SP.ClientContext.get_current();
    var factory = new SP.ProxyWebRequestExecutorFactory(appWebUrl);
    context.set_webRequestExecutorFactory(factory);
    var parentContext = new SP.AppContextSite(clientContext, hostWebUrl);

    // Get List
    var list = parentContext.get_web().get_lists().getByTitle(listName);
    var fieldCollection = list.get_fields();

    /*
    $(fieldsCollection).each(function (index, fieldValue) {
        fieldCollection.addFieldAsXml(fieldValue, true, SP.AddFieldOptions.defaultValue);
    });*/
    
    fieldCollection.addFieldAsXml("", true, SP.AddFieldOptions.defaultValue);
    fieldCollection.addFieldAsXml("", true, SP.AddFieldOptions.defaultValue);
    clientContext.load(fieldCollection);

    clientContext.executeQueryAsync(onQuerySucceeded, onQueryFailed);

}

// Add custom columns to the SharePoint List in Host Web
createFields("Projects");


SharePoint-hosted apps: Create a Custom List in Host Web using SharePoint REST API



var getQueryStringParameters = function(qsPara) {
    var paramArray = document.URL.split("?")[1].split("&");

    for (var i = 0; i < paramArray.length; i++) {
        var paraName = paramArray[i].split("=");
        if (paraName[0] === qsPara) {
            return paraName[1];
        }
    }
}

var getHostWebUrl = function () {
    var hostWebUrl = decodeURIComponent(getQueryStringParameters("SPHostUrl"));
    return hostWebUrl;
}


var createList = function (listName, baseTemplate, description) {
    var deferred = $.Deferred();
    var appWebUrl = _spPageContextInfo.webAbsoluteUrl;
    var hostWebUrl = getHostWebUrl();
    var executor = new SP.RequestExecutor(appWebUrl);
    var httpRequestUrl = appWebUrl + "/_api/SP.AppContextSite(@target)/web/Lists?@target='" + hostWebUrl + "'";

    executor.executeAsync({
        method: "POST",
        url: httpRequestUrl,
        body: "{ '__metadata': { 'type': 'SP.List' }, 'AllowContentTypes': true, 'BaseTemplate': " + baseTemplate + ", 'ContentTypesEnabled': true, 'Description': '" + description + "', 'Title': '" + listName + "' }",
        headers: {
            "accept": "application/json;odata=verbose",
            "content-type": "application/json;odata=verbose"
        },
        success: function (data, status, jqXHR) {
            deferred.resolve();
        },
        error: function (data) {
            deferred.reject();
        }
    });


    return deferred.promise();
}

// Create a List named as 'Projects' in Host Web 
createList("Projects", "100", "This lists consist of projects used by SharePoint CV App")


Tuesday, December 1, 2015

SharePoint-hosted apps: Send Emails using SharePoint REST API


var sendEmails = function (emailCollection) {

    var oDeferred = $.Deferred(),
        email, iCounter = 0;
    // create an object for a http request
    var oHttpRequest = {
        url: "{0}/_api/SP.Utilities.Utility.SendEmail",
        type: "POST",
        contentType: "application/json; odata=verbose",
        headers: {
            "accept": "application/json; odata=verbose",
            "contentType": "application/json; odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        }
    }

    oHttpRequest.url = String.format(oHttpRequest.url, _spPageContextInfo.siteAbsoluteUrl);

    // Iterate the email collections and send emails
    for (email in emailCollection) {
        oHttpRequest.data = JSON.stringify({
            'properties': {
                '__metadata': { 'type': 'SP.Utilities.EmailProperties' },
                'From': emailCollection[email].From,
                'To': { 'results': [emailCollection[email].To] },
                'Subject': emailCollection[email].Subject,
                'Body': emailCollection[email].Body
            }
        });

        try {
            return $.ajax(oHttpRequest)
                .done(function () {
                    iCounter += 1;
                    if (iCounter == emailCollection.length) // Once all the emails are send then resolve the promise object.
                        oDeferred.resolve();
                }).fail(function (xhr, textStatus, errorThrown) {
                    alert(textStatus);
                });
        }
        catch (err) {
            err.message;
        }
    }
    return oDeferred.promise();
}


// Example Email Object
var emailCollection = [];
var oEmail = {};
oEmail["From"] = "salman.malik@de.sp.com";
oEmail["To"] = "salman.malik@de.sp.com";
oEmail["Subject"] = "Test Email From Sharepoint App";
oEmail["Body"] = "It is a test email generated from Sharepoint App";
emailCollection.push(oEmail);


sendEmails(emailCollection);