<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Apps for Office and SharePoint blog</title><link>http://blogs.msdn.com/b/officeapps/</link><description>The official Microsoft blog for cloud app model developers of Office and SharePoint</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Roadmap for Apps for Office, VSTO, and VBA</title><link>http://blogs.msdn.com/b/officeapps/archive/2013/06/18/roadmap-for-apps-for-office-vsto-and-vba.aspx</link><pubDate>Tue, 18 Jun 2013 16:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10425733</guid><dc:creator>Michael Zlatkovsky (MSFT)</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officeapps/rsscomments.aspx?WeblogPostID=10425733</wfw:commentRss><comments>http://blogs.msdn.com/b/officeapps/archive/2013/06/18/roadmap-for-apps-for-office-vsto-and-vba.aspx#comments</comments><description>&lt;p&gt;With all the buzz around the new apps for Office programming model, developers might be wondering: What benefits does the new app model bring, and which of the three technology choices―apps for Office, managed VSTO add-ins, or VBA macros―are best suited for particular scenarios?&lt;/p&gt;
&lt;p&gt;Apps for Office is a recognition that the technology landscape around us is changing: that ubiquitous connectivity, mobile devices, powerful and personalized cloud services, real time collaboration, and social are fast becoming the norm, and that a new app model must be brought forth to capture these evolving needs. At the same time, however, it&amp;rsquo;s important to note that all three technologies will be supported in the foreseeable future. This means that if you have an existing VBA or VSTO project, and if you&amp;rsquo;re satisfied with the capabilities, tooling, and marketability of your existing solution, you can be confident that your investments are safe. However, if you&amp;rsquo;re looking to expand the exposure of your product or service to a larger audience and allow for greater monetization opportunities, apps for Office can be a great option to start looking into. This post will guide you through the strengths of each of the three technologies, and suggest some factors by which to choose which Office customization approach is right for you.&lt;/p&gt;
&lt;h1&gt;Apps for Office&lt;/h1&gt;
&lt;p&gt;The newest addition to the Office developer toolbox, apps for Office are a new way for users to interact with Office customizations. Instead of having to install add-ins or enable macros, users can download, install, and use apps alongside a document, message, or appointment straight from the Office Store or from an internal corporate app catalog, and those apps run in a protected sandbox environment. Built with web technologies, apps for Office are particularly well suited for creating web mash-ups and using Office as a surface for exposing existing web functionality. Apps also offer lifecycle management capabilities, such as distributing or removing apps for the users in your corporation, managing updates, and tracking telemetry.&lt;/p&gt;
&lt;p&gt;Figure 1 shows a content app and a task pane app embedded within an Excel document. The apps expose the existing web services of Bing Maps and Merriam-Webster, respectively, surfacing these through a convenient app that interacts with the user&amp;rsquo;s Excel environment.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/0181.UpgradeAppForSP_5F00_fig01_5F00_2FD981C2.png"&gt;&lt;img style="display: inline; background-image: none;" title="UpgradeAppForSP_fig01" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/5270.UpgradeAppForSP_5F00_fig01_5F00_thumb_5F00_6B2CE780.png" alt="UpgradeAppForSP_fig01" width="729" height="463" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;strong&gt;Figure 1. Apps for Office: A content app and a task pane app embedded within an Excel document &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The friction-free ease of distribution is a huge draw for apps for Office. Additionally, the Office Store is designed to make it easy for you to monetize your apps. Another neat aspect is that apps for Office can be used both in the Office 2013 and in a growing selection of Office Web Apps as well. For example, a mail app can use the same JavaScript API calls both for the desktop Outlook client and for Outlook Web App, spanning a breadth of devices. Most importantly, due to the web-based approach of the apps for Office model, developers can use their existing coding skills to develop apps with virtually any web programming technology, and apps can connect to virtually any backend data store. This makes the transition to the apps for Office model easier and smoother for web developers, allowing folks to re-use their existing web services and web development skills.&lt;/p&gt;
&lt;p&gt;The sweet spot for apps―connecting rich web content and services contextually with Office―offers great public exposure and a host of deployment and web-technology benefits. The additional benefit that is exclusively available with apps for Office is the potential to monetize your app by making it available for purchase in the Office Store. Additionally, companies can lock down access to any internally-built apps by using a corporate app catalog that is only accessible to internal users. These two features offer great potential for both app distribution and IT management that has not been available to Office developers and enterprises in the past.&lt;/p&gt;
&lt;h1&gt;Managed add-ins built with Visual Studio Tools for Office (VSTO)&lt;/h1&gt;
&lt;p&gt;Visual Studio Tools for Office uses the .NET Framework to customize and extend Office. VSTO offers the full language support of C# and Visual Basic, and can therefore leverage the same frameworks, tools, and programming paradigms as the rest of the .NET Framework. VSTO also provides very tight integration with the Office client applications, both in terms of the rich sets of APIs, and the customizability of the user interface.&lt;/p&gt;
&lt;p&gt;The following figure shows a VSTO solution running in PowerPoint. Notice the customized ribbon, the custom task pane (built with Windows Presentation Foundation), and a free-floating Windows Forms window.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/8203.UpgradeAppForSP_5F00_fig02_5F00_6461289A.png"&gt;&lt;img style="display: inline; background-image: none;" title="UpgradeAppForSP_fig02" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/6471.UpgradeAppForSP_5F00_fig02_5F00_thumb_5F00_2E10008B.png" alt="UpgradeAppForSP_fig02" width="731" height="564" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;strong&gt;Figure 2. A VSTO solution running in PowerPoint&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For developers and businesses that need to leverage more extensive customizability of Office, or that need to target Office 2007 or 2010 (apps are only available starting in Office 2013), VSTO is the primary option. In addition to UI customization, VSTO excels at automation scenarios, such as adding or modifying shapes or charts, manipulating or merging documents on the user&amp;rsquo;s behalf, and interacting with other programs or resources on the host computer. Of course, not all automation-like tasks require automation: inserting a new paragraph with formatting, for example, could be done with VSTO through automation, or it could be done with apps for Office by writing out an Open-XML formatted string. The exact technology choice, and the suitability of using apps for automation, would depend on carefully analyzing the business requirements and the user workflow for the application.&lt;/p&gt;
&lt;p&gt;VSTO is not lightweight, however. Deploying a VSTO add-in requires users to install the application, much as they would install any other desktop application. This often requires that the IT organization be involved in determining how safe the add-in is to the existing corporate environment, as well as often requiring that IT determine the upgrade path of this add-in for future releases of Office, and other application and environmental dependencies. This can lengthen time-to-deploy and create maintenance dependencies for the IT and business organizations. It is also important to note that VSTO add-ins run with the same security privileges as any other desktop program. This is a double-edged sword: it allows VSTO to use the power of the host computer and interact with the file system, which might be necessary for working across documents or interacting with external programs; but it also means that a malicious add-in could compromise the computer security. Even a well-intentioned add-in might affect the performance or stability of the host Office application, leading to slower startup or application failures. Ultimately, it&amp;rsquo;s up to the user (or IT admin) to ensure that an add-in is trustworthy before installing it. At the end of the day, VSTO is a very powerful tool, but this power does come at a cost.&lt;/p&gt;
&lt;h1&gt;Visual Basic for Applications (VBA) macros&lt;/h1&gt;
&lt;p&gt;VBA and the Visual Basic Editor is a tool that offers an in-product experience for automating Office client applications. Rooted in &amp;ldquo;classic&amp;rdquo; Visual Basic 6, and with support for a macro recorder in Word, Excel, and Access, VBA offers a simple onramp for writing an Office automation task to get the job done. However, as a decade-old technology, VBA is also more limited in terms of UI customizability and the overall tooling and framework support.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/3833.UpgradeAppForSP_5F00_fig03_5F00_5B91204E.png"&gt;&lt;img style="display: inline; background-image: none;" title="UpgradeAppForSP_fig03" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/5305.UpgradeAppForSP_5F00_fig03_5F00_thumb_5F00_68F73354.png" alt="UpgradeAppForSP_fig03" width="775" height="634" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;strong&gt;Figure 3. The VBA programming environment (built on &amp;ldquo;classic&amp;rdquo; Visual Basic 6) that is included with Office&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;An important distinction to note with VBA is that the customization code gets stored directly in the document. This makes initial deployment and distribution very easy, but makes updating code within any existing documents much more difficult. Within a corporate environment, this can create IT management and governance issues, as there is really no way to manage the proliferation of copies of the documents among users. Office documents are often emailed and duplicated, so there may have hundreds or thousands of documents based on the same VBA macro. Updating the code to improve features or to fix bugs would require that the Office artifact be re-emailed, re-structured, and re-worked by every single user and in every single file that has been using the customization. In a corporate environment, with no management or governance around such solutions, this is a risk to consider when creating or deploying VBA solutions.&lt;/p&gt;
&lt;p&gt;In summary, VBA is the &amp;ldquo;classic&amp;rdquo; option for creating document-based customizations―particularly for programs that will require little upkeep, and which will be distributed to a fairly limited internal/departmental set of audience. Writing a 10,000-line program in VBA, or selling the program as a standalone product, would be more of a stretch.&lt;/p&gt;
&lt;p&gt;Here is a comprehensive look at the choice of tools, across a broad set of categories:&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;&lt;strong&gt;Comparison Dimensions&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;strong&gt;Apps for Office&lt;/strong&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;strong&gt;VSTO&lt;/strong&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;strong&gt;VBA&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;Automation and interaction with the host computer&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;Interaction with the web&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;User Interface customization&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;partial *&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;partial&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;Interaction with the Office client object models&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;partial *&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;Offline Availability&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;partial **&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;Support for latest tools and technologies&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;Support for team development and source-control&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;Ability to target multiple host applications with one codebase&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;Ability to run code at application-level, across documents&lt;/td&gt;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;partial&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;Security and sandboxed environment&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;Ease of distribution, lifecycle, and telemetry&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;Built-in monetization opportunity&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;&lt;span style="font-family: Webdings;"&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="282"&gt;
&lt;p&gt;Cloud and Desktop Compatibility&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;Office 2013+, and web-based O365 clients&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;Office 2007+ &lt;br /&gt;(desktop only)&lt;/p&gt;
&lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&amp;nbsp;
&lt;td valign="top" width="110"&gt;
&lt;p align="center"&gt;Office 2000+ (desktop only)&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;*: Indicates a dimension where support might be partial today, but where future investments are expected to be made.&lt;/p&gt;
&lt;p&gt;**: Relies on standard web offlining capabilities (for example, AppCache, Web Storage, page caching) supported by the browser.&lt;/p&gt;
&lt;h1&gt;Summary&lt;/h1&gt;
&lt;p&gt;Given the increasing array of choices―apps for Office vs. add-ins vs. macros―it is important for developers to know the value of each tool. Add-ins and macros are existing forms of solutions, aimed at solving existing needs for existing users, and will continue to be supported on the desktop for the foreseeable future. Apps for Office, meanwhile, come with a forward-looking platform, aimed at bringing web services and web technologies closer to Office developers. For add-ins and macros, Office is a highly-customizable, but siloed platform; for apps, Office is more of an integrated surface for exposing loosely-coupled web functionality using the web technology of your choice, with the potential for monetization, IT governance, and ease of lifecycle management and deployment. Both approaches have their merits, with add-ins and macros providing robust interaction and automation of existing Office client applications, and with apps for Office better-suited for creating easily-deployable, web-based solutions that work across a growing base of platforms including desktop, web and mobile. In cases where multiple approaches are equally possible, apps for Office are a natural choice for new projects.&lt;/p&gt;
&lt;p&gt;Just like comparing Windows 8 apps with traditional Win32 desktop applications, or redesigning traditional websites for mobile devices, apps for Office represent a paradigm shift from add-ins and macros. In many cases, converting an existing managed add-in to the new apps for Office model would require significant re-imagining of the application. Thus, instead of thinking of a 1-for-1 conversion, it might be more fruitful to enable a few key scenarios using apps for Office, and see where that leads. Perhaps those key scenarios are enough to gain business on their own; or perhaps the re-imagined app can lead to entirely new scenarios and services, based on the cloud-optimized and multi-platform nature and the huge potential of the new app model. The capabilities of the new app model will continue to evolve, so even if your scenario does not fit the scope of the new app model today, keep an eye out for the new features of tomorrow.&lt;/p&gt;
&lt;p&gt;Happy coding―with whatever Office technology(ies) you choose! Please leave a comment if you have any questions.&lt;/p&gt;
&lt;p&gt;―Michael Zlatkovsky | Program Manager, Visual Studio Tools for Office and Apps for Office&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Special thanks to Sonya Koptyev, Jim Nakashima, Rolando Jimenez Salgado, Sean Laberee, Angela Chu-Hatoun, and Sudheer Maremanda for their input into this post.&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10425733" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Apps+for+Office/">Apps for Office</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Office+Developer+Tools/">Office Developer Tools</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/VBA/">VBA</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/VSTO/">VSTO</category></item><item><title>Upgrading your app for SharePoint</title><link>http://blogs.msdn.com/b/officeapps/archive/2013/06/13/upgrading-your-app-for-sharepoint.aspx</link><pubDate>Thu, 13 Jun 2013 19:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10425447</guid><dc:creator>Miguel Caballero Pinto</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officeapps/rsscomments.aspx?WeblogPostID=10425447</wfw:commentRss><comments>http://blogs.msdn.com/b/officeapps/archive/2013/06/13/upgrading-your-app-for-sharepoint.aspx#comments</comments><description>&lt;p&gt;&lt;i&gt;Once you have submitted an app to the Office Store or published it to your corporate app catalog, you will probably start planning the next version of your app. An important part of that planning is ensuring that the app upgrade process will be smooth for your users and their data. This post explains how SharePoint enables developers to correctly upgrade their apps and how &lt;a href="http://aka.ms/OfficeDevToolsForVS2012"&gt;Office Developer Tools&lt;/a&gt; can make the process even easier.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;To enable upgrading for your app, you have to consider things beyond the implementation of your first version, and your main concern will be to keep your app updated without losing any data on the process. On the other hand, as a developer, you also want a comprehensive way to track your changes with each version submitted.&lt;/p&gt;  &lt;p&gt;SharePoint provides you with fine grained control over how each element of your app for SharePoint is upgraded. Office Developer Tools for Visual Studio 2012 helps you declare all the necessary information and performs some of the steps automatically for you. In the following sections, I’ll briefly walk you through how upgrade works in apps for SharePoint, and then talk about how you can use the Office Developer Tools to simplify this work. &lt;/p&gt;  &lt;h1&gt;How app upgrade works&lt;/h1&gt;  &lt;p&gt;The upgrade for all elements at the app package level (that is, client Web Parts, host web custom actions, etc.) are tracked by the version specified in the app manifest. This means that once the user decides to upgrade an app for SharePoint, and if the version in the app manifest changes, SharePoint will find the difference in those files automatically and perform the upgrade for you.&lt;/p&gt;  &lt;p&gt;For the files inside a WSP package in the app package (for example, lists or modules), you need to declare how SharePoint should handle them in an upgrade. They must be specified in a declarative way in their Feature manifest, along with the version range where the upgrade actions should be triggered. Here is an example:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;Feature &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;
         &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Version&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;1.0.0.2&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;UpgradeActions&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;VersionRange &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;EndVersion&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;1.0.0.1&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ApplyElementManifests&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ElementManifest &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Location&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;Pages\Elements.xml&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ElementManifest &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Location&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;Scripts\Elements.xml&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ElementManifest &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Location&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;Content\Elements.xml&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ElementManifest &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Location&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;Images\Elements.xml&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ApplyElementManifests&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;VersionRange&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;VersionRange &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;BeginVersion&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;1.0.0.2&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ApplyElementManifests&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ElementManifest &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Location&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;List1Instance\Elements.xml&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ElementManifest &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Location&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;List1\Elements.xml&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ApplyElementManifests&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;VersionRange&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;UpgradeActions&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;

  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ElementManifests&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;!-- &lt;/span&gt;&lt;span style="background: white; color: green;"&gt;Elements manifests are declare here. &lt;br /&gt;         Not relevant for this example &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;--&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ElementManifests&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;Feature&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;In this particular example, the new Feature version is 1.0.0.2, and this Feature manifest specifies the upgrade actions for the different element manifests included in the Feature. The element manifest for Pages, Scripts, Content, and Images were added in version 1.0.0.1, and a list was added in version 1.0.0.2. This way, if the app is updated from version 1.0.0.0 to version 1.0.0.2, the only modification SharePoint has to do for this Feature is to add the new list, as declared in the Feature manifest: &lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;VersionRange &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;BeginVersion&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;1.0.0.2&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ApplyElementManifests&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ElementManifest &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Location&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;List1Instance\Elements.xml&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ElementManifest &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Location&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;List1\Elements.xml&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ApplyElementManifests&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;VersionRange&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;There are many more actions we can declare in the Feature manifest, which are well documented on MSDN: &lt;a href="http://msdn.microsoft.com/en-us/library/aa544511(v=office.14).aspx"&gt;Upgrading Features&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;Office Developer Tools support for app upgrade&lt;/h1&gt;

&lt;p&gt;Office Developers Tools supports the process of creating an app upgrade in many ways. In fact, for most scenarios, you can simply rely on what the tooling does for you. The tools also provide the flexibility to customize the upgrade actions. I will explain each of these in the following sections.&lt;/p&gt;

&lt;h2&gt;Module files upgrade support &lt;/h2&gt;

&lt;p&gt;By default, when you add a new file to a module, it will be added when the user deploys the next version of the app. This configuration is set up in the module elements manifest that contains the file. In particular, the attribute that enables upgrade is “ReplaceContent=&amp;quot;TRUE&amp;quot;”, which is declared in the file element. Here is an example of a default Page module elements manifest for an app for SharePoint:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;Elements &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;Module &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Name&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;Pages&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;File &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Path&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;Pages\Default.aspx&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;
          &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Url&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;Pages/Default.aspx&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;
          &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;ReplaceContent&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;TRUE&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;Module&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;Elements&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;If you do not want to have to replace a particular file during upgrade, just remove that attribute.&lt;/p&gt;

&lt;h2&gt;Feature manifest and app manifest version kept in sync &lt;/h2&gt;

&lt;p&gt;Besides the version of the app, Features of an app also have their own versions. The Feature version number needs to be updated to be larger than the previous version so that it can participate in the upgrade process. To make sure that the different version numbers are addressed when you update your app version number in the manifest editor, Office Developer Tools keeps the app and Feature version numbers in sync. This means that if you change the version of the app in the app manifest editor, the Feature version will automatically be changed to the same version.&lt;/p&gt;

&lt;h2&gt;Element manifests kept in sync with Feature manifest&lt;/h2&gt;

&lt;p&gt;Every time a new element manifest is added to the project, Office Developer Tools will modify the Feature manifest by adding that element manifest to the first version range inside the declared upgrade actions. In this way, all the web artifacts of your project will be brought up-to date by default.&lt;/p&gt;

&lt;h2&gt;Customize Feature upgrade actions using Office Developer Tools&lt;/h2&gt;

&lt;p&gt;There are two ways in which Office Developer Tools will help you editing the Feature manifest. &lt;/p&gt;

&lt;h3&gt;Update through Feature manifest template editor&lt;/h3&gt;

&lt;p&gt;You can access the Feature manifest editor by double-clicking the project Feature file, selecting the manifest tab, and then clicking &lt;b&gt;Edit options&lt;/b&gt; at the bottom of the screen. &lt;/p&gt;

&lt;p&gt;The editor looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/0550.UpgradAppForSP_5F00_fig01_5F00_7430C6C5.png"&gt;&lt;img title="UpgradAppForSP_fig01" style="display: inline; background-image: none;" border="0" alt="UpgradAppForSP_fig01" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/2438.UpgradAppForSP_5F00_fig01_5F00_thumb_5F00_61E80003.png" width="515" height="521" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 1. Feature manifest editor.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the bottom of the editor is an area where you can add your own declarations. By default, the editor adds all the elements that are already in the project. You can modify these elements by adding them in the manifest editor, and Office Developer Tools will automatically match it with the one in the project. &lt;/p&gt;

&lt;p&gt;For example, consider the scenario at the start of this post. A new list was added in version 1.0.0.2, and you want your users who are using the previous version to get this new list through upgrading, but the upgrade should only apply to the new list. In that case, you would introduce this text in the editor to specify the new list manifests in &lt;b&gt;UpgradeActions&lt;/b&gt; of the Feature manifest:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;Feature &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
  &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;UpgradeActions&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;VersionRange &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;EndVersion&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;1.0.0.1&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;VersionRange&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;VersionRange &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;BeginVersion&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;1.0.0.2&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ApplyElementManifests&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ElementManifest &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Location&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;List1Instance\Elements.xml&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ElementManifest &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Location&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;List1\Elements.xml&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ApplyElementManifests&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;VersionRange&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;UpgradeActions&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;Feature&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The actual Feature manifest will then become:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/0385.UpgradAppForSP_5F00_fig02_5F00_0196D9CC.png"&gt;&lt;img title="UpgradAppForSP_fig02" style="display: inline; background-image: none;" border="0" alt="UpgradAppForSP_fig02" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/0486.UpgradAppForSP_5F00_fig02_5F00_thumb_5F00_617BCD0E.png" width="734" height="521" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 2. Feature manifest preview on editor after update.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Notice that Office Developer Tools always adds the project items to the first &lt;b&gt;VersionRange&lt;/b&gt; element so they will be updated by default for all the artifacts in the project. If you only want a specific set of artifacts to be upgraded, you can specify an end version for the first version range, as the above sample does, to restrict when this action will be triggered.&lt;/p&gt;

&lt;h3&gt;Advanced Feature manifest editing&lt;/h3&gt;

&lt;p&gt;If the Feature manifest editor does not meet your needs, you can always edit the Feature manifest by hand. To do this, click &lt;b&gt;Overwrite generated XML and edit manifest in the XML editor&lt;/b&gt; in the Feature Designer (see Figure 3 below). Be aware that after clicking that link, Office Developer Tools will no longer update the Feature manifest, and you will have to handle all changes manually.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/5277.UpgradAppForSP_5F00_fig03_5F00_6C392463.png"&gt;&lt;img title="UpgradAppForSP_fig03" style="display: inline; background-image: none;" border="0" alt="UpgradAppForSP_fig03" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/5280.UpgradAppForSP_5F00_fig03_5F00_thumb_5F00_33224761.png" width="857" height="521" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figure 3. Option for editing the Feature manifest manually.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In summary, this post explained how upgrade works in apps for SharePoint, and how Office Developer Tools can help you with the upgrade process. Let me know if you have any issues or feedback by adding a comment to this post or at the &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/appsforsharepoint/threads"&gt;Developing Apps for SharePoint 2013&lt;/a&gt; forum.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

