How to create an App Part in SharePoint 2013

March 22nd, 2013 | Posted by Jeffrey Paarhuis in Developing

The App Part in SharePoint 2013 is actually a Web Part version of an App. Like Web Parts in 2010 they reside in a small frame on the page. For the old Web Part this was some rendered ASPX, for an App Part this is an HTML-page in an IFrame.

In this post I want to explain, very shortly how to create an SharePoint-hosted App Part.

Build the App Part

I assume you have a developer site collection. If you haven’t yet, you can create one by selecting the Developer Site template under the Collaboration tab when creating a new site collection. This site collection has some build-in functionality that helps you deploy Apps from Visual Studio.

Ok, start off by creating a new SharePoint App in Visual Studio.  The App will be the container for the App Part.

Create an App with Visual Studio

In this scenario we are building a SharePoint-hosted App (Part) which means we can only use client-side code. If you want to know more about the different hosting options, please read this overview on MSDN.

Select App hosting options

Visual Studio creates an App with an hello-worldish script in the App.js. This script retrieves the display name of the current user and puts it in the <p id=”message”> on the default App page Default.aspx.

'use strict';

var context = SP.ClientContext.get_current();
var user = context.get_web().get_currentUser();

// This code runs when the DOM is ready and creates a context object which is needed to use the SharePoint object model
$(document).ready(function () {
 getUserName();
});

// This function prepares, loads, and then executes a SharePoint query to get the current users information
function getUserName() {
 context.load(user);
 context.executeQueryAsync(onGetUserNameSuccess, onGetUserNameFail);
}

// This function is executed if the above call is successful
// It replaces the contents of the 'message' element with the user name
function onGetUserNameSuccess()
 $('#message').text('Hello ' + user.get_title());
}

// This function is executed if the above call fails
function onGetUserNameFail(sender, args) {
 alert('Failed to get user name. Error:' + args.get_message());
}

You can run this app now and see that Visual Studio deploys the app to your developer site and starts debugging it.

Plain App

Did you know that you can debug your JavaScript straight in Visual Studio without the need of browser developer tools

We now add a Client Web Part item to the project. Despite of being called a Client Web Part, this will be the App Part.

Add Client Web Part

We want the wizard to create a new page for the App Part.

Create App Part page

This creates a Client Web Part and a page.

App Part Created

We can change the properties of the App Part, like the title, by modifying the Elements.xml.

When you open the App Part ASPX page you will notice that it looks different compared to the Default.aspx. Where the Default.aspx is using the SharePoint master page, the App Part Page is an empty page with no master page whatsoever. This is because the App Part Page will be shown in an IFrame, so we need an empty page. The only code Visual Studio generates out of the box are some JavaScript references and a script that will reference the right CSS.

<script type="text/javascript" src="../Scripts/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="/_layouts/15/MicrosoftAjax.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.js"></script>

<script type="text/javascript">
 'use strict';

 // Set the style of the client web part page to be consistent with the host web.
 (function () {
  var hostUrl = '';
  if (document.URL.indexOf('?') != -1) {
   var params = document.URL.split('?')[1].split('&');
   for (var i = 0; i < params.length; i++) {
    var p = decodeURIComponent(params[i]);
    if (/^SPHostUrl=/i.test(p)) {
     hostUrl = p.split('=')[1];
     document.write('<link rel="stylesheet" href="' + hostUrl + '/_layouts/15/defaultcss.ashx" />');
     break;
    }
   }
  }
  if (hostUrl == '') {
   document.write('<link rel="stylesheet" href="/_layouts/15/1033/styles/themable/corev15.css" />');
  }
 })();
</script>

Now let’s create the same hello-worldish script on this page. Therefor we need the following script reference in the header:

<script type="text/javascript" src="../Scripts/App.js"></script>

And the following markup in the body:

<div>
 <p id="message">
  <!-- The following content will be replaced with the user name when you run the app - see App.js -->
  initializing...
 </p>
</div>

Run the App again, go to the developer site and add the App Part to the page.

Add App Part to page

Finally it would look something like this.

App Part on page

Happy coding!

You can follow any responses to this entry through the RSS 2.0 You can leave a response, or trackback.

22 Responses



Leave a Reply to susanmurdoch Cancel reply

%d bloggers like this: