Thursday, October 02, 2014

Export/Import SharePoint objects using JSON and REST in App

One big request from IT Managers and Office 365 SharePoint Site is about Migrations of data and SharePoint Objects from SharePoint Site, yes there is a lot of tools that help you making this type of migration,we hear a lot about moving users, Lists, Content types but how this really works...
We can have multiple ways since SharePoint Object Model Server Side, Client Side Object Model or REST operations as examples.
This example show how you can use the data in JSON base from REST operations and SharePoint Objects from SharePoint Sites then change it and import to different SharePoint sites .

The created SharePoint App model shows how we can export and import SharePoint Objects using JSON and REST with Javascript.

This type of method can be very useful to move SharePoint Site Configurations to multiple sites, for this example used the "RoleDefinition" object to export a existing RoleDefinition Object and import with a different name using JSON data.



Support documents:
"Users, groups, and roles REST API reference"
http://msdn.microsoft.com/en-us/library/office/dn531432(v=office.15).aspx
"How to Convert REST Call to SharePoint JSOM Object (ECMAScript)"
http://aaclage.blogspot.ch/2014/04/how-to-convert-rest-call-to-sharepoint.html


How the App Works?

The app get a existing RoleDefinition permission Name in the SharePoint site and make a REST operation to return the JSON data associated.
The first thing was get the Name of a permission in Permission Levels, you can access the page following the Top Right Menu "Site settings > Site Permissions > Ribbon "Permissions Levels"".





Export JSON Roledefinition

When the Permission name is selected access to ExportImport App and select the Option "Export RoleDefinition JSON" and the JSON data is displayed in the TextArea.



Code:
function ExportJson() {
    var executor = new SP.RequestExecutor(SPAppWebUrl);
 
    executor.executeAsync({
        url: SPAppWebUrl + "/_api/SP.AppContextSite(@target)/Web/Roledefinitions?$filter=Name eq '" + $('#Roledefinition').val() + "'&@target='" + SPHostUrl + "'",
        method: "GET",
        headers: { "Accept""application/json; odata=verbose" },
        success: function (data) { $('#ExportJSON ').val(data.body); SP.UI.Notify.addNotification('Roledefinitions exported with Success!!'false); },
        error: function (sender, args) {
            SP.UI.Notify.addNotification('Request failed. ' + sender.statusText + '\n' + sender.statusCode);
        }
    });
}

Import JSON Roledefinition

Copy the JSON data and paste in the Import JSON TextArea and provide a new Name for the RoleDefinition and select "Import new Roledefinition JSON".
This operation will send a POST Method by REST with the JSON data and properties associated in the Body of the message to SharePoint.
After this the object should be created with success.


Code:

function ImportJson() {
    var item = JSON.parse($('#ImportJSON').val()).d;
    var executor = new SP.RequestExecutor(SPAppWebUrl);
    if (item.results.length == 1) {
        executor.executeAsync({
            url: SPAppWebUrl + "/_api/SP.AppContextSite(@target)/web/roleDefinitions?@target='" + SPHostUrl + "'",
            method: "POST",
            body: "{ '__metadata': { 'type': 'SP.RoleDefinition' }, 'BasePermissions':{ '__metadata': { 'type': 'SP.BasePermissions' }, 'High': '" + item.results[0].BasePermissions.High + "','Low':'" + item.results[0].BasePermissions.Low + "'}, 'Description': '" + item.results[0].Description + "', 'Name': '" + $('#NameRoledefinition').val() + "', 'Order': " + item.results[0].Order + " }'",
            headers: {
                "content-type""application/json; odata=verbose"
            },
            success: function (data) { SP.UI.Notify.addNotification('New role "' + $('#NameRoledefinition').val() + '" Roledefinitions imported with Success!!'); },
            error: function (sender, args) {
                SP.UI.Notify.addNotification('Request failed. ' + sender.statusText + '\n' + sender.statusCode);
            }
        });
    } else {
        SP.UI.Notify.addNotification('More than 1 item'false);
    }
   
}

After the success Message from the last operation, you can refresh the Permission Level Page and validate if the new RoleDefinition was created with sucess.





For the ExportImport App Project you can access the following link: 


Hope you like this Article, 
Kind regards, 
André Lage

Post a Comment