This blog post is a contribution from Jaishree Thiyagarajan, an engineer with the SharePoint Developer Support team.

Let’s first create a SharePoint Hosted App.

image

Choose “SharePoint-Hosted” option for “How do you want to host your app for SharePoint” in VS 2012.

image

Now right-click the AppManifest.xml and open with XML editor.

image

Make sure that you have an internal element within the AppPrincipal element (as shown below).

<AppPrincipal>

<Internal />

</AppPrincipal>

Here’s my complete AppManifest.xml.

<?xml version="1.0" encoding="utf-8" ?>
<!--Created:cb85b80c-f585-40ff-8bfc-12ff4d0e34a9-->
<App xmlns="http://schemas.microsoft.com/sharepoint/2012/app/manifest"
     Name="SampleSPApp"
     ProductID="{ccfc0c1e-ffac-4a20-a454-81e6cb7d4c62}"
     Version="1.0.0.0"
     SharePointMinVersion="15.0.0.0"
>
  <Properties>
    <Title>SampleSPApp</Title>
    <StartPage>~appWebUrl/Pages/Default.aspx?{StandardTokens}</StartPage>
  </Properties>
 
  <AppPrincipal>
    <AutoDeployedWebApplication />
  </AppPrincipal>
 
 
</App>

Let’s first add a list within the app; so that whenever an item it added, the remote event receiver will be invoked.

Right-click the project and add “New Item”.

image

Choose List and give it a name, e.g., “MySampleList”.

image

image

Now, let’s add a remote event receiver.  Right-click solution explorer and click “Add” and then “New Item”.  Choose “Remote Event Receiver” and give it a name, e.g., “MyReR” and click “Add”.

image

Choose the event receiver.  For e.g., let’s use “Item was Added” (ItemAdded – Asynchronous) event.

image

Once you click “Finish”, a web application is created with a web service that contains a code file.  If you see the code file of the service, you’d see two methods.

1. ProcessEvent(): This is a synchronous event that handles events that occur before an action occurs.  Such as when a user adds or deletes a list item.  Two way event that can handle current events (“-ing”) that can callback to SharePoint.

2. ProcessOneWayEvent(): This is a asynchronous event that handles events that occur after an action occurs.  Such as after a user adds an item to a list or deletes an item from a list.  This is one-way event that can handle past events (“-ed”).

Add the following code to “ProcessOneWayEvent” as we chose to implement the “Item was added” event.  The below code just appends the string “changed by RER” to the title of a list item.

public void ProcessOneWayEvent(SPRemoteEventProperties properties)
        {
            Uri myurl = new Uri(properties.ItemEventProperties.WebUrl);
            using (ClientContext clientContext = new ClientContext(myurl))
            {
                if (clientContext != null)
                {
                    List lstContacts =
                       clientContext.Web.Lists.GetByTitle(
                           properties.ItemEventProperties.ListTitle
                       );
                    clientContext.Load(lstContacts);
                    clientContext.ExecuteQuery();
 
                     
                    int cnt = lstContacts.ItemCount;
 
                     
 
                    ListItem itemContact =
                        lstContacts.GetItemById(
                           cnt
                        );
 
                    clientContext.Load(itemContact);
                    clientContext.ExecuteQuery();
 
                    itemContact["Title"] = itemContact["Title"] + "  changed by RER";
                    itemContact.Update();
 
                    clientContext.Load(itemContact);
                    clientContext.ExecuteQuery();
                }
            }
 
        }

Now, copy the URL from the properties window of the web application and paste it in the URL section of the elements.xml file of the event receiver of the SharePoint App.

Here’s the URL I see in my properties window.

image

Your updated XML should look like the one shown below.  NOTE: I’ve added the receiver to just one list instance and not to a list template.

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers  ListUrl="Lists/MySampleList">
      <Receiver>
        <Name>MyReRItemAdded</Name>
        <Type>ItemAdded</Type>
        <SequenceNumber>10000</SequenceNumber>
        <Url>http://localhost:36511/MyReR.svc</Url>
      </Receiver>
  </Receivers>
</Elements>

Now, last but not the least, add the below XsltListViewWebPart to the default.aspx page of the SharePoint App, so that we can add items to the list that has been created.  Make sure to update the ListUrl property correctly.

<WebPartPages:WebPartZone runat="server" FrameType="TitleBarOnly" 
ID="full" Title="loc:full" >
<WebPartPages:XsltListViewWebPart ID="XsltListViewWebPart1" 
runat="server" ListUrl="Lists/MySampleList" IsIncluded="True" 
NoDefaultStyle="TRUE" Title="MySampleList" PageType="PAGE_NORMALVIEW" 
Default="False" ViewContentTypeId="0x"> 
</WebPartPages:XsltListViewWebPart>
</WebPartPages:WebPartZone>

Now, click F5 and deploy the App.  While deploying, you’ll be asked to trust the App.  Hit the “Trust It” button.

image

Try adding items to the list named “MySampleList” and see SharePoint 2013 remote event receivers in action.  I’ve added an item “RER is cool”.  The remote event receiver changed the title as “RER is cool changed by RER”.

image

Attaching a sample for you to quickly try SharePoint 2013 remote event receivers Download Zipped SampleSPApp

Here are a few more references on this topic:

How to: Create a remote event receiver

Handling events in apps for SharePoint

SharePoint 2013: Use event receivers to handle events in apps for SharePoint

SharePoint 2013: Create a remote event receiver for external data

If you have not already done so, download and install the Microsoft Office Developer Tools for Visual Studio 2012 tool set for building SharePoint solutions for SharePoint 2010 and SharePoint 2013 using Visual Studio 2012.

Hope this post was helpful!