&lt;p&gt;~ Miguel Caballero Pinto| Software Development Engineer, Visual Studio Tools for Office &amp;amp; Apps for Office&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10425447" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Apps+for+SharePoint/">Apps for SharePoint</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Office+Developer+Tools/">Office Developer Tools</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/upgrade/">upgrade</category></item><item><title>Create a web service for an app for Office using the ASP.NET Web API</title><link>http://blogs.msdn.com/b/officeapps/archive/2013/06/10/create-a-web-service-for-an-app-for-office-using-the-asp-net-web-api.aspx</link><pubDate>Mon, 10 Jun 2013 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10424002</guid><dc:creator>Michael Zlatkovsky (MSFT)</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officeapps/rsscomments.aspx?WeblogPostID=10424002</wfw:commentRss><comments>http://blogs.msdn.com/b/officeapps/archive/2013/06/10/create-a-web-service-for-an-app-for-office-using-the-asp-net-web-api.aspx#comments</comments><description>&lt;p&gt;You may have heard that apps for Office use client-side programming when communicating with the Office object-model. You may also have heard that apps for Office are especially well-suited for web mash-up scenarios, and are ideal for calling into web services and interacting with Web content. As a developer, how do you author your own web service? This post will lead you step-by-step through creating your own Web API service and calling into it from client-side app for Office code.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Sample code: &lt;/strong&gt;All relevant code will be shown here. To download a copy of the sample code, see &lt;a href="http://code.msdn.microsoft.com/Apps-for-Office-Create-a-ce255a96"&gt;Apps for Office: Create a web service using the ASP.NET Web API&lt;/a&gt;.&lt;/p&gt;  &lt;h1&gt;Getting started&lt;/h1&gt;  &lt;p&gt;First, when would you need to author your own web service for an app for Office?&lt;/p&gt;  &lt;table style="width: 100%;" cellspacing="0" cellpadding="3" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="371"&gt;         &lt;p&gt;&lt;strong&gt;To do this&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="365"&gt;         &lt;p&gt;&lt;strong&gt;Consider this…&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="371"&gt;         &lt;p&gt;&lt;strong&gt;Establish a database connection, or connect to a service with a username and password.&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="365"&gt;         &lt;p&gt;Encoding those in JavaScript is a serious security risk, as JavaScript code is trivially easy to inspect. Such calls should always be done on the server&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="371"&gt;         &lt;p&gt;&lt;strong&gt;Perform any functionality where the algorithm/logic should be kept hidden from users&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="365"&gt;         &lt;p&gt;Just as above, if your app encodes or transforms data (and if the algorithm for the transformation is something you need to keep secret), keeping the logic behind the server might be your only option.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="371"&gt;         &lt;p&gt;&lt;strong&gt;Retrieve external data that is not available in JSON-P format&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="365"&gt;         &lt;p&gt;Browsers implement a &lt;a href="https://microsoft.sharepoint.com/teams/developers/blog/Blog Articles/Addressing%20same-origin%20policy%20limitations%20in%20apps%20for%20Office"&gt;same-origin policy&lt;/a&gt; that prevents scripts loaded from one domain to manipulate content in another domain. Data in JSON-P format can pass through, but other formats may not. Creating your own web service allows it to act as a “wrapper” around the external data, bypassing the browser same-origin policy limitations.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="371"&gt;         &lt;p&gt;&lt;strong&gt;Use existing server-side code or libraries (or to share a common back-end across multiple platforms)&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="365"&gt;         &lt;p&gt;Suppose your app uses existing .NET Framework logic or libraries, or that you need to share a common back-end across multiple platforms. Exposing that functionality via a web service allows you to keep more of your existing code and libraries as is, without re-writing it to JavaScript.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="371"&gt;         &lt;p&gt;&lt;strong&gt;Perform licensing validation&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="463"&gt;         &lt;p&gt;For apps posted to the Office Store, license checks must be performed via server-side code.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Just to be clear, &lt;strong&gt;&lt;em&gt;not all web-service scenarios require that you author your own web service&lt;/em&gt;&lt;/strong&gt;. In particular, if your app consumes data from a public service that returns data in JSON-P format, you may not need to write your own web service at all. For purposes of this article, however, we’ll assume that there is some inherent business logic or data transformation that you need to expose to your app by means of writing your own web service. Let’s get started.&lt;/p&gt;  &lt;h1&gt;Using Web API&lt;/h1&gt;  &lt;p&gt;There are several possible choices for server-side technologies. For purposes of this article, I will be demonstrating the use of the ASP.NET Web API. Web API is an excellent framework for building REST applications, and Visual Studio provides first-class tooling support for it. The ability of Web API to communicate across a broad range of platforms makes it a particularly compelling choice for communicating between an app for Office and a corresponding web service.&lt;/p&gt;  &lt;h1&gt;Scenario&lt;/h1&gt;  &lt;p&gt;Let’s take a real-life example: You have an app, and now you want to add a “Send Feedback” page. To send the feedback, you’ll need to either log it to a database or maybe just email it to your development team – but in either case, you have sensitive data (connection string or a username/password combo) that you certainly wouldn’t want to expose via JavaScript. As we saw in the “Getting started” section, this is a canonical example of masking the back-end functionality behind a web service.&lt;/p&gt;  &lt;p&gt;To make this example match real-world scenarios as closely as possible, let’s send multiple bits of information to the service: for example, an overall rating (an integer on a 1-5 scale) along with a string for the actual feedback. Likewise, the response we’ll get from the service will include both a Boolean status flag to indicate success, and a message back from the server (e.g., “Thank you for your feedback” or an error description). By framing the problem this way, you can see how this sample is analogous to more complex scenarios, like fetching data from a database via a web service (for example, sending a query with certain parameters, returning a data structure that represents the list of results, etc.)&lt;/p&gt;  &lt;p&gt;Figure 1 shows a screenshot of the app we’re aiming to build. Again, to download the full sample project, see &lt;a href="http://code.msdn.microsoft.com/Apps-for-Office-Create-a-ce255a96"&gt;Apps for Office: Create a web service using the ASP.NET Web API&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/4503.WebAPI_2D00_fig01_5F00_4C4D6BCE.png"&gt;&lt;img title="WebAPI-fig01" style="display: inline; background-image: none;" border="0" alt="WebAPI-fig01" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/7635.WebAPI_2D00_fig01_5F00_thumb_5F00_2C325F11.png" width="242" height="447" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Figure 1. Screenshot of the “Send Feedback” sample app.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;Create the app project&lt;/h2&gt;  &lt;p&gt;To get the example up and running quickly, let’s just create a new task pane app for Office project, and place the “send feedback” functionality as part of the home screen. Of course, if you have an existing project where you’d like to append this functionality, you could create a SendFeedback folder, add two files called SendFeedback.html and SendFeedback.js within it, and place the functionality there, instead.&lt;/p&gt;  &lt;p&gt;This example assumes you’re using the &lt;a href="http://aka.ms/OfficeDevToolsForVS2012"&gt;latest version of Office Developer Tools&lt;/a&gt;. Thus, when you create a new project, you should get a project structure as shown in Figure 2.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/7230.WebAPI_2D00_fig02_5F00_0C175254.png"&gt;&lt;img title="WebAPI-fig02" style="display: inline; background-image: none;" border="0" alt="WebAPI-fig02" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/4186.WebAPI_2D00_fig02_5F00_thumb_5F00_1021A026.png" width="243" height="292" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Figure 2. Visual Studio project structure.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Open Home.html, and replace its &lt;em&gt;&amp;lt;div id=”content-main”&amp;gt;&lt;/em&gt; section with the following code.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;div &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;content-main&amp;quot;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;div &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;class&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;padding&amp;quot;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;p&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;This sample app demonstrates how an app for Office can &lt;br /&gt;           communicate with a Web API service.&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;p&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;hr &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;label&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;Overall rating: &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;label&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;select &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;rating&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;class&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;disable-while-sending&amp;quot; 
            &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;style&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;width&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;inherit&amp;quot;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;option &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;value&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;option&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;option &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;value&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;5&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;&amp;amp;#9733;&amp;amp;#9733;&amp;amp;#9733;&amp;amp;#9733;&amp;amp;#9733;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;option&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;option &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;value&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;4&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;&amp;amp;#9733;&amp;amp;#9733;&amp;amp;#9733;&amp;amp;#9733;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;option&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;option &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;value&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;3&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;&amp;amp;#9733;&amp;amp;#9733;&amp;amp;#9733;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;option&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;option &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;value&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;2&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;&amp;amp;#9733;&amp;amp;#9733;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;option&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;option &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;value&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;1&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;&amp;amp;#9733;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;option&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;select&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;br &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;br &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;label&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;Feedback:&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;label&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;br &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;textarea &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;feedback&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;class&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;disable-while-sending&amp;quot; &lt;br /&gt;            &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;style&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;width&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;100%&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;height&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;200px&amp;quot;
            &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;placeholder&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;What would you like to tell us?&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;textarea&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;button &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;send&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;class&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;disable-while-sending&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;Send it!&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;button&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;div&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;div&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;As you can see, the HTML is very standard, containing a dropdown for the star rating &lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&amp;amp;#9733;&lt;/span&gt; is the Unicode symbol for a star), a textarea for the textual feedback, and a button to send the data. Note that each of those components carries a unique ID, so that it can be easily referenced it via code. I also am applying a class called “disable-while-sending” to each of those three elements – again, just as a way to reference these elements from code – to be able to provide a status indication after the user has clicked “send”. Remember that web service calls are done asynchonrously, so disabling the controls provides both a visual indication, and prevents users from clicking “Send” multiple times while the first call is still underway.&lt;/p&gt;

&lt;p&gt;Let’s add a corresponding JavaScript file as well, with a placeholder for the sending procedure. If you’re following along with Home.js, replace the entire contents of that file with the following code.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: green;"&gt;/// &amp;lt;reference path=&amp;quot;../App.js&amp;quot; /&amp;gt;

&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;(&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;() {
    &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;use strict&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;
    &lt;/span&gt;&lt;span style="background: white; color: green;"&gt;// The initialize function must be run each time a new page is loaded
    &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;Office.initialize = &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;(reason) {
        $(document).ready(&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;() {
            app.initialize();
            $(&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'#send'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;).click(sendFeedback);
        });
    };

    &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;sendFeedback() {
        $(&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'.disable-while-sending'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;).prop(&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'disabled'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;, &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;true&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;);
        &lt;/span&gt;&lt;span style="background: white; color: green;"&gt;// Magic happens
    &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;}
})();&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;Okay, that’s as far as we can get for now. Let’s add our web service.&lt;/p&gt;

&lt;h2&gt;Adding a Web API controller&lt;/h2&gt;

&lt;p&gt;With Web API, anytime you call a method on a server, you’re doing so via a Controller. So, let’s add a Controller to handle our SendFeedback action.&lt;/p&gt;

&lt;p&gt;You can add a controller anywhere within your web project. By convention, however, controllers go into a “Controllers” folder at the root of the project, so let’s go ahead and create it now.&lt;/p&gt;

&lt;p&gt;After you create the folder, if you choose it and mouse over the “Add” menu, and you should see the option to add a Web API Controller class. The same option should be available under the “Add” &amp;gt; “New Item…” dialog, as well. Let’s add the Web API controller class now.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/5670.WebAPI_2D00_fig03_5F00_1DF3E621.png"&gt;&lt;img title="WebAPI-fig03" style="display: inline; background-image: none;" border="0" alt="WebAPI-fig03" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/0207.WebAPI_2D00_fig03_5F00_thumb_5F00_24A6EFA4.png" width="506" height="233" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 3. Adding a Web API Controller Class.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;By another convention, that is somewhat more strictly enforced, Web API controllers must end with the suffix “Controller” in order to be properly recognized by the routing mechanism. This isn’t to say you can’t change it, but that does require a bit of extra legwork. So for now, let’s appease the Web API plumbing architecture, and name our controller “SendFeedbackController”.&lt;/p&gt;

&lt;p&gt;We can leave the auto-generated code be for the present, and move onto the next step. We’ll be returning here in a moment.&lt;/p&gt;

&lt;h2&gt;Setting up the Web API routing&lt;/h2&gt;

&lt;p&gt;There is a quick side-step we need to take in order for our Web API Controller to function: we need to register it with the web application. Some flavors of web projects, like MVC, include support for Web API routing by default. The default app for Office does not include this plumbing, but it’s not hard to add.&lt;/p&gt;

&lt;p&gt;Note that this step is best done after you’ve already added a Controller to the project; otherwise, you need to set up some references manually. This is why this post has you &lt;em&gt;first&lt;/em&gt; add the controller, and only &lt;em&gt;then&lt;/em&gt; register it.&lt;/p&gt;

&lt;p&gt;To add the Web API routing registration, right-click on the &lt;strong&gt;root&lt;/strong&gt; your web project, select “Add”, and you should see “Global Application Class” as one of the options. It should also be available under the “Add” &amp;gt; “New Item…” dialog box. The default name of “Global.asax” should suffice.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/7167.WebAPI_2D00_fig04_5F00_6F9A6073.png"&gt;&lt;img title="WebAPI-fig04" style="display: inline; background-image: none;" border="0" alt="WebAPI-fig04" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/6180.WebAPI_2D00_fig04_5F00_thumb_5F00_0B3EEC6A.png" width="554" height="233" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 4. Adding a Global Application class.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once you’ve added Global.asax, the file should automatically open, with empty method stubs filled out. Add the following two “using” statements somewhere at the top of the file.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue;"&gt;using &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;System.Web.Routing; &lt;br /&gt;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;using &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;System.Web.Http;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The only method you need to touch is the Application_Start method. Add the following code into the Application_Start body (the rest of the methods can remain empty).&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: rgb(43, 145, 175);"&gt;RouteTable&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;.Routes.MapHttpRoute(
    name: &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;DefaultApi&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;,
    routeTemplate: &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;api/{controller}/{id}&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;,
    defaults: &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;new &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;{ id = RouteParameter.Optional }
);&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;What does this means? In a nutshell, the method registers your controllers to be available under the “api” route, followed by the name of the controller and an optional ID (in case of parameterized queries). The {ID} will not be used for our final SendFeedback controller, but it doesn’t hurt. Note that you can also specify other parameters under routeTemplate, such as “{action}”, to include the name of the action as part of the URL. Refer to &lt;a href="http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api"&gt;&amp;quot;Routing in ASP.NET Web API&amp;quot;&lt;/a&gt; for more information on configuring Web API routing, if you’re curious.&lt;/p&gt;

&lt;h2&gt;Filling out the Controller&lt;/h2&gt;

&lt;p&gt;The SendFeedbackController class has some auto-generated code that demonstrates some of the capabilities of Web API, including responding to various HTTP verbs (“GET” vs. “POST”, and so on), routing based on the ID parameter, and so forth. While these capacities are certainly worth exploring on your own (e.g., for an example of how to return a list of values), they are not necessary for our current “Send Feedback” scenario. For our purposes, all we want is a single method that takes in some data (overall rating and feedback text), and returns some data (a status and a message).&lt;/p&gt;

&lt;h3&gt;Data structures&lt;/h3&gt;

&lt;p&gt;Let’s write some data structures to hold the request and response objects. You can write them as inner classes within SendFeedbackController.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue;"&gt;public class &lt;/span&gt;&lt;span style="background: white; color: rgb(43, 145, 175);"&gt;FeedbackRequest
&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;{
    &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;public int&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;? Rating { &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;get&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;set&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;; }
    &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;public string &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;Feedback { &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;get&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;set&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;; }
}

&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;public class &lt;/span&gt;&lt;span style="background: white; color: rgb(43, 145, 175);"&gt;FeedbackResponse
&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;{
    &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;public string &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;Status { &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;get&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;set&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;; }
    &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;public string &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;Message { &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;get&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;set&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;; }
}&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;Nothing fancy – we’re using built-in data types (strings, integers) to build up the more complex request and response classes. If you’re curious why Rating is a nullable (int?) type, this is both to demonstrate that you can do this, and to handle the case where the user does not fill out a rating in the dropdown.&lt;/p&gt;

&lt;h3&gt;Method signature&lt;/h3&gt;

&lt;p&gt;Now let’s create the actual SendFeedback method. Go ahead and delete the other method stubs (they’re only there as examples, and you can always re-generate them by creating a new Web API Controller). In their place, let’s put a single SendFeedback method, which takes in a FeedbackRequest, and returns a FeedbackResponse.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black;"&gt;[HttpPost()] &lt;br /&gt;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;public &lt;/span&gt;&lt;span style="background: white; color: rgb(43, 145, 175);"&gt;FeedbackResponse &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;SendFeedback(&lt;/span&gt;&lt;span style="background: white; color: rgb(43, 145, 175);"&gt;FeedbackRequest &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;request) &lt;br /&gt;{ &lt;br /&gt; &lt;/span&gt;&lt;span style="background: white; color: green;"&gt;// Magic happens &lt;br /&gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;We will be using the HTML “Post” verb to post data to the controller. (For a discussion of POST versus GET, search the web for “when to use POST versus GET”). Note that you can either put the word “Post” as part of the method name, or you can name the method what you’d like, and annotate it with a “[HttpPost()]” attribute. It’s a matter of personal preference.&lt;/p&gt;

&lt;h3&gt;Try-catch&lt;/h3&gt;

&lt;p&gt;Let’s wrap our method body in a try-catch block, so we can gracefully handle any errors that occur as part of the method. The “catch” is shorter, so let’s fill that out first. &lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue;"&gt;try
&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;{
&lt;/span&gt;&lt;span style="background: white; color: green;"&gt;// Magic moved to here
&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;}
&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;catch &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;(&lt;/span&gt;&lt;span style="background: white; color: rgb(43, 145, 175);"&gt;Exception&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;)
{
    &lt;/span&gt;&lt;span style="background: white; color: green;"&gt;// Could add some logging functionality here.

    &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;return new &lt;/span&gt;&lt;span style="background: white; color: rgb(43, 145, 175);"&gt;FeedbackResponse&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;()
    {
        Status = &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;Sorry, your feedback could not be sent&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;,
        Message = &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;You may try emailing it directly to the support team.&amp;quot;
    &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;};
}&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;What’s happening here? Because the controller’s method is the very outer layer of the API, we want to ensure that any exceptions are caught and handled appropriately. Thus, on failing, we will still send a response via the data structure we defined, with an appropriate status text and message. Note that as part of the “catch”, we could instead throw a new HttpResponseException rather than returning a FeedbackResponse, and handle the exception on the client – it’s a matter of preference / convenience. However, performing a try-catch on the server-side code is still be useful for logging or for a potential fallback mechanism. For a more thorough discussion of Web API error handling, see “&lt;a href="http://weblogs.asp.net/fredriknormen/archive/2012/06/11/asp-net-web-api-exception-handling.aspx"&gt;ASP.NET Web API Exception Handling&lt;/a&gt;” on the ASP.NET Blog.&lt;/p&gt;

&lt;h3&gt;The mail-sending functionality&lt;/h3&gt;

&lt;p&gt;Now let’s tackle the body of the “try”. First, if we’re going to send feedback via email, we’ll probably need to gather up some credentials.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue;"&gt;const string &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;MailingAddressFrom = &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&lt;a href="mailto:app_name@contoso.com"&gt;app_name@contoso.com&lt;/a&gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;
&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;const string &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;MailingAddressTo = &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;dev_team@contoso.com&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;
&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;const string &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;SmtpHost = &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;smtp.contoso.com&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;
&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;const int &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;SmtpPort = 587;
&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;const bool &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;SmtpEnableSsl = &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;true&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;
&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;const string &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;SmtpCredentialsUsername = &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;username&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;
&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;const string &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;SmtpCredentialsPassword = &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;password&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;For the subject, let’s use the name of the app and the current date, so that it’s easy to distinguish individual feedback items.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black;"&gt;&lt;span style="background: white; color: blue;"&gt;var &lt;/span&gt;subject = &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;Sample App feedback, &amp;quot; &lt;br /&gt; &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;+ &lt;/span&gt;&lt;span style="background: white; color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;.Now.ToString(&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;MMM dd, yyyy, hh:mm tt&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;); &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;For the body, we will append the rating and the feedback. Notice how we’re using the request object to read these values, just like we would with any normal function parameters.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue;"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;body = &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;Rating: &amp;quot; &lt;br /&gt; &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;+ request.Rating + &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;\n\n&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;+ &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;Feedback:\n&amp;quot; &lt;br /&gt; &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;+ request.Feedback; &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Now we create the mail message and send it via the SmtpClient class (note that you’ll need to add a “using System.Net.Mail;” statement to the top of the file).&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: rgb(43, 145, 175);"&gt;MailMessage &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;mail = &lt;br /&gt; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;new &lt;/span&gt;&lt;span style="background: white; color: rgb(43, 145, 175);"&gt;MailMessage&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;(MailingAddressFrom, MailingAddressTo, subject, body); &lt;br /&gt;&lt;span style="background: white; color: green;"&gt;// Send as plain text, to avoid needing to escape special characters, etc. &lt;/span&gt;&lt;br /&gt;mail.IsBodyHtml = &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;false&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;smtp = &lt;br /&gt; &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;new &lt;/span&gt;&lt;span style="background: white; color: rgb(43, 145, 175);"&gt;SmtpClient&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;(SmtpHost, SmtpPort) { EnableSsl = SmtpEnableSsl, &lt;br /&gt; Credentials = &lt;br /&gt;   &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;new &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;NetworkCredential(SmtpCredentialsUsername, &lt;br /&gt; SmtpCredentialsPassword) }; &lt;br /&gt;smtp.Send(mail);&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Because we’re using a try-catch block, we know that if the code has reached past the Send command, the feedback was sent successfully. So we can return a FeedbackResponse object back to the user.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: green;"&gt;// If still here, the feedback was sent successfully.
&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;return new &lt;/span&gt;&lt;span style="background: white; color: rgb(43, 145, 175);"&gt;FeedbackResponse&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;()
{
    Status = &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;Thank you for your feedback!&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;,
    Message = &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;&amp;quot;Your feedback has been sent successfully.&amp;quot;
&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;};&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;Our controller is now done! Now we just need the client-side piece.&lt;/p&gt;

&lt;h1&gt;Back to JavaScript&lt;/h1&gt;

&lt;p&gt;Let’s return to our sendFeedback() method stub that we left in the JavaScript code in Home.js. We’re just about ready to finish the app.&lt;/p&gt;

&lt;p&gt;First, we want to disable the “send” button and the other fields while sending is underway.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black;"&gt;$(&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'.disable-while-sending'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;).prop(&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'disabled'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;, &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;true&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;); &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Next, prepare the data to send. Note that we create a JavaScript object to hold this data, but with property names (“Feedback” and “Rating”) matching the names of the FeedbackRequest fields from our .NET Controller.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: blue;"&gt;var &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;dataToPassToService = { &lt;br /&gt; Feedback: $(&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'#feedback'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;).val(), &lt;br /&gt; Rating: $(&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'#rating'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;).val() &lt;br /&gt;};&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Finally, we make a jQuery AJAX call. The URL is relative to the page form which we’re calling the request, hence we go back two levels (to escape “App/Home/”) before turning to “api/SendFeedback”. The data type is “POST”, which matches what the controller expects. For the data, we stringify the above “dataToPassToService” object, and add the appropriate content type. (Tip: While it’s not necessary for POST request, you may want to specify an explicit “cache:true” or “cache:false” for GET requests, depending on whether or not those should be cached).&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black;"&gt;$.ajax({
    url: &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'../../api/SendFeedback'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;,
    type: &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'POST'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;,
    data: JSON.stringify(dataToPassToService),
    contentType: &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'application/json;charset=utf-8'
&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;}).done(&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;(data) {
    &lt;/span&gt;&lt;span style="background: white; color: green;"&gt;// placeholder
&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;}).fail(&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;(status) {
    &lt;/span&gt;&lt;span style="background: white; color: green;"&gt;// placeholder
&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;}).always(&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;function &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;() {
    &lt;/span&gt;&lt;span style="background: white; color: green;"&gt;// placeholder
&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;});
&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;Now onto the final stretch of filling out the placeholders above. If the AJAX call succeeds, we’ll display a message to the user, using the Status and Message fields that we get from the controller’s FeedbackResponse object. Let’s substitute that into the “done” placeholder above.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black;"&gt;app.showNotification(data.Status, data.Message); &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;If the call fails (for example, you are offline), let’s add a similar notification (“fail” placeholder).&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black;"&gt;app.showNotification(&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'Error'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;, &lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'Could not communicate with the server.'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;); &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Finally, regardless of whether the call succeeded or failed, let’s re-enable the controls so that the user can try again, or send another bit of feedback, or copy-paste the feedback and send it via email. Thus, for the “always” placeholder, let’s do.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: white; color: black;"&gt;$(&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'.disable-while-sending'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;).prop(&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;'disabled'&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;, &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;false&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;); &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Our code is now officially complete.&lt;/p&gt;

&lt;h1&gt;Run it!&lt;/h1&gt;

&lt;p&gt;Let’s have a celebratory run. Press F5 to launch the project, and add some feedback text and a rating in the appropriate fields. Press “Send”. If all is well – and if you have substituted the Controller’s email account constants with appropriate credentials – you should see a notification in the UI that your feedback has been sent, and you should also receive an email with a copy of the feedback. If you’re curious about what is happening behind the covers, you can use a tool like &lt;a href="http://fiddler2.com/"&gt;Fiddler&lt;/a&gt; to analyze the serialization “magic” that’s happening behind the covers. You can also use Visual Studio to pause on breakpoints, both in the JavaScript code and in the Controller.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/7024.WebAPI_2D00_fig05_5F00_026633C5.png"&gt;&lt;img title="WebAPI-fig05" style="display: inline; background-image: none;" border="0" alt="WebAPI-fig05" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/2727.WebAPI_2D00_fig05_5F00_thumb_5F00_540CAE17.png" width="593" height="365" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 5. Fiddler trace showing data passing in and out of the web service&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The example in this post is just the tip of the iceberg: I am excited to see what apps folks will build, leveraging the flexibility and responsiveness of client-side code, and the power and security of server-side code. Please leave a comment below if you have any questions or comments.&lt;/p&gt;

&lt;p&gt;~ Michael Zlatkovsky | Program Manager, Visual Studio Tools for Office &amp;amp; Apps for Office&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10424002" width="1" height="1"&gt;</description></item><item><title>Office Store now accepting listings in four additional languages – French, German, Japanese, and Spanish</title><link>http://blogs.msdn.com/b/officeapps/archive/2013/06/04/office-store-now-accepting-listings-in-four-additional-languages-french-german-japanese-and-spanish.aspx</link><pubDate>Tue, 04 Jun 2013 15:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10423532</guid><dc:creator>Krishnan Raghupathi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officeapps/rsscomments.aspx?WeblogPostID=10423532</wfw:commentRss><comments>http://blogs.msdn.com/b/officeapps/archive/2013/06/04/office-store-now-accepting-listings-in-four-additional-languages-french-german-japanese-and-spanish.aspx#comments</comments><description>&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;We&amp;rsquo;re excited to announce that the Office Store is now accepting listings in four additional languages!&lt;/p&gt;
&lt;p&gt;Whether you have existing apps listed in the Office Store or you&amp;rsquo;re ready to add your first new app, you can now list additional languages for your app: French, German, Japanese, and Spanish. In early summer this year, we plan to open stores for markets that are associated with these four languages as well as the English-language markets beyond the United States. Now is a great time to be among the first apps listed in these new markets.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Three steps to preparing your app for release in additional languages&lt;/strong&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;1. Update your app&amp;rsquo;s manifest to declare language and locale support. Depending on the app type, you declare language support in the manifest with different manifest elements. For apps for Office, see &lt;a href="http://msdn.microsoft.com/en-us/library/office/apps/fp161083.aspx"&gt;Designing an app for Office for specific locales&lt;/a&gt;. For apps for SharePoint, see &lt;span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/apps/fp179918.aspx"&gt;Explore the app manifest and the package of an app for SharePoint&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;Note: &lt;/strong&gt;The maximum number of allowable locales that can be declared for apps in the Office Store is 25.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="padding-left: 30px;"&gt;2. Add localized app metadata in Seller Dashboard to provide a language-specific Store experience. When submitting your app in the Seller Dashboard, you can select 1&amp;ndash;5 languages that your app will be listed in. &lt;a href="http://msdn.microsoft.com/en-us/library/jj552465.aspx"&gt;Learn how to add apps in the Microsoft Seller Dashboard&lt;/a&gt;&lt;em&gt;. &lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;Note: &lt;/strong&gt;You can declare more languages in your app's package than are available for submission in the Seller Dashboard.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="padding-left: 30px;"&gt;3. Localize your app functionality. The apps that offer the best customer experience are localized for the language for which they are submitted. To learn more see &lt;a href="http://msdn.microsoft.com/en-us/library/office/apps/dn221993.aspx"&gt;How to: Build a localized app for Office&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/office/apps/fp179919.aspx"&gt;How to: Localize apps for SharePoint&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For more information about how to submit an app to the Office Store, see &lt;a href="http://msdn.microsoft.com/en-us/library/jj552465.aspx"&gt;How to: Add apps in the Microsoft Seller Dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here are a few important things to keep in mind on the availability of apps in these new markets.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;1. All apps that have English as a submission language in the Seller Dashboard:&lt;/p&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="padding-left: 30px;"&gt;Will be published and available, upon validation approval, in the US-based Office Store.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-left: 30px;"&gt;Will be distributed to all markets as they are opened. You can explicitly indicate markets where you don't want to distribute your app using the Seller Dashboard. For more information, see &lt;a href="http://msdn.microsoft.com/en-us/library/jj552465.aspx"&gt;How to: Add apps in the Microsoft Seller Dashboard&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p style="padding-left: 30px;"&gt;2. Apps which do not include English as a submitted language in Seller Dashboard can reach validation approval, but will not be available in a store until the additional language-specific store locales open in early summer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-&amp;nbsp;Krishnan Raghupathi | Program Manager, Office Store Team&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10423532" width="1" height="1"&gt;</description></item><item><title>New Office developer blogs network and Office developer highlights at TechEd North America 2013</title><link>http://blogs.msdn.com/b/officeapps/archive/2013/05/31/announcing-new-office-dev-blog-network-and-developer-highlights-teched.aspx</link><pubDate>Fri, 31 May 2013 20:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10422655</guid><dc:creator>Nina Ruchirat</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officeapps/rsscomments.aspx?WeblogPostID=10422655</wfw:commentRss><comments>http://blogs.msdn.com/b/officeapps/archive/2013/05/31/announcing-new-office-dev-blog-network-and-developer-highlights-teched.aspx#comments</comments><description>&lt;h1&gt;Blogs for Office developers network&lt;/h1&gt;
&lt;p&gt;We've launched a new top-level blog network that joins all the primary Microsoft-supported Office developer blogs in one central place.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/b/officedevblogs"&gt;http://blogs.msdn.com/b/officedevblogs&lt;/a&gt;&lt;/p&gt;
&lt;div style="text-align: center; padding-bottom: 10px; font-size: 80%;"&gt;&lt;a href="http://blogs.msdn.com/b/officedevblogs"&gt;&lt;img style="border: 0px currentcolor; display: inline; background-image: none;" title="Figure 1. Office developer blog network main page" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/6724.clip_5F00_image001_5F00_3EEB9DD3.png" alt="Figure 1. Office developer blog network main page" width="550" height="152" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;Figure 1. Office developer blog network main page&lt;/div&gt;
&lt;p&gt;At the top level, you can view a combined summary feed of all four blogs in the network, or you can easily navigate to each individual blog where you can subscribe to posts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/officeapps"&gt;Apps for Office and SharePoint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/officedevdocs"&gt;Office and Office 365 dev blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/sharepointdev"&gt;SharePoint dev blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/exchangedev"&gt;Exchange dev blog &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We hope that this effort will create a more connected experience for developers who work across different Office products.&lt;/p&gt;
&lt;p&gt;Please share your thoughts and feedback on this new blog network structure in the comments of this post&amp;mdash;we would love to hear from you!&lt;/p&gt;
&lt;h1&gt;TechEd highlights for Office and SharePoint developers&lt;/h1&gt;
&lt;p&gt;From June 3&amp;ndash;6 in New Orleans, thousands of developers and IT professionals will converge at the Ernest N. Morial Convention Center for &lt;a href="http://northamerica.msteched.com/"&gt;&lt;strong&gt;TechEd North America 2013&lt;/strong&gt;&lt;/a&gt; to network and learn about Microsoft technologies, tools, platforms, and services.&lt;/p&gt;
&lt;p&gt;There will be a lot of great programming for Office and SharePoint developers.&lt;/p&gt;
&lt;p&gt;If you are attending, be sure to check out the content in these two tracks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Office 365 &amp;amp; Unified Communications (OUC)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SharePoint &amp;amp; Enterprise Social (SES)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are a Cloud App Model developer, you won't want to miss this foundational keynote session:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/FDN04"&gt;&lt;strong&gt;Office &amp;amp; SharePoint 2013 Development:&amp;nbsp; Introduction to the new Cloud App Model&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;Speaker: &lt;a href="http://channel9.msdn.com/Events/Speakers/brian-jones"&gt;&lt;strong&gt;Brian Jones&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;strong&gt;Monday, June 3rd 11:00am&amp;ndash;12:00pm &lt;br /&gt;&lt;/strong&gt;Session #FDN04&lt;/p&gt;
&lt;p&gt;&lt;em&gt;With Office and SharePoint 2013, we introduced a new unified Cloud App Model based on web standards. It provides a consistent way to rapidly build and deploy apps that integrate with the tools and web hosting platforms you are most familiar and comfortable with. In this session, you will learn about the ways in which you can enhance Office and SharePoint with light-touch, robust web solutions; deploy apps into Office and SharePoint for easy discovery and sharing; and manage the portfolio of app investments you&amp;rsquo;ve made across your enterprise.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Several hands-on labs are offered, including:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/SES-H306"&gt;&lt;strong&gt;Building SharePoint-Hosted Apps with "Napa&lt;/strong&gt;&lt;/a&gt;&lt;a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/SES-H306"&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; (#SES-H306)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And be sure to catch these 0&amp;ndash;60 sessions as well:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/SES-B201"&gt;&lt;strong&gt;0 to 60: Developing Apps for Microsoft Office 2013&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; (#SES-B201)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/SES-B202"&gt;&lt;strong&gt;0 to 60: Developing Apps for Microsoft SharePoint 2013&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; (#SES-B202)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the TechExpo Hall, the &lt;strong&gt;Microsoft Solutions Experience&lt;/strong&gt; area will have a robust section for Office, SharePoint, Exchange, and related products, including the scenario booths "&lt;strong&gt;Build Apps&lt;/strong&gt;" and "&lt;strong&gt;Enterprise Social,&lt;/strong&gt;" as well as deep-dive areas for Office, Office 365, Exchange, SharePoint, and Project.&lt;/p&gt;
&lt;p&gt;Nine members of Office Content Publishing will be attending and staffing the booths, including myself. You can find more info on our activities in this post on the Office IT Pro blog:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/b/office_resource_kit/archive/2013/05/30/join-us-at-teched-north-america-2013-in-new-orleans.aspx"&gt;&lt;strong&gt;Join us at TechEd North America 2013 in New Orleans&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Also - for Exchange here is a great post with&amp;nbsp;a list of sessions in that track:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a title="Exchange at TechEd North America 2013" href="http://blogs.technet.com/b/exchange/archive/2013/05/31/exchange-at-teched-north-america-2013.aspx"&gt;Exchange at TechEd North America 2013&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We are looking forward to networking with TechEd attendees! If you are on Twitter, be sure to track the hashtag &lt;strong&gt;&lt;a title="#msTechEd" href="https://twitter.com/search?q=%23msteched"&gt;#msTechEd&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you are unable to attend TechEd North America in person, you still have a chance to tune in for the keynote and technical sessions. &lt;a href="http://click.email.microsoftemail.com/?qs=43ddf7bb14af010d5a05daad412262420c8a82049b712083e4378f89d43408f73695683e265c47ab"&gt;Register here for the live streaming keynote and sessions&lt;/a&gt; on Channel 9.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10422655" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Office+365/">Office 365</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Exchange/">Exchange</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/TechEd/">TechEd</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/blog+network/">blog network</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/SharePoint/">SharePoint</category></item><item><title>Add search capabilities to your apps for SharePoint</title><link>http://blogs.msdn.com/b/officeapps/archive/2013/05/30/add-search-capabilities-to-your-apps-for-sharepoint.aspx</link><pubDate>Thu, 30 May 2013 13:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10422401</guid><dc:creator>Chakkaradeep Chandran</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officeapps/rsscomments.aspx?WeblogPostID=10422401</wfw:commentRss><comments>http://blogs.msdn.com/b/officeapps/archive/2013/05/30/add-search-capabilities-to-your-apps-for-sharepoint.aspx#comments</comments><description>&lt;p&gt;&lt;i&gt;With Office Developer Tools for Visual Studio 2012, developers can deploy custom search configurations to a search-enabled site. Custom search configurations include all customized query rules, result sources, result types, and site search settings.&lt;/i&gt;&lt;/p&gt; &lt;p&gt;The MSDN article &lt;a href="http://msdn.microsoft.com/en-us/library/office/apps/dn194077.aspx"&gt;How to: Deploy custom search configurations by using Visual Studio&lt;/a&gt; explains how to deploy custom search configurations by using Visual Studio with an app. The article focuses on creating a custom Microsoft Developer Network (MSDN) query source and a custom query rule, which can help you get results from the MSDN website. The custom search configuration is then exported from the SharePoint site, imported into Visual Studio, and deployed with the app.&lt;/p&gt; &lt;p&gt;Exporting and deploying custom search configurations only deploys the search configurations to the respective SharePoint site. To provide a better search experience, we can easily extend the sample app to include a custom search results page that will display results from the custom search configuration deployed with the app. This is great, especially if you want to deliver a customized search experience to your users.&lt;/p&gt; &lt;h3&gt;Getting ready &lt;/h3&gt; &lt;p&gt;First, make sure you have followed the steps in the &lt;a href="http://msdn.microsoft.com/en-us/library/office/apps/dn194077.aspx"&gt;MSDN article&lt;/a&gt; to create the app with the custom search configuration imported into Visual Studio.&lt;/p&gt; &lt;p&gt;Figure 1 shows how my Solution Explorer appeared after I followed the steps in the MSDN article.&lt;/p&gt; &lt;div style="font-size: 80%; padding-bottom: 10px; text-align: center"&gt;&lt;img title="clip_image002" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clip_image002" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/5047.clip_5F00_image002_5F00_4349724E.png" width="344" height="355"&gt;&lt;br&gt;Figure 1. MSDN Search Sample Solution Explorer&lt;/div&gt; &lt;h4&gt;Considerations to deploying your search app to a Developer Site&lt;/h4&gt; &lt;p&gt;You can deploy the app to any Developer Site where the search features are enabled. However, that will not provide the full-fledged search experience for your app. Deploying the app to an Enterprise Search Center site will integrate the app into your Search Center to provide the customized search experience.&lt;/p&gt; &lt;p&gt;In this blog post, we will deploy the app to an Enterprise Search Center. Follow the steps in &lt;a href="http://blogs.msdn.com/b/officeapps/archive/2013/01/21/quickly-start-developing-apps-with-the-new-0-60-developer-experience.aspx"&gt;Quickly start developing apps with the new “0-60” developer experience&lt;/a&gt; to enable side loading of apps in the Search Center site. Side loading allows Visual Studio to deploy an app to a SharePoint site. This is required because the Enterprise Search Center is not a Developer Site.&lt;/p&gt; &lt;h4&gt;App permissions&lt;/h4&gt; &lt;p&gt;In the MSDN how-to, the app is required to have Full Control on the site collection. This is required if the custom configurations are deployed to the site collection. However, this is not required if you want to deploy the custom configurations in the app (that is, the app web) itself.&lt;/p&gt; &lt;p&gt;In the article, the &lt;b&gt;DeployToParent&lt;/b&gt; attribute is set to &lt;b&gt;true&lt;/b&gt; in the search schema. You can change it back to &lt;b&gt;false&lt;/b&gt; if you want to deploy the configurations in the app.&lt;/p&gt; &lt;p&gt;In this blog post, we will change the &lt;b&gt;DeployToParent&lt;/b&gt; to &lt;b&gt;false&lt;/b&gt; so that the custom search configurations are included in the app, and thus no special permissions are required to deploy the custom search configurations.&lt;/p&gt; &lt;h3&gt;MSDN search results page&lt;/h3&gt; &lt;p&gt;We can now create the page that will return search results from the MSDN query source. &lt;/p&gt; &lt;p&gt;Instead of creating a new page, let’s modify the Default.aspx.&lt;/p&gt; &lt;p&gt;Rename &lt;b&gt;Default.aspx&lt;/b&gt; to &lt;b&gt;Results.aspx&lt;/b&gt;. Open &lt;b&gt;Results.aspx&lt;/b&gt; and perform the following:&lt;/p&gt; &lt;p&gt;1. Paste the following code at the top, just before the &lt;i&gt;PlaceHolderAdditionalPageHead&lt;/i&gt; content placeholder:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background: yellow; color: black"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;@ &lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;Register &lt;br&gt;&lt;/span&gt;&lt;span style="background: white; color: red"&gt;    TagPrefix&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="Search" &lt;br&gt;    &lt;/span&gt;&lt;span style="background: white; color: red"&gt;Namespace&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="Microsoft.Office.Server.Search.WebControls" &lt;br&gt;    &lt;/span&gt;&lt;span style="background: white; color: red"&gt;Assembly&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="Microsoft.Office.Server.Search, &lt;br&gt;            Version=15.0.0.0, &lt;br&gt;            Culture=neutral, &lt;br&gt;            PublicKeyToken=71e9bce111e9429c" &lt;/span&gt;&lt;span style="background: yellow; color: black"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black"&gt;
&lt;/span&gt;&lt;span style="background: yellow; color: black"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;@ &lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;Import &lt;/span&gt;&lt;span style="background: white; color: red"&gt;Namespace&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="Microsoft.Office.Server.Search.Internal.UI" &lt;/span&gt;&lt;span style="background: yellow; color: black"&gt;%&amp;gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;2. Edit the title text in the &lt;i&gt;PlaceHolderPageTitleInTitleArea&lt;/i&gt; content placeholder:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Search Microsoft Developer Network&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;3. Paste the following code inside the &lt;i&gt;PlaceHolderLeftNavBar&lt;/i&gt; content placeholder:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;div &lt;/span&gt;&lt;span style="background: white; color: red"&gt;class&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="ms-sitesearch-refinement"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;Search&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;:&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;RefinementScriptWebPart &lt;/span&gt;&lt;span style="background: white; color: red"&gt;ID&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="RefinementScriptWebPart1" 
&lt;/span&gt;&lt;span style="background: white; color: red"&gt;        runat&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="server" 
&lt;/span&gt;&lt;span style="background: white; color: red"&gt;        ChromeType&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="None" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;div&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This code will render the refinement panel in the page.&lt;/p&gt;
&lt;p&gt;4. Paste the following code inside the &lt;i&gt;PlaceHolderMain&lt;/i&gt; content placeholder:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background: white; color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;div &lt;/span&gt;&lt;span style="background: white; color: red"&gt;class&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;='ms-srch-siteSearchResults'&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;div &lt;/span&gt;&lt;span style="background: white; color: red"&gt;id&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="searchInputBox"&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;Search&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;:&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;SearchBoxScriptWebPart &lt;/span&gt;&lt;span style="background: white; color: red"&gt;ID&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="SearchBoxScriptWebPart1" 
     &lt;/span&gt;&lt;span style="background: white; color: red"&gt;runat&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="server" 
            &lt;/span&gt;&lt;span style="background: white; color: red"&gt;PageTitlePrefix&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="MSDN Search Results" 
            &lt;/span&gt;&lt;span style="background: white; color: red"&gt;RenderTemplateId&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="~sitecollection/_catalogs/masterpage/&lt;br&gt;Display Templates/Search/Control_SearchBox.js" 
            &lt;/span&gt;&lt;span style="background: white; color: red"&gt;EmitStyleReference&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="false" 
            &lt;/span&gt;&lt;span style="background: white; color: red"&gt;ChromeType&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="None"                 
            &lt;/span&gt;&lt;span style="background: white; color: red"&gt;ResultsPageAddress&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="Results.aspx" 
            &lt;/span&gt;&lt;span style="background: white; color: red"&gt;ShowPreferencesLink&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="false"/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;div&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;br &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;br &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;Search&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;:&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;ResultScriptWebPart &lt;/span&gt;&lt;span style="background: white; color: red"&gt;ID&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="ResultScriptWebPart1" 
        &lt;/span&gt;&lt;span style="background: white; color: red"&gt;runat&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="server" 
        &lt;/span&gt;&lt;span style="background: white; color: red"&gt;ChromeType&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="None" 
        &lt;/span&gt;&lt;span style="background: white; color: red"&gt;UseSharedDataProvider&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="false" 
        &lt;/span&gt;&lt;span style="background: white; color: red"&gt;ShowAdvancedLink&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="false" 
        &lt;/span&gt;&lt;span style="background: white; color: red"&gt;ScrollToTopOnRedraw&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="true" 
        &lt;/span&gt;&lt;span style="background: white; color: red"&gt;ShowUpScopeMessage&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="true"
        &lt;/span&gt;&lt;span style="background: white; color: red"&gt;ShowPreferencesLink&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="false" 
        &lt;/span&gt;&lt;span style="background: white; color: red"&gt;UseSimplifiedQueryBuilder&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="false" 
        &lt;/span&gt;&lt;span style="background: white; color: red"&gt;DataProviderJSON&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="{ &amp;amp;quot;SourceName&amp;amp;quot;:&amp;amp;quot;MSDN Query Source&lt;br&gt;&amp;amp;quot;, &amp;amp;quot;SourceLevel&amp;amp;quot;:&amp;amp;quot;SPWeb&amp;amp;quot; }"
        &lt;/span&gt;&lt;span style="background: white; color: red"&gt;ItemTemplateId&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;="~sitecollection/_catalogs/masterpage/&lt;br&gt;Display Templates/Search/Item_Default.js"  /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;div&lt;/span&gt;&lt;span style="background: white; color: blue"&gt;&amp;gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The code performs the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adds two Web Parts&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.office.server.search.webcontrols.searchboxscriptwebpart.aspx"&gt;SearchBoxScriptWebPart&lt;/a&gt; adds a search input box and initiates the query.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.office.server.search.webcontrols.resultscriptwebpart.aspx"&gt;ResultsScriptWebPart&lt;/a&gt; displays the search results.&lt;/li&gt;&lt;/ul&gt;
&lt;li&gt;Sets the MSDN Query Source as the data provider for the &lt;b&gt;ResultScriptWebParts&lt;/b&gt; using the &lt;b&gt;DataProviderJSON&lt;/b&gt; property. It is a JavaScript Object Notation (JSON) serialized version of the data provider:&lt;br&gt;&lt;i&gt;{ “SourceName”: ”&amp;lt;query-source-name&amp;gt;”,”’SourceLevel”:”SPWeb”}&lt;br&gt;&lt;/i&gt;This enables the &lt;b&gt;ResultsScriptWebPart&lt;/b&gt; to return the search results by querying the data source provided.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;5. Open Content\App.css and paste the following custom styles:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background: white; color: maroon"&gt;#searchInputBox &lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
    &lt;/span&gt;&lt;span style="background: white; color: red"&gt;float&lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;left !important&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
}

&lt;/span&gt;&lt;span style="background: white; color: maroon"&gt;.ms-srch-upscope-top &lt;/span&gt;&lt;span style="background: white; color: black"&gt;{
    &lt;/span&gt;&lt;span style="background: white; color: red"&gt;margin&lt;/span&gt;&lt;span style="background: white; color: black"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue"&gt;0px !important&lt;/span&gt;&lt;span style="background: white; color: black"&gt;;
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Modify the DeployToParent attribute&lt;/h3&gt;
&lt;p&gt;Open &lt;b&gt;SearchConfigurationSettings.xml&lt;/b&gt; and modify the value of the &lt;b&gt;DeployToParent&lt;/b&gt; attribute to &lt;b&gt;false&lt;/b&gt;&lt;i&gt;.&lt;/i&gt;&lt;/p&gt;
&lt;div style="font-size: 80%; padding-bottom: 10px; text-align: center"&gt;&lt;img title="clip_image004" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clip_image004" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/2804.clip_5F00_image004_5F00_3C2A35D6.png" width="575" height="104"&gt;&lt;br&gt;Figure 2. DeployToParent attribute&lt;/div&gt;
&lt;h3&gt;Change app permissions&lt;/h3&gt;
&lt;p&gt;Because we are deploying the search configurations in the app itself, we no longer require the app to request special permissions.&lt;/p&gt;
&lt;p&gt;1. Open AppManifest.xml.&lt;/p&gt;
&lt;p&gt;2. Switch to the &lt;b&gt;Permissions&lt;/b&gt; tab.&lt;/p&gt;
&lt;p&gt;3. Delete the permission scoped to &lt;b&gt;Site Collection&lt;/b&gt;.&lt;/p&gt;
&lt;h3&gt;Verify your app&lt;/h3&gt;
&lt;p&gt;Press F5 to start debugging your app. &lt;/p&gt;
&lt;p&gt;If the app is deployed successfully, Visual Studio will open the app in your browser.&lt;/p&gt;
&lt;div style="font-size: 80%; padding-bottom: 10px; text-align: center"&gt;&lt;img title="clip_image006" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clip_image006" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/3465.clip_5F00_image006_5F00_3100AB8C.png" width="780" height="871"&gt;&lt;br&gt;Figure 3. MSDN Search Sample&lt;/div&gt;
&lt;p&gt;Type &lt;b&gt;SharePoint 2013 app development&lt;/b&gt; in the &lt;b&gt;Search&lt;/b&gt; box and press Enter.&lt;/p&gt;
&lt;p&gt;Search results will be returned from MSDN and displayed in the page.&lt;/p&gt;
&lt;div style="font-size: 80%; padding-bottom: 10px; text-align: center"&gt;&lt;img title="clip_image007" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clip_image007" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/7607.clip_5F00_image007_5F00_10E59ECF.png" width="799" height="866"&gt;&lt;br&gt;Figure 4. Search results&lt;/div&gt;
&lt;h3&gt;Enterprise Search site integration&lt;/h3&gt;
&lt;p&gt;Because we deployed this app to an Enterprise Search Center, the app is now integrated with the Search Center.&lt;/p&gt;
&lt;p&gt;Navigate to your Developer Site by clicking the top-left link (&lt;b&gt;Enterprise Search Center Dev Site&lt;/b&gt; in Figure 4). Because it is deployed to an Enterprise Search Center, clicking the Developer Site takes you to the Enterprise Search Center site. &lt;/p&gt;
&lt;p&gt;Type &lt;b&gt;SharePoint 2013&lt;/b&gt;, and press Enter to search.&lt;/p&gt;
&lt;p&gt;As you can see from the following screen shot (Figure 5), we get local results. Notice we have a query source named &lt;b&gt;MSDN&lt;/b&gt; added. This is the app we just deployed!&lt;/p&gt;
&lt;div style="font-size: 80%; padding-bottom: 10px; text-align: center"&gt;&lt;img title="clip_image009" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clip_image009" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/8267.clip_5F00_image009_5F00_70CA9211.png" width="681" height="533"&gt;&lt;br&gt;Figure 5. Enterprise Search Center results&lt;/div&gt;
&lt;p&gt;Clicking &lt;b&gt;MSDN&lt;/b&gt; will open the app with search results for the query term!&lt;/p&gt;
&lt;div style="font-size: 80%; padding-bottom: 10px; text-align: center"&gt;&lt;img title="clip_image010" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clip_image010" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/8015.clip_5F00_image010_5F00_50AF8554.png" width="788" height="850"&gt;&lt;br&gt;Figure 6. MSDN search results&lt;/div&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;We now have a great app that is integrated into the default search experience to query the MSDN site. &lt;/p&gt;
&lt;p&gt;You can further extend this sample by including a custom result block or a custom display template.&lt;/p&gt;
&lt;p&gt;Feel free to leave a comment if you have any questions or feedback regarding building search apps, and don’t forget to let us know if you have any search apps published too!&lt;/p&gt;
&lt;p&gt;Some helpful links below to get you started with search configurations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/jj871676.aspx"&gt;Manage query rules in SharePoint Server 2013&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/jj871675.aspx"&gt;Export and import customized search configuration settings in SharePoint Server 2013&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/apps/dn194077.aspx"&gt;How to: Deploy custom search configurations by using Visual Studio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.office.com/b/sharepoint/archive/2012/10/30/introducing-sharepoint-2013-search-result-types-and-display-templates.aspx"&gt;Introducing SharePoint 2013 Search Result Types and Display Templates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/jj945138.aspx"&gt;SharePoint 2013 Design Manager display templates&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10422401" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Apps+for+SharePoint/">Apps for SharePoint</category></item><item><title>Localizing host web features in apps for SharePoint</title><link>http://blogs.msdn.com/b/officeapps/archive/2013/05/29/localizing-host-web-features-in-apps-for-sharepoint.aspx</link><pubDate>Wed, 29 May 2013 13:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10421591</guid><dc:creator>Ricardo Loo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officeapps/rsscomments.aspx?WeblogPostID=10421591</wfw:commentRss><comments>http://blogs.msdn.com/b/officeapps/archive/2013/05/29/localizing-host-web-features-in-apps-for-sharepoint.aspx#comments</comments><description>&lt;p&gt;&lt;i&gt;Visual Studio 2012 can’t localize host web features by itself. Learn about a tool that you can use to localize your host web features, such as app parts and custom actions.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;SharePoint is used in many countries, regions, and languages. Because of this, you may want to maximize your reach to potential customers by localizing your apps. There are resources out there that can help you localize your app, like &lt;a href="http://msdn.microsoft.com/library/fp179919.aspx"&gt;How to: Localize apps for SharePoint&lt;/a&gt; and &lt;a href="http://code.msdn.microsoft.com/officeapps/SharePoint-2013-Bookstore-328060fc"&gt;Localize the app web, host web, and remote components of an app&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In this post, I want to focus in some components that provide an important link from the host web to the app itself. Host web features, such as app parts and custom actions, are vital in connecting experiences in SharePoint to your app. Localizing host web features is of the utmost importance.&lt;/p&gt;  &lt;p&gt;Localizing app parts and custom actions can be a little difficult because Visual Studio 2012 does not properly package resource files for these features. If you try to use a resource string in an app part, the app part displays the resource string name, and not the value as expected. The following image shows the result of trying to localize an app part by using the strings in the host web resource file.&lt;/p&gt;  &lt;div style="text-align: center; padding-bottom: 10px; font-size: 80%;"&gt;&lt;img title="Figure 1. Failed attempt to localize an app part with strings in the host web resource file" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="Figure 1. Failed attempt to localize an app part with strings in the host web resource file" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/7624.clip_5F00_image002_5F00_0802867D.jpg" width="624" height="232" /&gt; &lt;br/&gt;Figure 1. Failed attempt to localize an app part with strings in the host web resource file&lt;/div&gt;  &lt;p&gt;However, the workaround is not too complicated. Resource files are actually included in the app package. The only missing parts are the OPC (Open Packaging Conventions) relationships to resource files in the app package. OPC relationships define an association between two items—in this case, the resource file and the package.&lt;/p&gt;  &lt;p&gt;You can manually add the relationships to the app package, as explained in &lt;a href="http://msdn.microsoft.com/library/fp179919.aspx"&gt;How to: Localize apps for SharePoint&lt;/a&gt;. But manually adding the relationships prevents you from using F5 to automatically build, deploy, and debug your app. To be able to use F5 to debug a localized app, you can use a program or script in the pre-deployment event of the app project in Visual Studio. The &lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99/8030.AddRelsToAppPackage.zip"&gt;sample project in this article&lt;/a&gt; is a Visual Studio solution that does exactly what we need: it adds the missing relationships to resource files in the app package.&lt;/p&gt;  &lt;p&gt;You can build the &lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99/8030.AddRelsToAppPackage.zip"&gt;AddRelsToAppPackage project&lt;/a&gt; and use the compiled executable in the pre-deployment event of your app for SharePoint project. Just follow these steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Build the AddRelsToAppPackage project.&lt;/li&gt;    &lt;li&gt;Copy the executable file to the root folder of your app for SharePoint project.&lt;/li&gt;    &lt;li&gt;Right-click your app for SharePoint project, and click &lt;b&gt;Properties&lt;/b&gt;.&lt;/li&gt;    &lt;li&gt;Click the &lt;b&gt;SharePoint&lt;/b&gt; property page.&lt;/li&gt;    &lt;li&gt;Type the following command in the pre-deployment command line:      &lt;br /&gt;&amp;quot;$(ProjectDir)\AddRelsToAppPackage.exe&amp;quot; &amp;quot;$(TargetDir) &amp;quot;       &lt;br /&gt;&lt;b&gt;Important:&lt;/b&gt; The trailing space after &lt;b&gt;$(TargetDir)&lt;/b&gt; is required.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Now you can debug your app for SharePoint by using F5. The following image shows a localized app part that uses the workaround.&lt;/p&gt;  &lt;div style="text-align: center; padding-bottom: 10px; font-size: 80%;"&gt;&lt;img title="Figure 2. Successfully localized app part using the AddRelsToAppPackage tool" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="Figure 2. Successfully localized app part using the AddRelsToAppPackage tool" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/6646.clip_5F00_image004_5F00_19DF1A4A.jpg" width="624" height="221" /&gt; &lt;br/&gt;Figure 2. Successfully localized app part using the AddRelsToAppPackage tool&lt;/div&gt;  &lt;p&gt;The &lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99/8030.AddRelsToAppPackage.zip"&gt;AddRelsToAppPackage project&lt;/a&gt; should meet the basic requirements to localize host web features in apps for SharePoint. Feel free to edit the Visual Studio solution if your app has additional requirements. As a reference, here are the tasks performed by the AddRelsToAppPackage project:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Opens the folder provided as the first parameter&lt;/li&gt;    &lt;li&gt;Retrieves the first file that matches the search pattern *.*app&lt;/li&gt;    &lt;li&gt;Extracts the file that includes the OPC relationships for the host web features&lt;/li&gt;    &lt;li&gt;Loads the contents of the file in an &lt;b&gt;Xml&lt;/b&gt; object&lt;/li&gt;    &lt;li&gt;Adds an OPC relationship to the &lt;b&gt;Xml&lt;/b&gt; object for every resource file in the root folder of the app package&lt;/li&gt;    &lt;li&gt;Writes the content back to the file&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I hope you are successful in localizing your app for SharePoint. By localizing your app, you can provide a better experience and reach more customers.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10421591" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Apps+for+SharePoint/">Apps for SharePoint</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Tools/">Tools</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Visual+Studio/">Visual Studio</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Office+Developer+Tools/">Office Developer Tools</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/SharePoint+Tools/">SharePoint Tools</category></item><item><title>June 3 session: Develop apps for SharePoint 2013 with Visual Studio 2012</title><link>http://blogs.msdn.com/b/officeapps/archive/2013/05/28/june-3-session-develop-apps-for-sharepoint-2013-with-visual-studio-2012.aspx</link><pubDate>Tue, 28 May 2013 13:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10421254</guid><dc:creator>Xiaoying Guo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officeapps/rsscomments.aspx?WeblogPostID=10421254</wfw:commentRss><comments>http://blogs.msdn.com/b/officeapps/archive/2013/05/28/june-3-session-develop-apps-for-sharepoint-2013-with-visual-studio-2012.aspx#comments</comments><description>&lt;p&gt;My name is Xiaoying Guo, and I’m a program manager on the Microsoft Office Developer Tools team in Visual Studio. On June 3, I’m giving a talk on building apps for SharePoint using Visual Studio 2012. The talk is organized by the .NET Developers Association and will be held in Building 40 on the Microsoft Redmond campus. You can find more information about the session on the &lt;a href="http://www.meetup.com/NET-Developers-Association/events/112930162/"&gt;.NET Developers Association site&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;If you have heard about the new app model in SharePoint 2013, but you are wondering how you can actually build apps, this is the right session for you. In this demo-heavy session, you will learn how to best use Office Developer Tools for Visual Studio 2012 to build great apps for SharePoint. We will explore the SharePoint development experience and see the first-class support for common app features, including client Web Parts, custom actions, remote event receivers, and more. You will also learn how to use Team Foundation Server (TFS) for apps for SharePoint continuous integration.&lt;/p&gt;  &lt;p&gt;I’m looking forward to seeing you there!&lt;/p&gt;  &lt;p&gt;Xiaoying Guo&lt;/p&gt;  &lt;p&gt;Program Manager, Office Developer Tools&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10421254" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Apps+for+SharePoint/">Apps for SharePoint</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Tools/">Tools</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Announcements/">Announcements</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Visual+Studio/">Visual Studio</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Office+Developer+Tools/">Office Developer Tools</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/SharePoint+Tools/">SharePoint Tools</category></item><item><title>Office and SharePoint 2013 Continuous Integration Using Team Foundation Service and Office 365</title><link>http://blogs.msdn.com/b/officeapps/archive/2013/05/22/office-and-sharepoint-2013-continuous-integration-using-team-foundation-service-and-office-365.aspx</link><pubDate>Wed, 22 May 2013 13:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10419696</guid><dc:creator>Xiaoying Guo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officeapps/rsscomments.aspx?WeblogPostID=10419696</wfw:commentRss><comments>http://blogs.msdn.com/b/officeapps/archive/2013/05/22/office-and-sharepoint-2013-continuous-integration-using-team-foundation-service-and-office-365.aspx#comments</comments><description>&lt;p&gt;&lt;i&gt;When your team is collaborating on a project, you need a regular and reliable development process to ensure smooth delivery while maintaining high quality. This process typically includes frequent integrations from team members, regular builds, and testing against the new build to measure quality. Continuous integration is a great way to manage this kind of process. &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;In SharePoint development, continuous integration has historically meant setting up a SharePoint server together with a build server in your organization to get regular builds and run tests on it. With the launch of Office 365 and Team Foundation Service (TFS), this onerous setup is no longer required. Instead, you can simply sign-up for each of these services. In this post, we’ll walk through configuring these services so that you can enable continuous integration for your projects.&lt;/p&gt;  &lt;h1&gt;Get an Office 365 Developer account&lt;/h1&gt;  &lt;p&gt;To develop, test, and deploy apps for Office and SharePoint, you can sign up for an Office 365 Developer Site. Follow the instructions in &lt;a href="http://msdn.microsoft.com/en-us/library/office/apps/fp179924"&gt;Sign up for an Office 365 Developer Site&lt;/a&gt; to start your free trial.&lt;/p&gt;  &lt;h1&gt;Get your Team Foundation Service account&lt;/h1&gt;  &lt;p&gt;Team Foundation Service lets you plan projects, collaborate with your team, and manage your code online from anywhere without needing to set up your own Team Foundation server. Instead, it stores your source code and work items in the cloud. You can check your code directly into the cloud through Team Foundation Service using Visual Studio or Eclipse, and you can manage your work items and bugs in the browser.&lt;/p&gt;  &lt;p&gt;Team Foundation Service offers a free plan for up to five users per account. It provides features including version control (through Team Foundation Version Control or Git), work item tracking, agile planning tools, feedback management, and build and test management. Go to the &lt;a href="http://tfs.visualstudio.com/"&gt;Team Foundation Service site&lt;/a&gt; to get started. The cloud-hosted build service on Team Foundation Service is preconfigured with the right environment for apps for Office and SharePoint 2013, and also for SharePoint 2010 or 2013 farm and sandboxed solutions. &lt;/p&gt;  &lt;p&gt;Note that the build machines on Team Foundation Service can access only public visible SharePoint (and web) servers. This means that your target SharePoint site should be either on Office 365 (for apps) or on a SharePoint virtual machine (VM) in the cloud (for SharePoint farm and sandboxed solutions). &lt;/p&gt;  &lt;h1&gt;Start your continuous integration on Team Foundation Service &lt;/h1&gt;  &lt;p&gt;Earlier this year, we shipped &lt;a href="http://www.microsoft.com/visualstudio/eng/office-dev-tools-for-visual-studio"&gt;Office Developer Tools for Visual Studio 2012&lt;/a&gt; for developing apps for Office and SharePoint 2013. At the same time, we also published a CodePlex project to support continuous integration for Office and SharePoint 2013 projects using TFS 2012: see &lt;a href="https://officesharepointci.codeplex.com/"&gt;Office/SharePoint 2013 Continuous Integration with TFS 2012&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;This CodePlex project contains a set of Windows PowerShell scripts for deployment and a custom TFS Build workflow template, which lets you build and deploy (for testing purpose) apps for Office and SharePoint 2013 projects using TFS 2012. Here’s all you need to do:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Check the files (deployment scripts and workflow template) into the root of your source control team project. &lt;/li&gt;    &lt;li&gt;Update the &lt;b&gt;parameters.ps1&lt;/b&gt; file in the project to specify the parameters used for deployment, including your SharePoint site URL and your credentials.&lt;/li&gt;    &lt;li&gt;Create a new build definition using &lt;b&gt;OfficeToolsAppTemplate.xaml&lt;/b&gt;, and specify the corresponding deployment scripts offered in the CodePlex project. The build definition also lets you specify what projects to build and when to trigger a build.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;For detailed instructions, see the &lt;a href="https://officesharepointci.codeplex.com/documentation"&gt;Documentation page&lt;/a&gt; of the CodePlex project.&lt;/p&gt;  &lt;p&gt;Using these resources, you will be able to do continuous integration for Office and SharePoint 2013 projects. Depending on your project, you may find these tips helpful:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Project contains a NuGet package        &lt;br /&gt;&lt;/b&gt;If the NuGet package delivers some assemblies that your project references (for example, you use the &lt;b&gt;EntityFramework&lt;/b&gt; NuGet package in the web project of your app for SharePoint, which references EntityFramework.dll), make sure the assemblies are checked into source control. You can find the assemblies from the NuGet package in the “packages” folder under your solution folder. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Autohosted app for SharePoint includes a SQL Database project&lt;/b&gt;       &lt;br /&gt;This is a known issue in the Office Developer Tools for Visual Studio 2012. If you are using Team Foundation Service, the TFS build service will copy the .dacpac file built from the SQL Database project to a different folder defined in the app for SharePoint project target file. To work around this, add the following code at the end of your app project file:&lt;/li&gt; &lt;/ul&gt;  &lt;pre class="code"&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;Target &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;Name&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;xxx&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;BeforeTargets&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;PackageSharePointApp&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;PropertyGroup&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;SqlPackage&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;%OutDir%\YourDacpacName.dacpac&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;SqlPackage&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;PropertyGroup&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;Target&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Project is a SharePoint farm or sandboxed solution 
      &lt;br /&gt;&lt;/b&gt;Continuous integration is also supported for SharePoint farm and sandboxed solutions. Hosting SharePoint in a VM in Windows Azure is a great way to enable continuous integration with Team Foundation Service because it is hosted outside of a firewall. Check out the &lt;a href="https://sharepointci.codeplex.com/releases/view/102871"&gt;Downloads page&lt;/a&gt; for instructions about configuration. 

    &lt;br /&gt;Although the build service on Team Foundation Service has been configured with essential SharePoint assemblies, your farm solutions may contain some assemblies that are not available in the default build environment because solutions can actually reference any assembly. In that case, you will need to check those missing assemblies into the source control with your project. You will know that your project is in this state if an assembly that you reference in your SharePoint farm solution cannot be found (and Team Foundation Service throws the “&lt;b&gt;System.IO.FileNotFoundException: Could not load file or assembly&lt;/b&gt;” exception when you build the project). &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope that you will give continuous integration a try. Like always, I’d love to hear from you. If you have a suggestion, question, bug, or anything else, please don’t hesitate to let me know! &lt;/p&gt;

&lt;p&gt;Have fun!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10419696" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Apps+for+SharePoint/">Apps for SharePoint</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Apps+for+Office/">Apps for Office</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Tools/">Tools</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Office+365/">Office 365</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Visual+Studio/">Visual Studio</category></item><item><title>Creating a mail app to check out Active Directory org information for mail senders and recipients</title><link>http://blogs.msdn.com/b/officeapps/archive/2013/05/15/creating-a-mail-app-to-check-out-active-directory-org-information-for-mail-senders-and-recipients.aspx</link><pubDate>Wed, 15 May 2013 13:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10418284</guid><dc:creator>angelgolfer</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officeapps/rsscomments.aspx?WeblogPostID=10418284</wfw:commentRss><comments>http://blogs.msdn.com/b/officeapps/archive/2013/05/15/creating-a-mail-app-to-check-out-active-directory-org-information-for-mail-senders-and-recipients.aspx#comments</comments><description>&lt;p&gt;In an organization or enterprise setting, you frequently get included in emails with unfamiliar people. If your organization uses Active Directory, Exchange Server 2013, and Outlook 2013, you can now use the &lt;a href="http://code.msdn.microsoft.com/Mail-apps-for-Outlook-682e7b6a"&gt;Who's Who AD mail app&lt;/a&gt; to conveniently display organization metadata for email senders and recipients in Outlook or Outlook Web App. Figure 1 is an example of the mail app in action. &lt;/p&gt;  &lt;div style="text-align: center; font-size: 80%; padding-bottom: 10px"&gt;&lt;img title="Figure 1. Who’s Who AD mail app displaying Active Directory information for the message sender" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="Figure 1. Who’s Who AD mail app displaying Active Directory information for the message sender" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/2605.clip_5F00_image002_5F00_1AB384B8.jpg" width="315" height="368" /&gt;&lt;br /&gt;Figure 1. Who’s Who AD mail app displaying Active Directory information for the message sender&lt;/div&gt;  &lt;p&gt;After &lt;a href="http://code.msdn.microsoft.com/Mail-apps-for-Outlook-682e7b6a"&gt;installing&lt;/a&gt; the mail app, whenever you open a message in Outlook, simply choose &lt;b&gt;Who's Who AD&lt;/b&gt; in the app bar and the app pane will display the following organization metadata:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Job title and contact info for the message sender (Belinda Newman in the example)&lt;/li&gt;    &lt;li&gt;The sender's manager (Alicia Thornber)&lt;/li&gt;    &lt;li&gt;Any direct reports of the sender (Ben Miller, Jeff Price, Robin Wood, and so on).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You can display similar information for each message recipient. You can also drill down on each of the displayed managers and their direct reports.&lt;/p&gt;  &lt;p&gt;Behind the scenes, when you select a sender or recipient, the mail app calls the Who web service to get that person’s data from Active Directory. The web service includes a wrapper that uses Active Directory Domain Services (AD DS) to access information from Active Directory. After getting the data, the Who web service serializes the data in JSON format and sends it back as the web service response. The mail app then pulls the data and displays it in the app pane. Figure 2 shows the design and major components of the mail app. &lt;/p&gt;  &lt;div style="text-align: center; font-size: 80%; padding-bottom: 10px"&gt;&lt;img title="Figure 2. Relationships among the Outlook user, mail app, Who web service, and Active Directory" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="Figure 2. Relationships among the Outlook user, mail app, Who web service, and Active Directory" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-53-99-metablogapi/5355.clip_5F00_image004_5F00_014B817E.png" width="542" height="434" /&gt;&lt;br /&gt;Figure 2. Relationships among the Outlook user, mail app, Who web service, and Active Directory&lt;/div&gt;  &lt;p&gt;The Who's Who AD mail app is a prototype you can customize to your needs. Learn more about the mail app design at &lt;a href="http://msdn.microsoft.com/library/bb419185-f004-4118-a53d-3b6c8e984c9e.aspx"&gt;How to: Create a mail app to display hierarchy information from Active Directory&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10418284" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Apps+for+Office/">Apps for Office</category><category domain="http://blogs.msdn.com/b/officeapps/archive/tags/Mail+app/">Mail app</category></item></channel></rss>