<?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>Office Developer Blog</title><link>http://blogs.msdn.com/b/officedevdocs/</link><description>Brought to you by Microsoft teams working on Office developer content</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Introducing WOPI</title><link>http://blogs.msdn.com/b/officedevdocs/archive/2013/03/21/introducing-wopi.aspx</link><pubDate>Thu, 21 Mar 2013 16:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10404007</guid><dc:creator>S. D. Oliver</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officedevdocs/rsscomments.aspx?WeblogPostID=10404007</wfw:commentRss><comments>http://blogs.msdn.com/b/officedevdocs/archive/2013/03/21/introducing-wopi.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;This blog post describes how to create a custom WOPI host.&amp;#160; A WOPI host is document storage location that can connect to Office Web Apps Server to open Office documents in the browser.&amp;#160; When the WOPI host is configured to use Office Web Apps Server, users are able to view and edit documents stored on the WOPI host by using Office Web Apps. &lt;em&gt;Tyler Butler, Program Manager, Office Shared Experiences team, authored today’s post.&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;One of the great things about the Office Web Apps is that they let people work with their documents anywhere, on any computer. It turns out that there are lots of documents in lots of different places. For example, consider &lt;a href="http://www.outlook.com/"&gt;Outlook.com&lt;/a&gt;, or more generally, web-based email. You probably get documents sent to you via email every so often, and you probably want to open those documents to read them. One option is to download the file and open it in an application on your local computer. But if you're really just wanting to quickly check out the contents of the document, wouldn't it be easier if you could just click the document and have it open immediately in the browser? Wouldn't it be cool if that worked regardless of what software you had installed on your local computer? It could work when you're traveling and using an internet cafe computer, when you're using a friend's computer, or when you're at a conference and using a shared computer there.&lt;/p&gt;  &lt;p&gt;With the most recent release of the Office Web Apps, developers can enable such scenarios in their apps directly by implementing the &lt;a href="http://msdn.microsoft.com/en-us/library/hh622722(v=office.12).aspx"&gt;Web Application Open Platform Interface (WOPI)&lt;/a&gt;. WOPI provides web-based services a way to view and edit documents in the Office Web Apps, with all the high-fidelity and richness that you expect from an Office document. While email attachments are a great example, there are plenty of other places where documents are used on the web -- bank statements, file-synchronization services like SkyDrive and Dropbox, etc. -- and there are compelling ways developers can leverage WOPI to treat those documents as something more than just a file that users download.&lt;/p&gt;  &lt;p&gt;So if you’re a developer, this post is for you. Simply put, WOPI is the glue that connects the web apps to your documents, and it's an interface that you can implement yourself -- to dazzling effect. In this post series I'll talk about what WOPI is, walk through the basics of implementing it, and show you an example implementation.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;In addition to this post, WOPI is documented in the &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/hh622722(v=office.12).aspx"&gt;&lt;em&gt;[MS-WOPI]&lt;/em&gt;&lt;/a&gt;&lt;em&gt; protocol document. That document is the authoritative documentation on the interface.&lt;/em&gt;&lt;/p&gt;  &lt;h1&gt;Fundamentals&lt;/h1&gt;  &lt;p&gt;To better understand what WOPI is conceptually, consider this: Have you ever opened a document on your computer by double-clicking the file and watch it open in Word? When you did that, you signaled the operating system that you wanted to open the file, so the OS figured out what application was associated with that file type, then passed the file over to the application to handle. That's a very basic description of the process, but conceptually that's what happens.&lt;/p&gt;  &lt;p&gt;WOPI provides similar semantics for web applications, but the web is a little different than your local hard drive, so the process of opening the file is also a little different. In my simplified example above, the document was stored on your hard drive, and the operating system handled passing the file off to the application to open. In the scenarios for which WOPI was designed, though, the document is stored somewhere on the web. We call those document storage locations WOPI hosts or WOPI servers. This term will become a little clearer in just a moment, but think of a WOPI host as a service like SkyDrive. It's a place where you can put your documents or other files and make them accessible on the web.&lt;/p&gt;  &lt;p&gt;If a WOPI host is a place where your files are stored, then what about the actual applications that open those files? We unsurprisingly call those WOPI applications or WOPI clients; the Word/Excel/PowerPoint/OneNote web apps are all examples of WOPI applications. These applications support various different actions, such as view or edit, and these actions can apply to different file types.&lt;/p&gt;  &lt;p&gt;Going back to my original example of the document on your hard drive, the WOPI host is kind of like the hard drive -- but a little smarter. It stores the documents. The WOPI application is the app capable of performing an action -- doing something, in other words -- on those files, and WOPI is the interface that those two entities use to talk to one another. If you're a service or application that stores documents, then you can implement WOPI, making yourself a WOPI host, and WOPI applications such as the Office Web Apps can then consume the documents you're storing. Pretty compelling, huh? The rest of this post will go into the details of the interface.&lt;/p&gt;  &lt;p&gt;WOPI itself is more or less a &lt;a&gt;callback interface &lt;/a&gt;that operates over REST. As a WOPI host, you expose a number of endpoints, in the form of URLs, and then you load a WOPI application, passing it the URL to your endpoint. The WOPI application then calls your endpoint -- again, this is REST, so the application issues an HTTP request to the URL you passed it earlier -- and you respond appropriately based on the information that the WOPI application sent you via its request. WOPI defines a number of different endpoints that you can expose. Many of these are optional and necessary only if you wish to enable things like editing. At a minimum you'll need to implement endpoints for CheckFileInfo and GetFile, which will enable the simplest WOPI action, view. We'll talk about each of those endpoints in a moment.&lt;/p&gt;  &lt;p&gt;The overall flow of a WOPI conversation looks like this:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Figure 1. WOPI conversation flow&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50-metablogapi/7128.Intro_5F00_WOPI_5F00_5C7408B7.jpg"&gt;&lt;img title="Intro_WOPI" style="display: inline; background-image: none;" border="0" alt="Intro_WOPI" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50-metablogapi/4064.Intro_5F00_WOPI_5F00_thumb_5F00_3539BF82.jpg" width="244" height="192" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h1&gt;Host Requirements&lt;/h1&gt;  &lt;p&gt;As you can see in the diagram, as a WOPI host you need to provide some information about the files you have as well as the file itself. Since WOPI is a REST-based callback interface you provide that information via specific URLs. In addition, you need to provide ways to identify files, users and permissions. Essentially, you're providing a small REST API around your files, which a WOPI application will then use to work with those files. Luckily, this is simpler than it might seem at first. The basic things you need to provide as a WOPI host are as follows:&lt;/p&gt;  &lt;p&gt;1. File IDs&lt;/p&gt;  &lt;p&gt;The files you're storing must have a unique identifier that you can use to find the file when the WOPI application asks you for it. This ID is passed in URLs, so it should be a URL-safe string.&lt;/p&gt;  &lt;p&gt;2. Access tokens&lt;/p&gt;  &lt;p&gt;You need to provide access tokens that represent users and their permissions within your system. The WOPI application doesn't know what permissions a user has; as the storer of the file, you, the WOPI host, are the authority on that. Thus, you need to provide a token that the WOPI application will then pass back to you. When you get the token, you need to validate it and respond appropriately if the token is invalid. While not strictly required, the WOPI spec recommends that the token be scoped to a single user and document and expire after a certain period of time. The specific format and recommendations about how WOPI hosts should handle access tokens is covered in [MS-WOPI] &lt;a href="http://msdn.microsoft.com/en-us/library/hh644001(v=office.12).aspx"&gt;section 2.2.2&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;3. URLs for file access&lt;/p&gt;  &lt;p&gt;WOPI requires that a WOPI host expose at least two specific URLs: one to retrieve information about and manipulate files, and a second to retrieve and potentially update the contents of a file. (There are also some additional optional endpoints for manipulating folders and their contents, but those are required only for certain actions.) The URLs have some requirements around their structure which is covered in detail in [MS-WOPI] &lt;a href="http://msdn.microsoft.com/en-us/library/hh659001(v=office.12).aspx"&gt;section 3.3.5&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;File IDs are pretty straightforward; you probably already have them. Access tokens might be a little trickier but they're similarly straightforward to implement if you need to. Providing URLs for file access is probably the requirement most likely to be a minor hurdle, especially if you're not currently using a REST or REST-like architecture to expose your files. Fortunately, WOPI's needs are relatively small, and implementing REST endpoints boils down to exposing some URLs, so it's not that difficult in the end.&lt;/p&gt;  &lt;p&gt;Let's talk about the two core URL endpoints that you'll need to expose in order to implement view, the simplest WOPI action.&lt;/p&gt;  &lt;h2&gt;CheckFileInfo&lt;/h2&gt;  &lt;p&gt;See also [MS-WOPI] &lt;a href="http://msdn.microsoft.com/en-us/library/hh643136(v=office.12).aspx"&gt;section 3.3.5.1.1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Simply put, CheckFileInfo is how the WOPI application gets information about the file and the permissions a user has on the file. It should have a URL that looks like this:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;HTTP://server/&amp;lt;...&amp;gt;/wopi*/files/&amp;lt;id&amp;gt;?access_token=&amp;lt;token&amp;gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;This is the primary URL a WOPI application will call to retrieve information about a file. You'll always receive a file ID in the URL, so each of the operations that the application may be requesting you to perform are file-specific. CheckFileInfo is required for all WOPI actions.&lt;/p&gt;  &lt;p&gt;The WOPI application expects a JSON object in the response body. This JSON response can contain a number of optional values, all covered in [MS-WOPI] &lt;a href="http://msdn.microsoft.com/en-us/library/hh622920(v=office.12).aspx"&gt;section 3.3.5.1.1.2&lt;/a&gt;, but it needs to include at least BaseFileName, OwnerId, Size, SHA256, and Version.&lt;/p&gt;  &lt;p&gt;For example, here's a valid response body to a CheckFileInfo request:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: rgb(68, 68, 68);"&gt;{
    &amp;quot;BaseFileName&amp;quot;: &amp;quot;Sample Document.docx&amp;quot;, 
    &amp;quot;OwnerId&amp;quot;: &amp;quot;tylerbutler&amp;quot;, 
    &amp;quot;Size&amp;quot;: 300519,
    &amp;quot;SHA256&amp;quot;: &amp;quot;+17lwXXN0TMwtVJVs4Ll+gDHEIO06l+hXK6zWTUiYms=&amp;quot;, 
    &amp;quot;Version&amp;quot;: &amp;quot;GIYDCMRNGEYC2MJREAZDCORQGA5DKNZOGIZTQMBQGAVTAMB2GAYA====&amp;quot;
}
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;As you can see, we've gotten a CheckFileInfo request for the 'Sample Document.docx' file, and we've responded with some information about that file. As I mentioned, there are a variety of other values that the CheckFileInfo response can contain, all covered in [MS-WOPI] &lt;a href="http://msdn.microsoft.com/en-us/library/hh622920(v=office.12).aspx"&gt;section 3.3.5.1.1.2&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;GetFile&lt;/h2&gt;

&lt;p&gt;See also [MS-WOPI] &lt;a href="http://msdn.microsoft.com/en-us/library/hh657944(v=office.12).aspx"&gt;section 3.3.5.3.1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While CheckFileInfo provides information about a file, GetFile returns the file itself. It should have a URL that looks like this:&lt;/p&gt;

&lt;pre&gt;HTTP://server/&amp;lt;...&amp;gt;/wopi*/files/&amp;lt;id&amp;gt;/contents?access_token=&amp;lt;token&amp;gt;&lt;/pre&gt;

&lt;p&gt;You'll notice it looks very similar to the CheckFileInfo URL, but the /contents portion indicates that the content of the file is being requested, not information about it. When you receive a GetFile request, your response should include the binary contents of the file requested in your HTTP response body (after you've validated the access token and permissions, of course).&lt;/p&gt;

&lt;p&gt;Once you've implemented CheckFileInfo and GetFile endpoints, a WOPI application can talk to you to retrieve information about the files you have and get the file contents if needed. These two REST endpoints are all that is required to implement the WOPI view action, but there are additional endpoints you may wish to implement in order to support additional actions.&lt;/p&gt;

&lt;p&gt;At this point, you've made it possible for a WOPI application to request files from you; next, we need to actually instantiate the WOPI application.&lt;/p&gt;

&lt;h1&gt;Loading a WOPI Application&lt;/h1&gt;

&lt;p&gt;In order to actually view one of the files that we've exposed, we need to tell the WOPI application, &amp;quot;Please load the file with this ID using this access token.&amp;quot; We do that by loading an action-specific URL on the WOPI application server. For example, a URL to view a Word document might look like this:&lt;/p&gt;

&lt;pre&gt;http://wopi-app-server.contoso.com/wv/wordviewerframe.aspx?WOPISrc=&lt;br /&gt;http%3A%2F%2Fmy-wopi-host%2Flocal%2Fwopi&lt;br /&gt;%2Ffiles%2F1-Sample%2520Document.docx&amp;amp;access_token=&lt;br /&gt;dc172034-c6f9-4a43-bc3f-d80dd93c1de1&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Throughout this blog post we wrap long URLs on to more than one line in order to fit them into the viewing area.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We'll talk about how we actually determine what the URL for a given action is in just a moment, but for now let's just examine the query string parameters. You can see that we pass in two query string parameters, WOPISrc and access_token. We've talked about access_token already; it's the token that represents the user requesting the file. WOPISrc, on the other hand, is new. The parameter is the &amp;quot;WOPI source&amp;quot; of the file being loaded. In other words, this parameter is how we tell the WOPI application how to find the file that we want to view. The parameter is URL encoded, so let's decode it so we can see what it looks like:&lt;/p&gt;

&lt;pre&gt;http://my-wopi-host/local/wopi/files/1-Sample%20Document.docx&lt;/pre&gt;

&lt;p&gt;Hmmm, that URL looks an awful lot like the CheckFileInfo URL. In fact, it is the CheckFileInfo URL for the file (without the access token, of course). Using that URL, the WOPI application can determine the URLs for GetFile or other calls that it may need to make. Precise specifications for the WOPISrc and access_token parameters can be found in the [MS-WOPI] document &lt;a href="http://msdn.microsoft.com/en-us/library/hh695362(v=office.12).aspx"&gt;section 3.1.5.1.1.2.3.3&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, to recap, in order to load a WOPI application, we load a URL corresponding to the WOPI action we want to perform, pass the WOPISrc and access_token parameters, and the application calls us back, passing us the file ID and access tokens as needed. We validate the access tokens and respond to the requests made by the WOPI application, and it loads our document. Cool!&lt;/p&gt;

&lt;p&gt;There's still one missing piece though. How do we know what the URLs are for a given WOPI action?&lt;/p&gt;

&lt;h1&gt;WOPI Discovery&lt;/h1&gt;

&lt;p&gt;As I mentioned, since WOPI is a REST-based interface, the communication between the host and the app is all done via HTTP requests to specific URLs. However, how do you know what the URLs to use are? Simple -- you ask the application server itself! Every WOPI application server exposes a single URL, called the discovery URL, that provides an XML document describing the actions, document types, and URLs it understands. As a WOPI host, you retrieve this XML document and use it to determine the URLs you need to talk to in order to perform actions in addition to what actions are supported by the application server and what file types those actions apply to. We refer to this process as WOPI discovery, and it's meant to be a one-time thing. It's easiest to think of discovery as a configuration step; when you are configuring your WOPI host to talk to a new WOPI application, you'll run discovery. As a WOPI host, you'll retrieve the discovery XML once, process it, then you shouldn't need it again.&lt;/p&gt;

&lt;p&gt;The discovery XML looks like this (the URL in &lt;font face="Courier New"&gt;urlsrc&lt;/font&gt; is shown on 2 lines in order to fit on the page):&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;xml &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&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;encoding&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;utf-8&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;wopi-discovery&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;net-zone &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;external-https&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;app &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;Word&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;favIconUrl&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;https://wopi-app-server.contoso.com/wv/&lt;br /&gt;             resources/1033/FavIcon_Word.ico&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;
             &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;checkLicense&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;action &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;view&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;ext&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;doc&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;default&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: red;"&gt;urlsrc&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;https://wopi-app-server.contoso.com/&lt;br /&gt;                    wv/wordviewerframe.aspx?
                    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ui&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;UI_LLCC&amp;amp;&amp;gt;&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;rs&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;DC_LLCC&amp;amp;&amp;gt;&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;showpagestats&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;PERFSTATS&amp;amp;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;/&amp;gt;
            &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;action &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;view&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;ext&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;docm&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;default&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: red;"&gt;urlsrc&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;https://wopi-app-server.contoso.com/&lt;br /&gt;                    wv/wordviewerframe.aspx?
                    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ui&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;UI_LLCC&amp;amp;&amp;gt;&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;rs&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;DC_LLCC&amp;amp;&amp;gt;&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;showpagestats&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;PERFSTATS&amp;amp;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;/&amp;gt;
            &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;action &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;view&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;ext&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;docx&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;default&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: red;"&gt;urlsrc&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;https://wopi-app-server.contoso.com/&lt;br /&gt;                    wv/wordviewerframe.aspx?
                    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ui&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;UI_LLCC&amp;amp;&amp;gt;&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;rs&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;DC_LLCC&amp;amp;&amp;gt;&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;showpagestats&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;PERFSTATS&amp;amp;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;/&amp;gt;
            &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;action &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;view&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;ext&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;dot&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;default&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: red;"&gt;urlsrc&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;https://wopi-app-server.contoso.com/&lt;br /&gt;                    wv/wordviewerframe.aspx?
                    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ui&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;UI_LLCC&amp;amp;&amp;gt;&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;rs&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;DC_LLCC&amp;amp;&amp;gt;&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;showpagestats&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;PERFSTATS&amp;amp;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;/&amp;gt;
            &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;action &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;view&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;ext&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;dotm&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;default&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: red;"&gt;urlsrc&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;https://wopi-app-server.contoso.com/&lt;br /&gt;                    wv/wordviewerframe.aspx?
                    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ui&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;UI_LLCC&amp;amp;&amp;gt;&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;rs&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;DC_LLCC&amp;amp;&amp;gt;&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;showpagestats&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;PERFSTATS&amp;amp;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;/&amp;gt;
            &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;action &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;view&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;ext&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;dotx&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;default&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: red;"&gt;urlsrc&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;https://wopi-app-server.contoso.com/&lt;br /&gt;                    wv/wordviewerframe.aspx?
                    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ui&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;UI_LLCC&amp;amp;&amp;gt;&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;rs&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;DC_LLCC&amp;amp;&amp;gt;&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;showpagestats&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;PERFSTATS&amp;amp;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;/&amp;gt;
            &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;action &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;view&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;ext&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;odt&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;default&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: red;"&gt;urlsrc&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;https://wopi-app-server.contoso.com/&lt;br /&gt;                    wv/wordviewerframe.aspx?
                    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ui&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;UI_LLCC&amp;amp;&amp;gt;&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;rs&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;DC_LLCC&amp;amp;&amp;gt;&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;showpagestats&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;PERFSTATS&amp;amp;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;/&amp;gt;
            &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;action &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;edit&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;ext&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;docm&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;requires&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;locks,cobalt,update&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;
                    &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;urlsrc&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;https://wopi-app-server.contoso.com/&lt;br /&gt;                    we/wordeditorframe.aspx?
                    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ui&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;UI_LLCC&amp;amp;&amp;gt;&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;rs&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;DC_LLCC&amp;amp;&amp;gt;&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;showpagestats&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;PERFSTATS&amp;amp;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;/&amp;gt;
            &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;action &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;edit&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;ext&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;docx&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;requires&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;locks,cobalt,update&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;
                    &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;urlsrc&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;https://wopi-app-server.contoso.com/&lt;br /&gt;                    we/wordeditorframe.aspx?
                    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ui&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;UI_LLCC&amp;amp;&amp;gt;&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;rs&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;DC_LLCC&amp;amp;&amp;gt;&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;showpagestats&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;PERFSTATS&amp;amp;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;/&amp;gt;
            &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;action &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;edit&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;ext&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;odt&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;requires&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;locks,cobalt,update&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;
                    &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;urlsrc&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;https://wopi-app-server.contoso.com/&lt;br /&gt;                    we/wordeditorframe.aspx?
                    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: rgb(163, 21, 21);"&gt;ui&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;UI_LLCC&amp;amp;&amp;gt;&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;rs&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;DC_LLCC&amp;amp;&amp;gt;&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;showpagestats&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&lt;/span&gt;&lt;span style="background: white; color: red;"&gt;PERFSTATS&amp;amp;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;&amp;quot;/&amp;gt;
        &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;app&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;net-zone&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;wopi-discovery&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, this example discovery XML defines an app (Word) that can perform two actions (view and edit) on several different document types, defined by their file extensions. For each of the actions, the urlsrc attribute defines the URL that should be used to invoke the action on a given file. This URL has a number of optional query string parameters that can be included, denoted by angle brackets (&amp;lt; and &amp;gt;). Precise instructions for parsing the urlsrc attribute and replacing the placeholder values, as well as the meaning of each of the placeholder values, is available in [MS-WOPI] &lt;a href="http://msdn.microsoft.com/en-us/library/hh695362(v=office.12).aspx"&gt;section 3.1.5.1.1.2.3.3&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In addition to the optional parameters, you must also append the WOPISrc and access_token query string parameters that we discussed earlier to the URL in order to correctly invoke the WOPI action. Looking at the sample discovery XML above, you'll notice that the URL for the view action on the docx file extension is this:&lt;/p&gt;

&lt;pre&gt;https://wopi-app-server.contoso.com/wv/wordviewerframe.aspx&lt;br /&gt;?&amp;lt;ui=UI_LLCC&amp;amp;&amp;gt;&amp;lt;rs=DC_LLCC&amp;amp;&amp;gt;&amp;lt;showpagestats=PERFSTATS&amp;amp;&amp;gt;&lt;/pre&gt;

&lt;p&gt;In our earlier example, we used this URL to load the viewer:&lt;/p&gt;

&lt;pre&gt;http://wopi-app-server.contoso.com/wv/wordviewerframe.aspx&lt;br /&gt;?WOPISrc=http%3A%2F%2Fmy-wopi-host%2Flocal&lt;br /&gt;%2Fwopi%2Ffiles%2F1-Sample%2520Document.docx&amp;amp;access_token=&lt;br /&gt;dc172034-c6f9-4a43-bc3f-d80dd93c1de1&lt;/pre&gt;

&lt;p&gt;You can see that this URL is the one from the discovery XML with the optional parameters from the urlsrc removed and the required WOPISrc and access_token parameters appended.&lt;/p&gt;

&lt;p&gt;Once you have performed WOPI discovery, you can invoke any supported action on a file by visiting the URL specified in the urlsrc parameter, assuming you have correctly transformed the URL according to the protocol specifications. When you visit the URL, the WOPI application will in turn call you back via the URL you passed to it in the WOPISrc parameter, at which point you'd respond with information about the file, the file content, etc.&lt;/p&gt;

&lt;h1&gt;Wrapping the Application URL&lt;/h1&gt;

&lt;p&gt;As a WOPI host, you would likely prefer to be able to provide your users with a URL that they could visit and see a document opened up in a WOPI application. You could just hand out the URL to the WOPI application itself, but there are a couple of problems with that. First, the URL isn't very friendly-looking; it's a bit unwieldy. Second, it's not a URL for your WOPI host, so it's potentially confusing for users. Most importantly, though, it contains an access token, which is a user-specific and time-sensitive thing. Thus, that URL isn't appropriate to share with multiple users.&lt;/p&gt;

&lt;p&gt;There is still a way for you to provide friendly URLs, though. The way you do this is by creating a page within your WOPI host that contains an iframe that points to the WOPI application URL. For example, you could have a page with a URL like this:&lt;/p&gt;

&lt;pre&gt;http://my-wopi-host/documents/1-Sample%20Document.docx&lt;/pre&gt;

&lt;p&gt;When loaded, you'd determine the user requesting the page, issue them an access token if needed, then respond with a simple page similar to this:&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;DOCTYPE &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;html PUBLIC &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;
        &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;html &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;

&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;head&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;title&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;My WOPI Host&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;title&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;meta &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;content&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;text/html; charset=utf-8&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;http-equiv&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;Content-Type&amp;quot; /&amp;gt;

    &lt;/span&gt;&lt;span style="background: white; color: rgb(0, 100, 0);"&gt;&amp;lt;!-- Enable IE Standards mode --&amp;gt;
    &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;meta &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;http-equiv&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;X-UA-Compatible&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;content&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;IE=edge&amp;quot;&amp;gt;

    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;link &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;rel&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;shortcut icon&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;href&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;/static/icons/favicon.ico&amp;quot; /&amp;gt;

    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;style &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;type&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;text/css&amp;quot;&amp;gt;
        &lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;#waciframe
        &lt;/span&gt;&lt;span style="background: white; color: black;"&gt;{
            &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;100%&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;
            &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;border&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;none&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;
            &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;position&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;absolute&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;
            &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;top&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;0&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;
            &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;left&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;0&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;
        }
    &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;style&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;head&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;body &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;overflow&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;: &lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;hidden&lt;/span&gt;&lt;span style="background: white; color: black;"&gt;;&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;&amp;quot;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;iframe &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;waciframe&amp;quot; &lt;/span&gt;&lt;span style="background: white; color: red;"&gt;src&lt;/span&gt;&lt;span style="background: white; color: blue;"&gt;=&amp;quot;http://wopi-app-server.contoso.com/&lt;br /&gt;wv/wordviewerframe.aspx?WOPISrc=http%3A%2F%2Fmy-wopi-host%2Flocal&lt;br /&gt;%2Fwopi%2Ffiles%2F1-Sample%2520Document.docx&lt;br /&gt;&amp;amp;access_token=dc172034-c6f9-4a43-bc3f-d80dd93c1de1&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="background: white; color: maroon;"&gt;iframe&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;body&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;html&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, this page is very simple. Its body only contains an iframe that points to the WOPI application URL. Because you can dynamically generate this page content, you can fill in the user's access token as needed, and users will see a URL that points to your WOPI host, not the WOPI application.&lt;/p&gt;

&lt;h1&gt;Putting It All Together&lt;/h1&gt;

&lt;p&gt;We've covered an awful lot of ground in this post, and hopefully it's become a little clearer how you can enable some pretty cool scenarios with documents on the web using WOPI and the Office Web Apps. To briefly summarize what we've covered, in order to implement WOPI you need the following things:&lt;/p&gt;

&lt;p&gt;1. Provide unique file IDs for your files and access tokens for your users&lt;/p&gt;

&lt;p&gt;2. Implement at least the CheckFileInfo and GetFile WOPI REST endpoints&lt;/p&gt;

&lt;p&gt;3. Parse discovery XML to determine action URLs&lt;/p&gt;

&lt;p&gt;4. Wrap action URLs in a page/URL within your service for a more seamless user experience&lt;/p&gt;

&lt;p&gt;I highly recommend reading the &lt;a href="http://msdn.microsoft.com/en-us/library/hh622722(v=office.12).aspx"&gt;[MS-WOPI]&lt;/a&gt; documentation if you're interested in learning more or are implementing the interface. That document covers the entirety of the interface in great detail, and is a great reference.&lt;/p&gt;

&lt;p&gt;In my next post, I'll walk through a sample WOPI host implementation and we'll see more of WOPI in action.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10404007" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Office/">Office</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Office+2013/">Office 2013</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Office+Web+Apps/">Office Web Apps</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/WOPI/">WOPI</category></item><item><title>JavaScript API object model maps updated for attachment support in mail apps!</title><link>http://blogs.msdn.com/b/officedevdocs/archive/2013/03/04/javascript-api-object-model-maps-updated-for-attachment-support-in-mail-apps.aspx</link><pubDate>Mon, 04 Mar 2013 19:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10399340</guid><dc:creator>angelgolfer</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officedevdocs/rsscomments.aspx?WeblogPostID=10399340</wfw:commentRss><comments>http://blogs.msdn.com/b/officedevdocs/archive/2013/03/04/javascript-api-object-model-maps-updated-for-attachment-support-in-mail-apps.aspx#comments</comments><description>&lt;p&gt;In my last post &lt;a href="http://blogs.msdn.com/b/officedevdocs/archive/2012/12/10/when-should-i-choose-to-create-a-mail-app-versus-an-add-in-for-outlook.aspx"&gt;When should I choose to create a mail app versus an add-in for Outlook?&lt;/a&gt;, I provided some factors for you to consider if you&amp;rsquo;re trying to decide whether a mail app or add-in is more appropriate for your Outlook extension scenario. Along with that post are a couple of object model maps to illustrate the supporting JavaScript API for Office. On February 27, we &lt;a href="http://www.microsoft.com/en-us/news/Press/2013/Feb13/02-27OfficeCommercialGAPR.aspx?WT.mc_ID=soc_tw_office365http://www.microsoft.com/en-us/news/Press/2013/Feb13/02-27OfficeCommercialGAPR.aspx?WT.mc_ID=soc_tw_office365"&gt;released&lt;/a&gt;&amp;nbsp;a major new update to the Office 365 services for business. This update to Office 365 includes a new set of API for mail apps to access mail attachments, and hence the object model maps have been updated on that &lt;a href="http://blogs.msdn.com/b/officedevdocs/archive/2012/12/10/when-should-i-choose-to-create-a-mail-app-versus-an-add-in-for-outlook.aspx"&gt;post&lt;/a&gt;. At this point, this new feature is available to mail apps running on Outlook Web App accessing mailboxes on only Exchange Online. This new feature offers a mail app the capability to send a third-party web service an authentication token and attachment identifier, so that the web service can retrieve the attachment from the Exchange Online server. If the user&amp;rsquo;s mailbox is hosted on Exchange Online, then the user can install and&amp;nbsp;start such a mail app on Outlook Web App that uses this new set of API to access mail attachments.&lt;/p&gt;
&lt;p&gt;The following is the set of new APIs that support accessing attachments:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/jj984592.aspx"&gt;AttachmentDetails&lt;/a&gt;&amp;nbsp;object and members&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/jj984587.aspx"&gt;Item.attachments&lt;/a&gt;&amp;nbsp;property&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/jj984594.aspx"&gt;Mailbox.ewsUrl&lt;/a&gt;&amp;nbsp;property&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/jj984589.aspx"&gt;Mailbox.getCallbackTokenAsync&lt;/a&gt;&amp;nbsp;method&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/jj984591.aspx"&gt;AttachmentType&lt;/a&gt;&amp;nbsp;enumeration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the next few weeks, there will be additional content and example elaborating how to use these new objects and members. Stay tuned on the &lt;a href="http://blogs.msdn.com/b/officeapps/"&gt;Apps for Office and SharePoint Blog&lt;/a&gt; for the latest news!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10399340" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Office+developer+documentation/">Office developer documentation</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/attachment/">attachment</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Office+15/">Office 15</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Office+2013/">Office 2013</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/mail+app/">mail app</category></item><item><title>Working with tracked changes and comments programmatically in Word 2013</title><link>http://blogs.msdn.com/b/officedevdocs/archive/2013/01/10/working-with-tracked-changes-and-comments-programmatically-in-word-2013.aspx</link><pubDate>Thu, 10 Jan 2013 20:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10384005</guid><dc:creator>Saul Candib</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officedevdocs/rsscomments.aspx?WeblogPostID=10384005</wfw:commentRss><comments>http://blogs.msdn.com/b/officedevdocs/archive/2013/01/10/working-with-tracked-changes-and-comments-programmatically-in-word-2013.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: calibri;"&gt;In this blog post, I will describe the changes to the object model for displaying tracked changes and comments from Microsoft Word 2010 to Microsoft Word 2013 and I explain how to work with the new programmability features relating to tracked changes and comments in Word 2013.&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="font-family: calibri;"&gt;&lt;span style="font-family: Segoe UI Light;"&gt;APIs for displaying tracked changes and comments in Word 2010&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;In Word 2010, the &lt;strong&gt;View.RevisionsView&lt;/strong&gt; property helps toggle the display of all tracked changes and comments in the active document by setting the value to one of two possible constants from the &lt;strong&gt;WdRevisionsView&lt;/strong&gt; enumeration: &lt;strong&gt;wdRevisionsViewOriginal&lt;/strong&gt;, and &lt;strong&gt;wdRevisionsViewFinal&lt;/strong&gt;. In Word 2013, this property is replaced by the new &lt;strong&gt;RevisionsFilter.View&lt;/strong&gt; property. &lt;strong&gt;RevisionsFilter&lt;/strong&gt; is a new object added to the object model in Word 2013.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;In addition, to toggle display of tracked changes revision marks in Word 2010 you can use the &lt;strong&gt;Document.ShowRevisions&lt;/strong&gt; property, which takes a &lt;strong&gt;Boolean&lt;/strong&gt;. In Word 2013, that property is also hidden, replaced by the new &lt;strong&gt;RevisionsFilter.Markup&lt;/strong&gt; property.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;In Word 2010, the &lt;strong&gt;Window.ToggleShowAllReviewers&lt;/strong&gt; method toggles the display of all reviewers&amp;rsquo; comments for the specified window. In Word 2013, this method is replaced by the &lt;strong&gt;RevisionsFilter.ToggleShowReviewers&lt;/strong&gt; method. In addition, the &lt;strong&gt;View.Reviewers&lt;/strong&gt; property in Word 2010 is replaced by the &lt;strong&gt;RevisonsFilter.Reviewers&lt;/strong&gt; property.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;Also, in Word 2010 the &lt;strong&gt;Reviewer.Visible&lt;/strong&gt; property specifies whether markup from a particular reviewer is displayed. This property remains available in Word 2013, but Word 2013 also adds the &lt;strong&gt;RevisionsFilter.Reviewer&lt;/strong&gt;s property, which controls the display of reviewer markup.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;In the next section I&amp;rsquo;ll list all these new objects and members and provide some sample code that shows how to use them.&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="font-family: calibri;"&gt;&lt;span style="font-family: Segoe UI Light;"&gt;New APIs for displaying tracked changes and comments and filtering reviewers in Word 2013&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;A new object, &lt;strong&gt;RevisionsFilter&lt;/strong&gt;, and several new members of that object related to the display of tracked changes and comments, and to filtering the display of changes and comments from specific reviewers, have been added to the Word object model in 2013. You can use the &lt;strong&gt;View.RevisionsFilter&lt;/strong&gt; property to return a &lt;strong&gt;RevisionsFilter&lt;/strong&gt; object.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;New members have also been added to the existing &lt;strong&gt;Comment&lt;/strong&gt; object to accommodate the new functionality in Word 2013 that allows users to reply to comments.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: calibri;"&gt;&lt;span style="font-family: Segoe UI Light;"&gt;RevisionsFilter members&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;The new members of the &lt;strong&gt;RevisionsFilter&lt;/strong&gt; object are as follows:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;The &lt;strong&gt;Markup&lt;/strong&gt; property gets or sets a &lt;strong&gt;WdRevisionsMarkup&lt;/strong&gt; constant that specifies the extent of reviewer markup displayed in the document. In the context of this setting, the word &amp;ldquo;markup&amp;rdquo; includes the revisions themselves, revision marks, and reviewer comments.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;The possible values of &lt;strong&gt;WdRevisionsMarkup &lt;/strong&gt;are shown in the following list. These values correspond to those in the &lt;strong&gt;Display for Review&lt;/strong&gt; drop-down list in the &lt;strong&gt;Tracking&lt;/strong&gt; group on the &lt;strong&gt;Review&lt;/strong&gt; tab in the Word user interface (UI), as indicated. Figures 1, 2, and 3 show the results of applying the various settings:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: calibri;"&gt;&lt;strong&gt;wdRevisionsMarkupAll&lt;/strong&gt;&amp;mdash;Displays the final version of the document with all revisions incorporated and all markup visible. Corresponds to &lt;strong&gt;All Markup&lt;/strong&gt; in the UI.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: calibri;"&gt;&lt;strong&gt;wdRevisionsMarkupSimple&lt;/strong&gt;&amp;mdash;Displays the final version of the document with all revisions incorporated, and with reviewer comments displayed, but with no revision marks (tracked changes) visible. Vertical marks in the left margin indicate lines in which revisions have been incorporated. Corresponds to &lt;strong&gt;Simple Markup&lt;/strong&gt; in the UI.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: calibri;"&gt;&lt;strong&gt;wdRevisionsMarkupNone&lt;/strong&gt;&amp;mdash;Displays the final version of the document with all revisions incorporated but no markup visible. Corresponds to &lt;strong&gt;No Markup&lt;/strong&gt; in the UI.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;The &lt;strong&gt;Reviewers&lt;/strong&gt; property returns a &lt;strong&gt;Reviewers&lt;/strong&gt; object that represents the collection of reviewers of the active document and all other documents that are open or have been opened on the computer.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;The &lt;strong&gt;View&lt;/strong&gt; property returns or sets a &lt;strong&gt;WdRevisionsView&lt;/strong&gt; constant that specifies whether Word uses the original version of the document or the final version as the basis for the revisions shown.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;&lt;strong&gt;Note:&lt;/strong&gt; When revisions are visible, and when the &lt;strong&gt;MarkupMode&lt;/strong&gt; property value is set to &lt;strong&gt;wdBalloonRevisions&lt;/strong&gt;, the &lt;strong&gt;View&lt;/strong&gt; property value determines which set of changes are shown in balloons.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;The &lt;strong&gt;ToggleShowAllReviewers&lt;/strong&gt; method shows or hides all revisions in a document that contains comments and tracked changes.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/7178.MarkupAll.jpg"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/7178.MarkupAll.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;Figure 1. The result of setting &lt;strong&gt;Markup&lt;/strong&gt; to &lt;strong&gt;wdRevisionsMarkupAll&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: calibri;"&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/7558.MarkupSimple.jpg"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/7558.MarkupSimple.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;Figure 2. The result of setting &lt;strong&gt;Markup&lt;/strong&gt; to &lt;strong&gt;wdRevisionsMarkupSimple&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: calibri;"&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/6661.MarkupNone.jpg"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/6661.MarkupNone.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;Figure 3. The result of setting &lt;strong&gt;Markup&lt;/strong&gt; to &lt;strong&gt;WdRevisionsMarkupNone&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;The following code shows how to display all markup in the active document. It also hides the markup and comments from the second reviewer in the collection of reviewers.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id="codeSnippet" style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="color: #0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Sub&lt;/span&gt; RevisionsFilter_Example()&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;Dim&lt;/span&gt; wrdRevisionsFilter &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; RevisionsFilter&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;Set&lt;/span&gt; wrdRevisionsFilter = ActiveDocument.ActiveWindow.View.RevisionsFilter&lt;br /&gt;    wrdRevisionsFilter.Markup = wdRevisionsMarkupAll&lt;br /&gt;    wrdRevisionsFilter.Reviewers.Item(2).Visible = &lt;span style="color: #0000ff;"&gt;False&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-family: calibri;"&gt;&lt;span style="font-family: Segoe UI Light;"&gt;Comment members&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;The new members of the &lt;strong&gt;Comment&lt;/strong&gt; object are as follows.&lt;/span&gt;&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="319"&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;Member&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="319"&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;Description&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="319"&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;&lt;strong&gt;Ancestor&lt;/strong&gt; property&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="319"&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;Returns the parent &lt;strong&gt;Comment&lt;/strong&gt; object for comments that are replies to existing comments. For new, top-level comments, the property returns null.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="319"&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;&lt;strong&gt;Contact&lt;/strong&gt; property&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="319"&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;Returns a &lt;strong&gt;CoAuthor&lt;/strong&gt; object that represents the author of the comment&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="319"&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;&lt;strong&gt;Done&lt;/strong&gt; property&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="319"&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;Returns or sets a &lt;strong&gt;Boolean&lt;/strong&gt; whose value is true if the comment has been marked as complete in the UI. Users can mark a comment as done by choosing a comment and choosing &lt;strong&gt;Mark Comment Done &lt;/strong&gt;on the context menu.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="319"&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;&lt;strong&gt;Replies&lt;/strong&gt; property&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="319"&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;Returns a &lt;strong&gt;Comments&lt;/strong&gt; collection of &lt;strong&gt;Comment&lt;/strong&gt; objects that are children of the specified comment.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="319"&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;&lt;strong&gt;DeleteRecursively&lt;/strong&gt; method&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="319"&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;Deletes the specified comment and all associated replies.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-family: calibri; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: calibri;"&gt;The following code shows how to get the count of all the replies to a specific comment.&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id="codeSnippet" style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="color: #0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Sub&lt;/span&gt; GetReplies()&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;Dim&lt;/span&gt; myComment &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; Comment&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;Set&lt;/span&gt; myComment = ActiveDocument.Comments(1) &lt;br /&gt;    Debug.Print myComment.Replies.Count    &lt;br /&gt;&lt;span style="color: #0000ff;"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10384005" width="1" height="1"&gt;</description></item><item><title>When should I choose to create a mail app versus an add-in for Outlook?</title><link>http://blogs.msdn.com/b/officedevdocs/archive/2012/12/10/when-should-i-choose-to-create-a-mail-app-versus-an-add-in-for-outlook.aspx</link><pubDate>Mon, 10 Dec 2012 16:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10376208</guid><dc:creator>angelgolfer</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officedevdocs/rsscomments.aspx?WeblogPostID=10376208</wfw:commentRss><comments>http://blogs.msdn.com/b/officedevdocs/archive/2012/12/10/when-should-i-choose-to-create-a-mail-app-versus-an-add-in-for-outlook.aspx#comments</comments><description>&lt;p&gt;Some of you may or may not be aware that alongside with the legacy COM-based Office client object models, Office 2013 supports a new apps for Office developer platform. This blog post is intended to help new and existing Office developers understand the main differences between the COM-based object models and the apps for Office platform. In particular, this post focuses on Outlook, suggests why you should consider developing solutions as mail apps, and identifies those exceptional&amp;nbsp;scenarios where add-ins may still be the more appropriate choice.&lt;/p&gt;
&lt;h4&gt;Contents:&lt;/h4&gt;
&lt;p style="padding-left: 30px;"&gt;An introduction to the apps for Office platform&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Architectural differences between add-in model and apps for Office platform&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Main features available to mail apps&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Major objects for mail apps&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Reasons to create mail apps instead of add-ins for Outlook&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Reasons to choose add-ins&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Conclusion&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Further references&lt;/p&gt;
&lt;h1&gt;An introduction to the apps for Office platform&lt;/h1&gt;
&lt;p&gt;The apps for Office platform includes a &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp142185.aspx"&gt;JavaScript API for Office&lt;/a&gt; and a &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp123693.aspx"&gt;schema for apps for Office manifests&lt;/a&gt;. You can use this platform to extend web services and content into the context of rich and web clients of Office. An app for Office is a webpage that is developed using common web technologies, hosted inside an Office client application (such as Outlook) on-premises or in the cloud. Of the three types of apps for Office, the type that Outlook supports is called mail apps. While you use the legacy APIs&amp;mdash;the object model, PIA, and MAPI&amp;mdash;to automate Outlook at an application level, you can use the JavaScript API for Office in a mail app&amp;nbsp;to interact at an item level with the content and properties of an email message, meeting request, or appointment. You can publish mail apps in the Office Store or in an internal Exchange catalog. End users and administrators can install mail apps for an Exchange 2013 mailbox, and use mail apps in the Outlook rich client as well as Outlook Web App. As a developer, you can choose to make your mail app available for end users on only the desktop, or also on the tablet or smart phone. You can find more information about the apps for Office platform by starting here: &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj220082.aspx"&gt;Overview of apps for Office&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;Architectural differences between add-in model and apps for Office platform&lt;/h1&gt;
&lt;h2&gt;Add-in model&lt;/h2&gt;
&lt;p&gt;The Office add-in model offers individual object models for most of the Office rich clients. Each object model is intended to automate the corresponding Office client, and allows an add-in to integrate closely with the behavior of that client. The same add-in can integrate with one or multiple Office applications, such as Outlook, Word, and Excel, by calling into each of the Outlook, Word, and Excel object models. Figure 1 describes a few examples of 1:1 relationships between an Office rich client and its object model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 1. The legacy Office development architecture is composed of individual client object models.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/0871.offwecon15_5F00_LegacyArchitecture.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x1000/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/0871.offwecon15_5F00_LegacyArchitecture.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Apps for Office platform&lt;/h2&gt;
&lt;p&gt;The apps for Office platform includes an apps for Office schema. Using this schema, each app specifies a manifest that describes the permissions it requests, its requirements for its host applications (for example, a mail app requires the host to support the mailbox capability), its support for the default and any extra locales, display details for one or more form factors, and activation rules for a mail app to be available in the app bar.&lt;/p&gt;
&lt;p&gt;In addition to the schema, the apps for Office platform includes the JavaScript API for Office. This API spans across all supporting Office clients and allows apps to move toward a single code base. Rather than automating or extending a particular Office client at the application level, the apps for Office platform allows apps to connect to services and extend them into the context of a document, message, or appointment item in a rich or web client. Figure 2 shows Office applications with their rich and web clients sharing a common app platform.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 2. The apps for Office development architecture is composed of a common platform and individual object models.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/6864.offwecon15_5F00_JSOMArchitecture.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x1000/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/6864.offwecon15_5F00_JSOMArchitecture.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;One main difference of note is that the object models were designed to integrate tightly with the corresponding Office client applications. However, this tight integration has a side effect of requiring an add-in to run in the same process as the rich client. The reliability and performance of an add-in often affects the perceived performance of the rich client. Unlike client add-ins, an app for Office doesn&amp;rsquo;t integrate as tightly with the host application, does not share the same process as the rich client, and instead runs in its own isolated runtime environment. This environment offers a privacy and permission model that allows users and IT administrators to monitor their ecosystem of apps and enjoy enhanced security.&lt;/p&gt;
&lt;h1&gt;Main features available to mail apps&lt;/h1&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161015.aspx#olowacon15_FundContextualActivation"&gt;Contextual activation&lt;/a&gt;: Mail app activation is contextual, based on the app&amp;rsquo;s activation rules and current circumstances, including the item that is currently displayed in the Reading Pane or inspector. A mail app is activated and becomes available to end users when such circumstances satisfy the activation rules in the app manifest.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161015.aspx#olowacon15_FundMatches"&gt;Matching known entities or regular expression&lt;/a&gt;: A mail app can specify certain &lt;em&gt;entities &lt;/em&gt;(such as a phone number or address) or regular expressions in its activation rules. If a match for entities or regular expressions occurs in the item&amp;rsquo;s subject or body, the mail app can access the match for further processing.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161015.aspx#olowacon15_FundOutlookSettings"&gt;Roaming settings&lt;/a&gt;: A mail app can save data that is specific to Outlook and the user&amp;rsquo;s Exchange mailbox for access in a subsequent Outlook session.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161015.aspx#olowacon15_FundItemProperties"&gt;Accessing item properties&lt;/a&gt;: A mail app can access built-in properties of the current item, such as the sender, recipients, and subject of a message, or the location, start, end, organizer, and attendees of a meeting request.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161015.aspx#olowacon15_FundItemCustom"&gt;Creating item-level custom properties&lt;/a&gt;: A mail app can save item-specific data in the user&amp;rsquo;s Exchange mailbox for access in a subsequent Outlook session.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161015.aspx#olowacon15_FundUserProfile"&gt;Accessing user profile&lt;/a&gt;: A mail app can access the display name, email address, and time zone in the user&amp;rsquo;s profile.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161015.aspx#olowacon15_FundAuthentication"&gt;Authentication by identity tokens&lt;/a&gt;: A mail app can authenticate a user by using a token that identifies the user&amp;rsquo;s email account on an Exchange Server.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161015.aspx#olowacon15_FundExchangeWebServices"&gt;Using Exchange Web Services&lt;/a&gt;: A mail app can perform more complex operations or get further data about an item through Exchange Web Services.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161015.aspx#olowacon15_FundPermissions"&gt;Permissions model and governance&lt;/a&gt;: Mail apps support a three-tier permissions model. This model provides the basis for privacy and security for end users of mail apps.&lt;/p&gt;
&lt;h1&gt;Major objects for mail apps&lt;/h1&gt;
&lt;p&gt;For mail apps, you can look at the JavaScript API for Office object model in three layers:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the first layer, there are a few objects shared by all three types of apps for Office: &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp142234.aspx"&gt;Office&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161104.aspx"&gt;Context&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161076.aspx"&gt;AsyncResult&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The second layer in the API that is applicable and specific to mail apps includes the &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp142162.aspx"&gt;Mailbox&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp142177.aspx"&gt;Item&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161126.aspx"&gt;UserProfile&lt;/a&gt; objects, which support accessing information about the user and the item currently selected in the user&amp;rsquo;s mailbox.&lt;/li&gt;
&lt;li&gt;The third layer describes the data-level support for mail apps:&lt;ol&gt;
&lt;li&gt;There are &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp142138.aspx"&gt;CustomProperties&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj220079.aspx"&gt;RoamingSettings&lt;/a&gt; that support persisting properties set up by the mail app for the selected item and for the user&amp;rsquo;s mailbox, respectively.&lt;/li&gt;
&lt;li&gt;There are the supported item objects, &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp160964.aspx"&gt;Appointment&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161175.aspx"&gt;Message&lt;/a&gt;, that inherit from &lt;strong&gt;Item&lt;/strong&gt;, and the &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp142237.aspx"&gt;MeetingRequest&lt;/a&gt; object that inherits from &lt;strong&gt;Message&lt;/strong&gt;. These objects represent the types of Outlook items that support mail apps: calendar items of appointments and meetings, and message items such as email messages, meeting requests, responses, and cancellations.&lt;/li&gt;
&lt;li&gt;Then there are the item-level properties (such as &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp142301.aspx"&gt;Appointment.subject&lt;/a&gt;) as well as objects and properties that support certain known &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp160984.aspx"&gt;Entities&lt;/a&gt; objects (for example &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161005.aspx"&gt;Contact&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp142141.aspx"&gt;MeetingSuggestion&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp142244.aspx"&gt;PhoneNumber&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp160979.aspx"&gt;TaskSuggestion&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Figure 3 shows the major objects: Mailbox, Item, UserProfile, Appointment, Message, Entities, and their members.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 3. Major objects and their members used by mail apps in the JavaScript API for Office.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/3678.mod_5F00_off15_5F00_OfficeJSAPIs_5F00_MailApps_5F00_MajorObj.jpg"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/500x508/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/3678.mod_5F00_off15_5F00_OfficeJSAPIs_5F00_MailApps_5F00_MajorObj.jpg" alt="" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Figure 4 shows all of the objects and enumerations in the JavaScript API for Office that pertain to mail apps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 4. All objects for mail apps in the JavaScript API for Office.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/8446.mod_5F00_off15_5F00_OfficeJSAPIs_5F00_MailApps_5F00_OnlyObj.jpg"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/500x821/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/8446.mod_5F00_off15_5F00_OfficeJSAPIs_5F00_MailApps_5F00_OnlyObj.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Figure 5 is a thumbnail of&amp;nbsp;a diagram with all the objects and members that mail apps use.&amp;nbsp;To see&amp;nbsp;the diagram in a larger size,&amp;nbsp;click the thumbnail or open the attached PDF file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 5. All objects and members used by mail apps in the JavaScript API for Office.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-37-62-08/mod_5F00_off15_5F00_OfficeJSAPIs_5F00_MailApps_5F00_All_5F00_updated.pdf"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/280x161/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/4643.mod_5F00_off15_5F00_OfficeJSAPIs_5F00_MailApps_5F00_All.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Reasons to create mail apps instead of add-ins for Outlook&lt;/h1&gt;
&lt;p&gt;The following are common reasons why mail apps are a better choice for developers than add-ins:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can use existing knowledge&amp;nbsp;of and the benefits of web technologies such as HTML, JavaScript, and CSS.&amp;nbsp;For power users and new developers, XML, HTML, and JavaScript require less&amp;nbsp;significant ramp-up time than COM-based APIs such as the Outlook object&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model.&lt;/li&gt;
&lt;li&gt;You can use a simple web&amp;nbsp;deployment model to update your mail app (including the web services that&amp;nbsp;the app uses) on your web server without any complex installation on the&amp;nbsp;Outlook client. In fact, any updates to the mail app, with the exception&amp;nbsp;of the app manifest, do not require any updating on the Office client. You&amp;nbsp;can update the code or user interface of the mail app conveniently just on&amp;nbsp;the web server. This presents a significant advantage over the&amp;nbsp;administrative overhead involved in updating add-ins.&lt;/li&gt;
&lt;li&gt;You can use a common web&amp;nbsp;development platform for mail apps that can roam across the Outlook rich&amp;nbsp;client and Outlook Web App on the desktop, tablet, and smartphone. On the&amp;nbsp;other hand, add-ins use the object model for the Outlook rich client and,&amp;nbsp;hence, can run on only that rich client on a desktop form factor.&lt;/li&gt;
&lt;li&gt;You can enjoy rapid turnaround&amp;nbsp;of building and releasing apps via the Office Store.&lt;/li&gt;
&lt;li&gt;Because of the three-tier&amp;nbsp;permissions model, users and administrators can appreciate better security&amp;nbsp;and privacy in mail apps than add-ins, which have full access to the&amp;nbsp;content of each account in the user&amp;rsquo;s profile. This, in turn, encourages&amp;nbsp;user consumption of apps.&lt;/li&gt;
&lt;li&gt;Depending on your scenarios,&amp;nbsp;there are features unique to mail apps that you can take advantage of and&amp;nbsp;that are not supported by add-ins:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;You can specify a mail app to&amp;nbsp;activate only for certain contexts (for example, Outlook displays the app&amp;nbsp;in the app bar only if the message class of the user-selected appointment&amp;nbsp;is IPM.Appointment.Contoso, or if the body of an email contains a package&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tracking number or a customer identifier).&lt;/li&gt;
&lt;li&gt;You can activate a mail app&amp;nbsp;if the selected message contains some known entities, such as an address,&amp;nbsp;contact, email address, meeting suggestion, or task suggestion.&lt;/li&gt;
&lt;li&gt;You can take advantage of&amp;nbsp;authentication by identity tokens and of Exchange Web Services.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h1&gt;Reasons to choose add-ins&lt;/h1&gt;
&lt;p&gt;The following features are unique to add-ins and may make them a more appropriate choice than mail apps in some circumstances:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can use add-ins to extend&amp;nbsp;or automate Outlook at an application-level, because the object model and&amp;nbsp;PIA have extensive integration with Outlook features (such as all Outlook&amp;nbsp;item types, user interface, sessions, and rules). At the item-level,&amp;nbsp;add-ins can interact with an item in read or compose mode. With mail apps,&amp;nbsp;you cannot automate Outlook at the application level, and you can extend&amp;nbsp;Outlook&amp;rsquo;s functionality in the context of only the read-mode of the supported&amp;nbsp;items (messages and appointments) in the user&amp;rsquo;s mailbox.&lt;/li&gt;
&lt;li&gt;You can specify custom&amp;nbsp;business logic for a new item type.&lt;/li&gt;
&lt;li&gt;You can modify and add custom&amp;nbsp;commands in the ribbon and Backstage view.&lt;/li&gt;
&lt;li&gt;You can display a custom form&amp;nbsp;page or form region.&lt;/li&gt;
&lt;li&gt;You can detect events such as&amp;nbsp;sending an item or modifying properties of an item.&lt;/li&gt;
&lt;li&gt;You can use add-ins on Outlook&amp;nbsp;2013 and Exchange Server 2013, as well as earlier versions of Outlook and&amp;nbsp;Exchange. On the other hand, mail apps work with Outlook and Exchange&amp;nbsp;starting in Outlook 2013 and Exchange Server 2013, but not earlier&amp;nbsp;versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;When you are considering creating a solution for Outlook, first verify whether the supported major features and objects of the apps for Office platform meet your needs. Develop your solution as a mail app, if possible, to take advantage of the platform&amp;rsquo;s support across Outlook clients over the desktop, tablet, and smartphone form factors. Note that there are still some circumstances where add-ins are more appropriate, and you should prioritize the goals of your solution before making a decision.&lt;/p&gt;
&lt;h1&gt;Further references&lt;/h1&gt;
&lt;h2&gt;Apps for Office and mail apps&lt;/h2&gt;
&lt;div class="title"&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/jj220060.aspx" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Build apps for Office" target="_blank"&gt;Build apps for Office&lt;/a&gt;&lt;/div&gt;
&lt;div class="title"&gt;
&lt;div class="title"&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/fp161135.aspx" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Mail apps for Outlook" target="_blank"&gt;Mail apps for Outlook&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="title"&gt;
&lt;div class="title"&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/fp142185.aspx" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/JavaScript API for Office" target="_blank"&gt;JavaScript API for Office&lt;/a&gt;&lt;/div&gt;
&lt;div class="title"&gt;
&lt;div class="title"&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/fp123693.aspx" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Schema reference for apps for Office manifests" target="_blank"&gt;Schema reference for apps for Office manifests&lt;/a&gt;&lt;/div&gt;
&lt;h2 class="title"&gt;Legacy Outlook object model and APIs&lt;/h2&gt;
&lt;div class="title"&gt;
&lt;div class="title"&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ee861520.aspx" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Welcome to the Outlook 2013 developer reference" target="_blank"&gt;Welcome to the Outlook 2013 developer reference&lt;/a&gt;&lt;/div&gt;
&lt;div class="title"&gt;
&lt;div class="title"&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/cc765775.aspx" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Outlook 2013 MAPI Reference" target="_blank"&gt;Outlook 2013 MAPI Reference&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="title"&gt;
&lt;div class="title"&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/jj228679.aspx" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/What's new for Outlook 2013 developers" target="_blank"&gt;What's new for Outlook 2013 developers&lt;/a&gt;&lt;/div&gt;
&lt;div class="title"&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/bb652780(office.14).aspx" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Welcome to the Outlook 2010 Primary Interop Assembly Reference" target="_blank"&gt;Welcome to the Outlook 2010 Primary Interop Assembly Reference&lt;/a&gt;&lt;/div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&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=10376208" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-37-62-08/mod_5F00_off15_5F00_OfficeJSAPIs_5F00_MailApps_5F00_All_5F00_updated.pdf" length="346089" type="application/pdf" /><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Outlook/">Outlook</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/VBA/">VBA</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/add_2D00_in/">add-in</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/mail+app/">mail app</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/apps+for+Office/">apps for Office</category></item><item><title>What's new for developers in Visio 2013?</title><link>http://blogs.msdn.com/b/officedevdocs/archive/2012/10/29/what-s-new-for-developers-in-visio-2013.aspx</link><pubDate>Mon, 29 Oct 2012 22:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10363810</guid><dc:creator>Saul Candib</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officedevdocs/rsscomments.aspx?WeblogPostID=10363810</wfw:commentRss><comments>http://blogs.msdn.com/b/officedevdocs/archive/2012/10/29/what-s-new-for-developers-in-visio-2013.aspx#comments</comments><description>&lt;p&gt;In this post, I'll introduce some of the new features of interest to developers in Visio 2013. Among these features are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#vzNewFileFmt"&gt;New file format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vzThemes"&gt;Robust updates to themes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vzChangeShape"&gt;The change shape feature (that allows you to replace one shape with another while Maintaining shape text)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vzShapeEffects"&gt;New shape effects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vzCommenting"&gt;Improvements to commenting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vzCoauthoring"&gt;Coauthoring on SharePoint Server 2013&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vzCustomImageClip"&gt;Customizable image clipping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vzRelativeGeom"&gt;Relative geometry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vzBizConnectData"&gt;Support for Business Connectivity Services (BCS) data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vzVzServices"&gt;Updates to Visio Services in Microsoft SharePoint Server 2013&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vzDupPage"&gt;Duplicate page feature&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At the end of the post, I provide you with some &lt;a href="#vzAddResources"&gt;additional resources&lt;/a&gt; for both Visio and general Office development.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;a name="vzNewFileFmt"&gt;&lt;/a&gt;New file format&lt;/h1&gt;
&lt;p&gt;Visio 2013 introduces a new file format, based on the Open Packaging Conventions (OPC) standard (ISO 29500, Part 2) and the XML elements from the previous Visio XML file format (.vdx). It is a zipped, XML-based file format similar to the file formats used in other applications.&lt;/p&gt;
&lt;p&gt;Because the new file format is supported by both Visio 2013 and Visio Services in Microsoft SharePoint Server 2013, you can save a Visio drawing directly to a SharePoint Server library without having to first publish the file as a Visio Web Drawing (.vdw). Even so, Visio Services can still read and display Visio Web Drawing files.&lt;/p&gt;
&lt;p&gt;The new file format includes the following file types (by extension):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.vsdx (Visio drawing)&lt;/li&gt;
&lt;li&gt;.vsdm (Visio macro-enabled drawing)&lt;/li&gt;
&lt;li&gt;.vssx (Visio stencil)&lt;/li&gt;
&lt;li&gt;.vssm (Visio macro-enabled stencil)&lt;/li&gt;
&lt;li&gt;.vstx (Visio template)&lt;/li&gt;
&lt;li&gt;.vstm (Visio macro-enabled template)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By using existing support for reading and writing to the file format package (such as &lt;span style="text-decoration: underline;"&gt;System.IO.Packaging&lt;/span&gt;) and for parsing XML (&lt;span style="text-decoration: underline;"&gt;System.Xml.Linq&lt;/span&gt;), you can work with the new file formats programmatically.&lt;/p&gt;
&lt;p&gt;Visio 2013 retains the ability to read the old file formats (.vsd, .vss, .vst, .vdx, .vsx, .vtx, .vdw, .vwi). Visio 2013 does not save to the previous Visio XML file format (.vdx). Solutions or tools that consume the previous Visio XML file format (.vdx) files may need to be refactored in order to read the new file format and its schemas.&lt;/p&gt;
&lt;p&gt;Visio Services retains the ability to display the Visio Web Drawing (.vdw) format in the browser. It now also renders the new Visio drawing (.vsdx) and Visio macro-enabled drawing (.vsdm) formats.&lt;/p&gt;
&lt;p&gt;For more information about the new file format, see the article &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj649391(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;How to: Manipulate the Visio 2013 file format programmatically&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;h1&gt;&lt;strong&gt;&lt;a name="vzThemes"&gt;&lt;/a&gt;Themes&lt;/strong&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Themes have been redesigned in Visio 2013, making use of a greater variety of effects and styles including the integration of Shape Art effects. Users can now decide on an overarching style by applying a theme, personalize the diagram with theme variants, and highlight individual shapes with Quick Styles. ShapeSheet developers can take advantage of these features with new functions and cells in the ShapeSheet.&lt;/p&gt;
&lt;p&gt;The user interface for applying theme variants is shown in the following figure.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/0456.Theme-Variants.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/0456.Theme-Variants.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You can also manipulate themes at the &lt;a href="http://msdn.microsoft.com/en-us/library/office/ff767035(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Page&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/office/ff768546(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Shape&lt;/span&gt;&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/office/ff768737(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Selection&lt;/span&gt;&lt;/a&gt; object level. New APIs for working with themes include &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj228449(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Page.SetTheme&lt;/span&gt;&lt;/a&gt; method, &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj229013(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Page.SetThemeVariant&lt;/span&gt;&lt;/a&gt; method, &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj229506(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Shape.SetQuickStyle&lt;/span&gt;&lt;/a&gt; method, and the &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj228008(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Selection.SetQuickStyle&lt;/span&gt;&lt;/a&gt; method.&lt;/p&gt;
&lt;p&gt;For more information about new VBA objects and members in Visio 2013, see the &lt;a href="http://msdn.microsoft.com/en-us/library/office/ee861526(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Visio Automation reference&lt;/span&gt;&lt;/a&gt;. For more information about the new ShapeSheet cells in Visio 2013, see the article &lt;a href="file:///C:/Users/saulc/AppData/Local/Temp/DxEditor/DduePreview/Default/bc3c6ce8-e84d-4a84-9be3-bee75056b835/HTM/html/d4f0cf7a-ac4b-c914-7887-e1d65e9d59fa"&gt;&lt;span style="color: #0000ff;"&gt;What's new for ShapeSheet developers in Visio 2013&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;h1&gt;&lt;strong&gt;&lt;a name="vzChangeShape"&gt;&lt;/a&gt;Change Shape&lt;/strong&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Visio 2013 includes a shape replacement API that enables you to swap one or more shapes for another shape contained in a stencil, while retaining some of the local values from the original shape, like the shape text shape, shape data, or shape formatting. Shape developers can update the ShapeSheet settings of their custom shapes to specify the Change Shape behavior for their shapes. Among the new APIs for Change Shape are the &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj229596(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Shape.ReplaceShape&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj230175(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Selection.ReplaceShape&lt;/span&gt;&lt;/a&gt; methods and the &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj227717(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;ReplaceShapesEvent&lt;/span&gt;&lt;/a&gt; object.&lt;/p&gt;
&lt;p&gt;The Change Shape feature lets you easily change a shape (in this case, the green rectangle)&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/0880.Change-Shape-Before.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/0880.Change-Shape-Before.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;hellip;to another shape, the green diamond.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/1234.Change-Shape-After.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/1234.Change-Shape-After.png" alt="" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For more information about the Change Shape feature, see Eric Schmidt&amp;rsquo;s blog post, &lt;a href="http://blogs.msdn.com/b/officedevdocs/archive/2012/08/23/change-shapes-in-visio-2013.aspx"&gt;&lt;span style="color: #0000ff;"&gt;Change shapes in Visio 2013&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more information about new VBA objects and members in Visio 2013, see the &lt;a href="http://msdn.microsoft.com/en-us/library/office/ee861526(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Visio Automation reference&lt;/span&gt;&lt;/a&gt;. For more information about the new ShapeSheet cells in Visio 2013, see the article &lt;a href="file:///C:/Users/saulc/AppData/Local/Temp/DxEditor/DduePreview/Default/bc3c6ce8-e84d-4a84-9be3-bee75056b835/HTM/html/d4f0cf7a-ac4b-c914-7887-e1d65e9d59fa"&gt;&lt;span style="color: #0000ff;"&gt;What's new for ShapeSheet developers in Visio 2013&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;h1&gt;&lt;strong&gt;&lt;a name="vzShapeEffects"&gt;&lt;/a&gt;Shape effects&lt;/strong&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;New shape effects such as bevel, 3-D rotation, glow, reflection, and sketching have been added to Visio 2013. The ShapeSheet includes new cells for working with these effects. The following figure shows a shape to which effects have been applied.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/5342.Shape-Effects.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/5342.Shape-Effects.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can also use Office VBA objects such as &lt;strong&gt;TextFrame2&lt;/strong&gt;, &lt;strong&gt;GlowFormat&lt;/strong&gt;, and &lt;strong&gt;ReflectionFormat&lt;/strong&gt; and their members to apply shape effects.&lt;/p&gt;
&lt;p&gt;For more information about the new ShapeSheet cells in Visio 2013, see the article &lt;a href="file:///C:/Users/saulc/AppData/Local/Temp/DxEditor/DduePreview/Default/bc3c6ce8-e84d-4a84-9be3-bee75056b835/HTM/html/d4f0cf7a-ac4b-c914-7887-e1d65e9d59fa"&gt;&lt;span style="color: #0000ff;"&gt;What's new for ShapeSheet developers in Visio 2013&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;h1&gt;&lt;strong&gt;&lt;a name="vzCommenting"&gt;&lt;/a&gt;Commenting&lt;/strong&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Visio 2013 includes a new commenting framework. Comments can now be associated with a particular shape or page. Visio 2013 includes two new objects, &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj228909(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Comments&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj230535(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Comment&lt;/span&gt;&lt;/a&gt;. New APIs for accessing comments programmatically include the &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj227515(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Document.Comments&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj229239(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Page.Comments&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj228257(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Shape.Comments&lt;/span&gt;&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj229680(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Page.ShapeComments&lt;/span&gt;&lt;/a&gt; properties.&lt;/p&gt;
&lt;p&gt;The following images show what comments looked like in Visio 2010 and what they look like in Visio 2013.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/7888.Commenting-1.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/7888.Commenting-1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/1738.Commenting-2.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/1738.Commenting-2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Visio Services includes JavaScript APIs to read the comments from a page or shape in a diagram.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can no longer access comments in the ShapeSheet.&lt;/p&gt;
&lt;div&gt;
&lt;h1&gt;&lt;strong&gt;&lt;a name="vzCoauthoring"&gt;&lt;/a&gt;Coauthoring&lt;/strong&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Visio 2013 includes the ability to co-author diagrams stored on SharePoint or SkyDrive. Developers have access to the &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj228345(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Document.AfterDocumentMerge&lt;/span&gt;&lt;/a&gt; event which provides information about diagram changes due to coauthoring. Solution developers also have the ability to disable coauthoring to suit their custom needs by using the &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj228716(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;NoCoauth&lt;/span&gt;&lt;/a&gt; cell on the Document ShapeSheet.&lt;/p&gt;
&lt;div&gt;
&lt;h1&gt;&lt;strong&gt;&lt;a name="vzCustomImageClip"&gt;&lt;/a&gt;Customizable image clipping&lt;/strong&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Visio 2013 supports defining a Custom Image Clipping path to crop images to any shape. This extends the capacities of Visio 2010, which supported clipping images in a rectangular way. This functionality is available in the ShapeSheet by using the &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj227419(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;ClippingPath&lt;/span&gt;&lt;/a&gt; cell in the &lt;strong&gt;Foreign Image Info&lt;/strong&gt; section.&lt;/p&gt;
&lt;div&gt;
&lt;h1&gt;&lt;strong&gt;&lt;a name="vzRelativeGeom"&gt;&lt;/a&gt;Relative geometries&lt;/strong&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;In previous versions of Visio, shape geometry was defined by formulas that depended on the height or width of the shape. For example, in Visio 2010 the vertices of many built-in Visio shapes were defined by multiplying the height or width of the shape by a constant. These shapes had &lt;strong&gt;Geometry&lt;/strong&gt; sections that included &lt;a href="http://msdn.microsoft.com/en-us/library/office/ff768233(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;MoveTo&lt;/span&gt;&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/office/ff766809(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;LineTo&lt;/span&gt;&lt;/a&gt; rows (for example) with formulas like Width*1 and Height*0.&lt;/p&gt;
&lt;p&gt;Visio 2013 now supports relative geometry in the ShapeSheet. Shape developers can now use relative geometries to specify geometries as simple values or formulas, which multiply by the height or width automatically. You can now express Shape vertices by using constants, for instance&amp;mdash;you no longer need to express vertices as multiples of the shape width or height. This makes it easier for you to create shapes that have better performance and smaller file sizes. New rows include the &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj227291(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;RelMoveTo&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj229412(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;RelLineTo&lt;/span&gt;&lt;/a&gt; rows where the &lt;strong&gt;X&lt;/strong&gt; and &lt;strong&gt;Y&lt;/strong&gt; cell values are automatically multiplied by the width or height of the shape (respectively).&lt;/p&gt;
&lt;div&gt;
&lt;h1&gt;&lt;strong&gt;&lt;a name="vzBizConnectData"&gt;&lt;/a&gt;Support for Business Connectivity Services (BCS) data&lt;/strong&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Visio 2013 diagrams can now be connected to external lists on SharePoint Server 2013 servers. An external list is a content source external to SharePoint (for example, a SQL Server table) that has been connected to a SharePoint list by using Microsoft Business Connectivity Services (BCS). Visio Services supports the ability to refresh the Visio diagrams as the data updates.&lt;/p&gt;
&lt;p&gt;For more information about what&amp;rsquo;s new in Visio Services, see the article &lt;a href="http://msdn.microsoft.com/en-us/library/jj164027(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Visio Services in SharePoint 2013&lt;/span&gt;&lt;/a&gt;. For more information about Business Connectivity Services (BCS), see &lt;a href="http://msdn.microsoft.com/en-us/library/jj163782(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Business Connectivity Services in SharePoint 2013&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;h1&gt;&lt;strong&gt;&lt;a name="vzVzServices"&gt;&lt;/a&gt;Improvements in Visio Services&lt;/strong&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Visio Services in Microsoft SharePoint Server 2013 includes many improvements. As mentioned previously, Visio Services supports the new Visio file format (.vsdx and .vsdm). Visio Services has expanded data refresh and recalculation, including the ability to recalculate formulas across an entire diagram.&lt;/p&gt;
&lt;p&gt;For more information about what&amp;rsquo;s new in Visio Services, see the article &lt;a href="http://msdn.microsoft.com/en-us/library/jj164027(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Visio Services in SharePoint 2013&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;h1&gt;&lt;strong&gt;&lt;a name="vzDupPage"&gt;&lt;/a&gt;Duplicate page&lt;/strong&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;You can now copy a page and all of its shapes within the same document in Visio 2013. Accordingly, the &lt;strong&gt;Page&lt;/strong&gt; object has a new method, &lt;a href="http://msdn.microsoft.com/en-us/library/jj228005(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;"&gt;Duplicate&lt;/span&gt;&lt;/a&gt;, which duplicates the page and returns a new &lt;strong&gt;Page&lt;/strong&gt; object.&lt;/p&gt;
&lt;div&gt;
&lt;h1&gt;&lt;strong&gt;&lt;a name="vzAddResources"&gt;&lt;/a&gt;Additional resources&lt;/strong&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/office/aa905478.aspx" target="_blank"&gt;&lt;span style="color: #0000ff;"&gt;Visio for developers&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="file:///C:/Users/saulc/AppData/Local/Temp/DxEditor/DduePreview/Default/bc3c6ce8-e84d-4a84-9be3-bee75056b835/HTM/html/d4f0cf7a-ac4b-c914-7887-e1d65e9d59fa"&gt;&lt;span style="color: #0000ff;"&gt;What's new for ShapeSheet developers in Visio 2013&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="file:///C:/Users/saulc/AppData/Local/Temp/DxEditor/DduePreview/Default/bc3c6ce8-e84d-4a84-9be3-bee75056b835/HTM/html/ed8c5d12-e17d-4ceb-b195-601c26824370"&gt;&lt;span style="color: #0000ff;"&gt;Visio Services in SharePoint 2013&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://office.com/redir/HA102749364.aspx" target="_blank"&gt;&lt;span style="color: #0000ff;"&gt;What&amp;rsquo;s new in Visio (Office.com)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/office/aa905478.aspx" target="_blank"&gt;&lt;span style="color: #0000ff;"&gt;Visio Developer Center&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Want to learn more about the latest in Office development? Visit the &lt;a href="http://msdn.microsoft.com/en-US/office/apps/fp160950"&gt;Apps for Office and SharePoint&amp;nbsp;Developer Center&lt;/a&gt; and the &lt;a href="http://blogs.msdn.com/b/officeapps/"&gt;Apps for Office and SharePoint blog&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=10363810" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Visio/">Visio</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Visio+Services/">Visio Services</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Shapes/">Shapes</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/BCS/">BCS</category></item><item><title>What’s new in Access 2013 for developers</title><link>http://blogs.msdn.com/b/officedevdocs/archive/2012/10/24/what-s-new-in-access-2013-for-developers.aspx</link><pubDate>Wed, 24 Oct 2012 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10361829</guid><dc:creator>S. D. Oliver</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officedevdocs/rsscomments.aspx?WeblogPostID=10361829</wfw:commentRss><comments>http://blogs.msdn.com/b/officedevdocs/archive/2012/10/24/what-s-new-in-access-2013-for-developers.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;Mike Stowe,&amp;nbsp;Programming Writer, Office Developer Documentation team, authored today's post.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Access 2013 features a new type of application model, Access apps, that&amp;rsquo;s makes it easy to create, customize, and deploy an app to the cloud. This post briefly describes some of the features that make that possible.&lt;/p&gt;
&lt;h1&gt;Bring Access apps to the cloud with Office 365&lt;/h1&gt;
&lt;p&gt;If you subscribe to the Office 365 plan includes SharePoint Online, such as &lt;a href="http://www.microsoft.com/office/preview/en/office-365-small-business-premiumhttp:/www.microsoft.com/office/preview/en/office-365-small-business-premium"&gt;Office 365 Small Business Premium&lt;/a&gt; or &lt;a href="http://www.microsoft.com/office/preview/en/office-365-enterprise"&gt;Office 365 Enterprise&lt;/a&gt;, you can host your Access 2013 apps in the cloud with no extra setup required. Microsoft will make sure your data is secure, backed-up, and available, so that you can focus on getting things done.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;For more information about hosting your Access app in the cloud, see &lt;a href="http://blogs.office.com/b/microsoft-access/archive/2012/07/30/get-started-with-access-2013.aspx"&gt;Get started with Access 2013 Web Apps&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;Access apps are SharePoint apps&lt;/h1&gt;
&lt;p&gt;SharePoint 2013 features a new application model, &lt;a href="http://blogs.msdn.com/b/officeapps/archive/2012/07/17/introducing-the-new-office-cloud-app-model.aspx"&gt;apps for SharePoint&lt;/a&gt;. In an on-premises environment, Access apps are hosted on SharePoint 2013. SharePoint 2013 provides the infrastructure and tools to manage, deploy, and maintain your app. Your Access app can be featured in your company&amp;rsquo;s app catalog, where users can discover and install it in just a few clicks. Best of all, anyone with a web browser and an internet connection can use your app, even if Access isn&amp;rsquo;t installed on their device.&lt;/p&gt;
&lt;p&gt;For information about apps for Office 2013, see &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161507(v=office.15)"&gt;Apps for Office and SharePoint&lt;/a&gt;&amp;nbsp;in the MSDN online library. Additionally, you can follow the Apps for Office and SharePoint developer &lt;a href="http://blogs.msdn.com/b/officeapps"&gt;blog&lt;/a&gt; to keep up on the latest information around apps for Office and SharePoint.&lt;/p&gt;
&lt;h1&gt;SQL Server back-end&lt;/h1&gt;
&lt;p&gt;When you create an Access app &amp;mdash;whether on-premise or through Office 365&amp;mdash;a full-fledged SQL Server database is automatically created to store its data and objects. This means that your app will be faster, more reliable, and work great with large amounts of data. If you&amp;rsquo;re already familiar with SQL Server you can connect to this database for advanced reporting and analysis with familiar tools such as Excel, Power View, and Crystal Reports. Your users can rest assured that their apps are ready for the future if they ever need to enhance them with advanced integrations or migrations.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;For more information about Access apps and SQL Server, see &lt;a href="http://blogs.office.com/b/microsoft-access/archive/2012/08/08/access-2013-and-sql-server.aspx"&gt;Access 2013 and SQL Server&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;Polished user experience&lt;/h1&gt;
&lt;p&gt;Access apps feature a polished user interface (UI) that&amp;rsquo;s optimized for the web. When you create a table, Access automatically creates a set of views for you to customize. The default views contain different paradigms for filtering and data entry. They contain some features that you&amp;rsquo;d have to code by hand in an Access desktop database.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;List Details view allows the user to filter the view by using a search box. Datasheet view provides a spreadsheet-like experience for users who prefer to view many records at once. If your app contains related data, Access adds a control to the view that displays the related items, allowing the user to &amp;ldquo;drill-down&amp;rdquo; on the details.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;For more information about views, see &lt;a href="http://msdn.microsoft.com/en-us/library/jj250134(v=office.15).aspx"&gt;what&amp;rsquo;s new for Access 2013 developers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10361829" width="1" height="1"&gt;</description></item><item><title>Office 2013 Developer Content Landscape</title><link>http://blogs.msdn.com/b/officedevdocs/archive/2012/10/02/office-2013-developer-content-landscape.aspx</link><pubDate>Tue, 02 Oct 2012 22:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10355294</guid><dc:creator>Luke Nyswonger</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officedevdocs/rsscomments.aspx?WeblogPostID=10355294</wfw:commentRss><comments>http://blogs.msdn.com/b/officedevdocs/archive/2012/10/02/office-2013-developer-content-landscape.aspx#comments</comments><description>&lt;p&gt;Hi, my name is Luke Nyswonger and I lead the developer content team for Office programmability. My team creates developer docs, code samples, and videos for client extensibility&amp;mdash;apps for Office, VBA, Open XML, etc. In this version of Office, we made a much larger investment for developers than any other previous releases. As both &lt;a title="http://blogs.msdn.com/b/officeapps/archive/2012/07/23/introducing-apps-for-the-new-office-and-sharepoint.aspx" href="http://blogs.msdn.com/b/officeapps/archive/2012/07/23/introducing-apps-for-the-new-office-and-sharepoint.aspx"&gt;Brian&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/b/officeapps/archive/2012/08/02/anatomy-of-apps-for-office.aspx"&gt;Rolando&lt;/a&gt; discussed in their posts, our new &lt;a href="http://blogs.msdn.com/b/officeapps/archive/2012/07/17/introducing-the-new-office-cloud-app-model.aspx"&gt;Office cloud app model&lt;/a&gt; complements our existing extensibility model and provides you more choices.&amp;nbsp;Today I&amp;rsquo;m going to provide an overview of our content landscape, changes we made to the overall experience, our F1 Help story, some pointers to get you started and ways to provide feedback to the team.&lt;/p&gt;
&lt;h2&gt;Less is definitely more&lt;/h2&gt;
&lt;p&gt;One goal for this release was to ensure that the user experience on the web was optimized. To that end, we reduced noise in the system and refreshed our content&amp;nbsp;with a modern approach. In short, we not only spent time writing, but also optimized the entire experience so content is discoverable and usable. You can ask my team how tired they were of hearing my mantra &amp;ldquo;More code, more pics, less text.&amp;rdquo;&lt;br /&gt;&lt;br /&gt;Why make such a change? Here are a few fun facts that helped influence our decision:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tons of content&lt;/strong&gt;. There are nearly 900,000 pieces of developer-related content assets in 11 locales that need to be managed and groomed from release to release.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customer satisfaction&lt;/strong&gt;. In customer surveys, satisfaction scores indicate that discoverability is a major pain point. In fact, only 54% of developers actually find what they are looking for when searching Office developer content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search&lt;/strong&gt;. Significantly more traffic comes from search, not context-sensitive (F1) Help calls. Most page views are actually links from other Microsoft properties.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We had to embrace the fact that people are consuming information in different ways, on different devices and therefore the style and depth at which we wrote content needed to change. For this release we&amp;rsquo;ve taken two measurable approaches:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reduce the footprint&lt;/strong&gt;. Retiring legacy and non-performing pages, consolidating content. Reduce clutter so you can more-easily find what you are looking for.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create the right content and make it modern&lt;/strong&gt;. Skimming instead of reading is a fact on the web. In this release, we&amp;rsquo;ve optimized content to be more &amp;ldquo;glanceable&amp;rdquo; and to provide quick access to the information you need.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Farewell &amp;ldquo;wall of links&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;Writers love to write. We also love to create those dreaded &amp;ldquo;walls of links&amp;rdquo;. &lt;br /&gt;We&amp;rsquo;ve reduced the number of pages that consist solely of links and redesigned our remaining navigation pages to be easier to skim and use to find the information you need. As an example, we reduced the number of navigation pages from 432 to 100 (-77%).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/2746.10_2D00_2_2D00_2012-5_2D00_16_2D00_26-PM.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/2746.10_2D00_2_2D00_2012-5_2D00_16_2D00_26-PM.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Is that the MSDN Library?&lt;/h2&gt;
&lt;p&gt;In addition to the redesign of the developer centers, we also overhauled our content model for the library so that it was easier to navigate and use. You&amp;rsquo;ll notice our new approach to modern content and the use of everyday language. The following screenshot, from the article &lt;a href="http://msdn.microsoft.com/en-us/library/office/ff837594(v=office.15)"&gt;What&amp;rsquo;s New for Excel 2013 developers&lt;/a&gt;, is a good example of where we are headed with our approach to modern content.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/0246.10_2D00_2_2D00_2012-5_2D00_17_2D00_05-PM.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/0246.10_2D00_2_2D00_2012-5_2D00_17_2D00_05-PM.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On the left side of this page, you&amp;rsquo;ll see a new table-of-contents experience. We call this a &amp;ldquo;scoped view&amp;rdquo; of the MSDN library. We wanted to mirror this experience with all our navigational pages so the Office developer experience had a consistent look and feel. Take a look at these two examples to understand the difference:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff837594(office.15).aspx"&gt;Non-scoped View&lt;/a&gt; (Lightweight, Classic, or ScriptFree)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/ff837594(v=office.15)"&gt;Scoped View&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jakob Nielsen has a famous quote in his &lt;a href="http://www.amazon.com/Designing-Web-Usability-Jakob-Nielsen/dp/156205810X/ref=sr_1_1?ie=UTF8&amp;amp;qid=1348529012&amp;amp;sr=8-1&amp;amp;keywords=designing+web+usability"&gt;book on web usability&lt;/a&gt;, &amp;ldquo;&lt;em&gt;Ultimately, users visit your web site for the content. Everything else is just the backdrop. The design is there to allow people access to the content&lt;/em&gt;.&amp;rdquo; Eloquently put, Jakob! Through our design changes, content layout and approach to how we author the content, we hope that you are finding what you need and that the content and scenarios we are documenting are serving your needs. If not, let us know!&lt;/p&gt;
&lt;h2&gt;Enough about docs, what about code samples!?&lt;/h2&gt;
&lt;p&gt;If there is one thing we know, developers love code! It&amp;rsquo;s consistently the number one request from customers. In this release, we are building more code samples (solutions, examples, and snippets) across the content space.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Get samples online&lt;/strong&gt;. In MSDN Code Gallery, you can discover new code samples, share your own samples, and &lt;a href="http://code.msdn.microsoft.com/office/site/requests"&gt;request new samples&lt;/a&gt;. We have a section dedicated entirely to &lt;a href="http://code.msdn.microsoft.com/office"&gt;Office&lt;/a&gt; as well as &lt;a href="http://code.msdn.microsoft.com/officeapps"&gt;Apps for Office&lt;/a&gt; and have begun stocking the shelves to help you accelerate stocking the &lt;a href="http://blogs.msdn.com/b/officeapps/archive/2012/08/06/173-173-the-office-store-is-now-open.aspx"&gt;Office Store&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/2705.10_2D00_2_2D00_2012-5_2D00_17_2D00_41-PM.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/2705.10_2D00_2_2D00_2012-5_2D00_17_2D00_41-PM.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;See samples from within Visual Studio&lt;/strong&gt;. If you&amp;rsquo;re using Visual Studio for development, there&amp;rsquo;s a &lt;a href="http://msdn.microsoft.com/en-us/library/jj157272.aspx"&gt;great new feature&lt;/a&gt; available in Visual Studio 2012 that allows you browse samples from the MSDN Code Gallery and download them directly into your environment.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/1425.10_2D00_2_2D00_2012-5_2D00_17_2D00_58-PM.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/1425.10_2D00_2_2D00_2012-5_2D00_17_2D00_58-PM.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;View examples inline with the docs&lt;/strong&gt;. As always, we&amp;rsquo;ll continue to provide code examples and snippets within the documentation itself so you can copy/paste until your heart is content.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/2728.10_2D00_2_2D00_2012-5_2D00_18_2D00_16-PM.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/2728.10_2D00_2_2D00_2012-5_2D00_18_2D00_16-PM.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Who moved my cheese?&lt;/h2&gt;
&lt;p&gt;In previous versions of our developer documentation, we provided the ability to browse and read documentation offline. Pressing F1 from within the Visual Basic Editor (VBE) could be configured to route directly to the offline content with no need to be connected to the Internet. In addition, you could search and browse the offline content. This comes in handy when you&amp;rsquo;re bored on the beach and need to find out exactly &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj229830(v=office.15).aspx"&gt;what&amp;rsquo;s new for developers in Office 2013&lt;/a&gt;. Within the walls of Microsoft, we often refer to this experience as the &amp;ldquo;airplane scenario.&amp;rdquo; Investing in this experience has been a perennial debate across the company within every major division and for every product for the past decade.&lt;/p&gt;
&lt;p&gt;In Office 2013, we have made some significant architectural changes for the documentation across the product line&amp;mdash;this includes end-user Help. Here you can see the differences in the user experience with the 2010 and 2013 Help clients.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/4152.10_2D00_3_2D00_2012-9_2D00_01_2D00_40-AM.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/4152.10_2D00_3_2D00_2012-9_2D00_01_2D00_40-AM.jpg" /&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/6354.10_2D00_2_2D00_2012-5_2D00_18_2D00_57-PM.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As part of the change, we also made the decision that all developer related content would be hosted on MSDN and that F1 calls from VBE would be routed to MSDN. This comes with several advantages &amp;ndash; one canonical source of documentation, deep integration with other content on MSDN, in-sync with localized content, rapid bug fixes, always up to date, etc. However, it does have one drawback&amp;hellip;yep you guessed it; we don&amp;rsquo;t support the &amp;ldquo;airplane scenario&amp;rdquo; out of the box. That is, when you install Office 2013 and the developer tools, there is no option to install local developer help.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/2605.10_2D00_2_2D00_2012-5_2D00_19_2D00_20-PM.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/2605.10_2D00_2_2D00_2012-5_2D00_19_2D00_20-PM.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But wait, hold the lemons! For all you coders on an airplane, submarine or behind the firewall, we are going to offer a stand-alone version of the documentation that you can download from MSDN. What&amp;rsquo;s &amp;ldquo;stand-alone&amp;rdquo; you ask? Our &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=30721"&gt;Apps for Office and SharePoint Preview SDK&lt;/a&gt; is representative of the experience you&amp;rsquo;ll have with the full Office developer documentation offline. One thing you need to be aware of is that the F1 experience is an online-only experience so even though you have the offline documentation all of your F1 help calls will route to MSDN. Look for the full download of the Office 2013 developer docs in the near future! If you have any feedback about this approach, we would love to hear it.&lt;/p&gt;
&lt;h2&gt;Speaking of feedback&amp;hellip;&lt;/h2&gt;
&lt;p&gt;Since the first release of the developer documentation at the Customer Preview in July, we have been steadily providing updates, fixes, and new code samples for the documentation. Much of what we update is based on feedback from you. So keep it coming!&lt;/p&gt;
&lt;p&gt;Great, so how do you provide feedback?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/3175.10_2D00_2_2D00_2012-6_2D00_15_2D00_31-PM.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/3175.10_2D00_2_2D00_2012-6_2D00_15_2D00_31-PM.jpg" /&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/2072.10_2D00_2_2D00_2012-5_2D00_19_2D00_37-PM.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are three main ways to provide us feedback on the developer content:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Send us a comment on the topic/article&lt;/strong&gt;. On every article on MSDN we have a feedback and ratings tool. We review every single piece of feedback that comes in and triage it for upcoming content releases. This is done via our &amp;ldquo;double-blind&amp;rdquo; system so the feedback that you provide is anonymous.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Engage us in the community&lt;/strong&gt;. Another way to give us feedback is to engage us in the community at the &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/category/officedev"&gt;support forums&lt;/a&gt;, on &lt;a href="http://www.facebook.com/pages/MSDN-Office-and-SharePoint-Developer-Centers/321737938338"&gt;Facebook&lt;/a&gt; and &lt;a href="http://twitter.com/MSDN_Office"&gt;Twitter&lt;/a&gt;. Heck, we&amp;rsquo;re even on &lt;a href="http://stackoverflow.com/questions/tagged/ms-office"&gt;Stack Overflow&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Send mail directly to the team&lt;/strong&gt;. Yes, that&amp;rsquo;s right! If you feel like you want to reach out with a personal mail please send it directly to &lt;a href="mailto:docthis@microsoft.com"&gt;docthis@microsoft.com&lt;/a&gt; and we&amp;rsquo;ll review and respond.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Hello, "wall of links"&lt;/h2&gt;
&lt;p&gt;I couldn&amp;rsquo;t help myself. So while I have your attention, I&amp;rsquo;m going to showcase a few of the key resources the team has been working on which should be of tremendous value as you start building solutions for the next version of Office.&lt;/p&gt;
&lt;p&gt;Apps for Office&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/office/apps"&gt;Apps for Office and SharePoint Developer Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/apps/jj220082(v=office.15).aspx"&gt;Apps for Office Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/office/apps/jj220065(v=office.15).aspx"&gt;Create your first app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.msdn.microsoft.com/officeapps"&gt;Code Samples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/apps/fp123626"&gt;Training&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;General Office Development&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/office/fp142390"&gt;What&amp;rsquo;s New in Office 2013 for Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/aa905369"&gt;Office developer product map&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/aa905340"&gt;Office Developer Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.msdn.microsoft.com/office"&gt;Code Samples for Office&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/office/gg610406"&gt;Office 2013 Training&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learning Centers - Office Clients&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/aa905400"&gt;Access&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/aa905411"&gt;Excel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/aa905455"&gt;Outlook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/aa905482"&gt;Word&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/aa905434"&gt;InfoPath&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/lync"&gt;Lync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/aa905452"&gt;OneNote&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/aa905465"&gt;PowerPoint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/aa905469"&gt;Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/aa905474"&gt;Publisher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-US/office/aa905478"&gt;Visio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;We are excited about this new release of Office for developers. We&amp;rsquo;ve packed MSDN with all kinds of goodies to help jumpstart your development and we have much more to come for RTM and beyond. If you have thoughts, suggestions or requests, we definitely want to hear them. With over a billion users and one copy of Office sold every second, the potential market opportunity as a developer couldn&amp;rsquo;t be any better.&lt;/p&gt;
&lt;p&gt;Happy coding!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10355294" width="1" height="1"&gt;</description></item><item><title>What's new in Excel 2013 Preview for developers </title><link>http://blogs.msdn.com/b/officedevdocs/archive/2012/09/20/what-s-new-for-developers-in-excel-2013-preview.aspx</link><pubDate>Thu, 20 Sep 2012 17:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10351662</guid><dc:creator>S. D. Oliver</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officedevdocs/rsscomments.aspx?WeblogPostID=10351662</wfw:commentRss><comments>http://blogs.msdn.com/b/officedevdocs/archive/2012/09/20/what-s-new-for-developers-in-excel-2013-preview.aspx#comments</comments><description>&lt;h1&gt;&lt;span&gt;New features for developers in Excel 2013 Preview &lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;&lt;em&gt;Frank Rice, Senior Programming Writer, Office Developer Documentation team, authored today's post.&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This post briefly describes some of the features available to developers in Excel 2013 Preview.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;Apps for Office&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Of course, the big news for developers and users are apps for Office in Excel that brings the web to Excel. Because this feature is web-based, you can use popular dynamic languages (such as Python, PHP, Perl, and JavaScript) and web development tools (such as Microsoft Visual Studio 2012) for application development. You can create two kinds of apps for Office in Excel, Content apps and Task pane apps. Content apps for Office integrate web-based features as content that can be shown in line with the document. Task pane apps for Office work side-by-side with an Office document. For a great example of an app for Office in Excel 2013, see the the &lt;a href="http://blogs.msdn.com/b/officeapps/archive/2012/08/16/designing-the-medal-tracker-template.aspx"&gt;Medal Tracker Template&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;You have probably already seen a lot of information about apps for Office and will definitely see much more in the future, so the rest of this post will focus&amp;nbsp;on some of the other Excel 2013 features. For information about apps for Office 2013, see &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161507(v=office.15)"&gt;Apps for Office and SharePoint&lt;/a&gt;&amp;nbsp;in the MSDN online library. Additionally, you can follow the &lt;a href="http://blogs.msdn.com/b/officeapps"&gt;Apps for Office and SharePoint developer blog&lt;/a&gt; to keep up on the latest information around apps for Office and SharePoint.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;New worksheet features &lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Excel 2013 Preview adds about fifty new worksheet functions for compatibility with the Open Document Format (ODF 1.2). For more information about ODF, see http://opendocumentformat.org/. You can also now use web service functions to anonymously access REST Web services. Of special note is the FILTERXML function, which lets you use XPath expressions to filter the XML returned by a WEBSERVICE function call. &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;Quick Analysis &lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Quick Analysis, as shown in Figure 1, is a contextual UI tool that enables single-click access to data-analysis features, such as formulas, conditional formatting, Sparklines, tables, charts, and PivotTables. You can enable and disable the display of the new Quick Analysis feature in Excel 2013 Preview programmatically by using the Show and Hide methods of the QuickAnalysis object. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 1. Quick Analysis tool &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/6330.Whats_5F00_New_5F00_Excel_5F00_2013_5F00_Preview_5F00_Figure01.jpg"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/6330.Whats_5F00_New_5F00_Excel_5F00_2013_5F00_Preview_5F00_Figure01.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;New data sources &lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;You can connect to many new data sources supported by PowerPivot, including OData feeds, Azure, SharePoint Data Feeds, and other OLE DB providers. The new DataFeedConnection, ModelConnection, TextConnection, and WorksheetDataConnection objects contain data and functionality needed to connect to new data sources. &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;DataModel object model &lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;A new DataModel object model (an addition to the existing VBA object model) enables you to load and refresh data sources programmatically. This extension to the PowerPivot model introduced in Excel 2010 enables you to integrate additional data sources and the ability to combine data from multiple data sources programmatically. &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;Create independent PivotTables and PivotCharts &lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;You can decouple PivotCharts from PivotTables in Excel 2013 Preview. PivotCharts and PivotTables based on an OLAP or PowerPivot data source can be decoupled such that you can create a PivotChart independently of any PivotTable and you can navigate through data by using a PivotChart-only experience. &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;Single document interface &lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;Excel 2013 Preview uses a single-document interface (SDI). SDI means that each workbook will have its own top-level app window and will have its own corresponding ribbon. All existing application-level window methods, events, and properties are unaffected by this change. All existing workbook-level window methods, events, and properties now operate on the top-level window for that workbook. And the list goes on...&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;Conclusion&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;I encourage you to download Excel 2013 Preview and experiment with these and more features for developers not discussed here. You can get Microsoft Office 365 ProPlus Preview which includes Excel as well as Word, PowerPoint, Outlook, and other products at the &lt;a href="http://msdn.microsoft.com/en-US/evalcenter/hh973389.aspx?wt.mc_id=MEC_115_1_5"&gt;MSDN Evaluation Center&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;Additional resources&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;You can find much more information about many of the features for Excel developers in the article titled &lt;a href="http://msdn.microsoft.com/en-us/library/office/ff837594(v=office.15)"&gt;What's new for Excel 2013 developers&lt;/a&gt;. Additionally, you can find information about the developers features available in other Office products in the article titled &lt;a href="http://msdn.microsoft.com/en-us/library/office/jj229830(v=office.15)"&gt;What's new for Office 2013 developers&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10351662" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Apps+for+Office+in+Excel/">Apps for Office in Excel</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Excel+2013+Preview/">Excel 2013 Preview</category></item><item><title>What's new for developers in the new Project desktop (besides task pane apps)</title><link>http://blogs.msdn.com/b/officedevdocs/archive/2012/09/12/what-s-new-for-developers-in-the-new-project-desktop-besides-task-pane-apps.aspx</link><pubDate>Wed, 12 Sep 2012 16:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10345490</guid><dc:creator>Jim  Corbin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officedevdocs/rsscomments.aspx?WeblogPostID=10345490</wfw:commentRss><comments>http://blogs.msdn.com/b/officedevdocs/archive/2012/09/12/what-s-new-for-developers-in-the-new-project-desktop-besides-task-pane-apps.aspx#comments</comments><description>&lt;p&gt;Project Standard 2013 and Project Professional 2013 include many new features for developers, such as new reports, task paths, cache status, and working with SharePoint tasks lists. This article shows VBA examples for new features in Project. You can use the new classes and members in the Project object model with VBA or with Visual Studio 2012 and Tools for Office (VSTO).&lt;/p&gt;
&lt;p&gt;This article does not cover task pane apps, which have a JavaScript API and can be developed with HTML5. Task pane apps are another of the major new programmability features in the Office 2013 versions of Project, Word, and Excel. Word, Excel, and Outlook also support content apps and mail apps. For information about apps for Office 2013, see &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161507(v=office.15)"&gt;Apps for Office and SharePoint&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/office/fp161143(v=office.15)"&gt;Task pane apps for Project&lt;/a&gt; in the MSDN online library. Additionally, you can follow the Apps for Office and SharePoint developer &lt;a href="http://blogs.msdn.com/b/officeapps"&gt;blog&lt;/a&gt; to keep up on the latest information around apps for Office and SharePoint.&lt;/p&gt;
&lt;p&gt;Task pane apps and other apps for Office and SharePoint can be sold in the Office Store (see &lt;a href="http://officepreview.microsoft.com/store/"&gt;http://officepreview.microsoft.com/store/&lt;/a&gt;) for use with both Project Online and on-premises installations. VBA macros and VSTO add-ins cannot be distributed in the Office Store; they are designed for local use with Project Standard and Project Professional. You can distribute VBA macros within a project .MPP file, install them in the Global.MPT file on your machine, or distribute them in the enterprise global template in Project Server 2013. VSTO add-ins can be distributed more securely through &lt;a href="http://msdn.microsoft.com/en-us/library/t71a733d.aspx"&gt;ClickOnce deployment&lt;/a&gt;, which enables easy updates.&lt;/p&gt;
&lt;p&gt;Project has had VBA for decades &amp;ndash; well, since Project 4.0 in 1994 &amp;ndash; and has had a primary interop assembly (Microsoft.Office.Interop.MSProject.dll ) for VSTO add-ins since Project 2003. The PIA includes essentially the same classes, properties, methods, and events that VBA exposes. You can use the VBA object model to create test macros, and then translate them to a VSTO add-in that uses C# or Visual Basic. VSTO add-ins are much more flexible, robust, secure, and manageable than VBA macros. Project 2013 extends the object model to include Office Art, new reports, and new members of the &lt;b&gt;Application&lt;/b&gt;, &lt;b&gt;Project&lt;/b&gt;, and &lt;b&gt;Task&lt;/b&gt; objects that reflect new or improved features.&lt;/p&gt;
&lt;h2&gt;New reports&lt;/h2&gt;
&lt;p&gt;Project 2013 implements most of the Office Art infrastructure that is also used in Word, Excel, and PowerPoint. Project also adds flexible new reports that are directly programmable and use Office Art objects such as &lt;b&gt;Chart&lt;/b&gt;, &lt;b&gt;Shape&lt;/b&gt;, and &lt;b&gt;ShapeRange&lt;/b&gt;. Project adds the &lt;b&gt;Report&lt;/b&gt; object and a &lt;b&gt;ReportTable&lt;/b&gt; shape type, and enables charts and tables to dynamically use task and resource fields in the active project through the Field List task pane.&lt;/p&gt;
&lt;p&gt;Project 2013 includes over 20 new built-in reports such as Project Overview, Task Cost Overview, and Best Practice Analyzer. Each of the new reports contains chart, table, and Office Art shapes. You can create custom reports manually using commands on the &lt;b&gt;REPORT&lt;/b&gt; tab of the ribbon, or programmatically with VBA or VSTO.&lt;/p&gt;
&lt;p&gt;The following code creates a custom report that contains one &lt;b&gt;Shape&lt;/b&gt; object, which is a &lt;b&gt;ReportTable&lt;/b&gt;. The number of elements in the &lt;i&gt;SafeArrayOfPjField&lt;/i&gt; parameter of the &lt;b&gt;UpdateTableData&lt;/b&gt; method specifies the number of columns in the table; fields can be chosen from the 1,338 &lt;a href="http://msdn.microsoft.com/en-us/library/ff867782(office.15).aspx" target="_blank"&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;&lt;strong&gt;PjField&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt; constants. Figure 1 shows the result.&lt;/p&gt;
&lt;div style="font-family: Consolas; background-color: #d6d6d6;"&gt;
&lt;p&gt;&lt;span style="color: blue;"&gt;Sub&lt;/span&gt; TestReportTable()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;theReport &lt;span style="color: blue;"&gt;As &lt;/span&gt;Report&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;tableShape &lt;span style="color: blue;"&gt;As &lt;/span&gt;Shape&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;theReportTable &lt;span style="color: blue;"&gt;As &lt;/span&gt;ReportTable&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;D&lt;span style="color: blue;"&gt;im &lt;/span&gt;reportName &lt;span style="color: blue;"&gt;As String&lt;br /&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt; &amp;nbsp;&amp;nbsp; Dim &lt;/span&gt;tableName &lt;span style="color: blue;"&gt;As String&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;rows &lt;span style="color: blue;"&gt;As Integer&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;columns &lt;span style="color: blue;"&gt;As Integer&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;left &lt;span style="color: blue;"&gt;As Integer&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;top &lt;span style="color: blue;"&gt;As Integer&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;width &lt;span style="color: blue;"&gt;As Integer&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;height &lt;span style="color: blue;"&gt;As Integer&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;reportName = &lt;span style="color: #a31515;"&gt;"Table Report" &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Set &lt;/span&gt;&lt;/span&gt;theReport = ActiveProject.Reports.Add(reportName) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;' Add the table.&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;tableName = &lt;span style="color: #a31515;"&gt;"Task information" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;rows = 0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;columns = 0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;left = 0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;top = 30 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width = 110 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height = 20 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;' Project ignores the NumRows and NumColumns parameters when creating a ReportTable. &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;tableShape = theReport.Shapes.AddTable(rows, columns, _&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;left, top, width, height) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tableShape.Name = tableName &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tableShape.Select() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Set&lt;/span&gt; theReportTable = tableShape.Table &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;' Set fields for the table. &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;fieldArray(1 &lt;span style="color: blue;"&gt;To &lt;/span&gt;6) &lt;span style="color: blue;"&gt;As &lt;/span&gt;PjField &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldArray(1) = pjTaskName &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldArray(2) = pjTaskStart &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldArray(3) = pjTaskFinish &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldArray(4) = pjTaskPercentComplete &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldArray(5) = pjTaskActualCost &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldArray(6) = pjTaskRemainingCost &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;theReportTable.UpdateTableData(Task:=&lt;span style="color: blue;"&gt;True&lt;/span&gt;, OutlineLevel:=1, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SafeArrayOfPjField:=fieldArray)&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;End Sub&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Figure 1. Creating a custom report that contains a table&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/2402.pj15_5F00_VBA_5F00_TestReportTable_5F00_735.gif"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/2402.pj15_5F00_VBA_5F00_TestReportTable_5F00_735.gif" width="616" height="342" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Creating a chart on a report is just as easy. The following code example is copied from the &lt;a href="http://msdn.microsoft.com/en-us/library/office.vbapj.chm131270(v=office.15)"&gt;Chart Object&lt;/a&gt; topic in VBA Help, which creates a default chart and positions the chart title (see Figure 2).&lt;/p&gt;
&lt;div style="font-family: Consolas; background-color: #d6d6d6;"&gt;&lt;span style="color: blue;"&gt;Sub&lt;/span&gt; AddSimpleScalarChart() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;chartReport &lt;span style="color: blue;"&gt;As &lt;/span&gt;Report &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;reportName &lt;span style="color: blue;"&gt;As String &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;' Add a report. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;reportName = &lt;span style="color: #a31515;"&gt;"Simple scalar chart" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Set &lt;/span&gt;&lt;/span&gt;chartReport = ActiveProject.Reports.Add(reportName) &lt;span style="color: green;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' Add a chart. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;chartShape &lt;span style="color: blue;"&gt;As &lt;/span&gt;Shape &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set chartShape = ActiveProject.Reports(reportName).Shapes.AddChart() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;chartShape.Chart.SetElement(msoElementChartTitleCenteredOverlay) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;chartShape.Chart.ChartTitle.Text = &lt;span style="color: #a31515;"&gt;"Sample Chart for the Test1 project" &lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;End Sub &lt;/span&gt;&lt;/div&gt;
&lt;p&gt;When you select the &lt;strong&gt;Chart&lt;/strong&gt; object on the report, you can see the &lt;strong&gt;Field List&lt;/strong&gt; task pane, and manually change the fields, filter, grouping, and sorting (or programmatically change them using the &lt;strong&gt;UpdateChartData&lt;/strong&gt; method).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 2. Creating a default chart on a report &lt;br /&gt; &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50-metablogapi/4606.pj15_5F00_VBA_5F00_ChartObject_5F00_735_5F00_7C67CC2E.gif"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="pj15_VBA_ChartObject_735" border="0" alt="pj15_VBA_ChartObject_735" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50-metablogapi/3618.pj15_5F00_VBA_5F00_ChartObject_5F00_735_5F00_thumb_5F00_27403041.gif" width="616" height="514" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For the built-in reports, you can manually change items on the reports, but you cannot programmatically change the existing items. However, you can copy any of the new reports with the &lt;b&gt;Application.CopyReport&lt;/b&gt; method, create a custom report and paste the copied report to it, and then modify any of the elements. For example, the following code copies the Task Cost Overview report and changes the report title (see Figure 3).&lt;/p&gt;
&lt;div style="font-family: Consolas; background-color: #d6d6d6;"&gt;&lt;span style="color: blue;"&gt;Sub&lt;/span&gt; CopyCostReport() &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;reportName &lt;span style="color: blue;"&gt;As String &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;newReportName &lt;span style="color: blue;"&gt;As String &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;newReportTitle &lt;span style="color: blue;"&gt;As String &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;myNewReport &lt;span style="color: blue;"&gt;As &lt;/span&gt;Report &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;oShape &lt;span style="color: blue;"&gt;As &lt;/span&gt;Shape &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;msg &lt;span style="color: blue;"&gt;As String &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;msgBoxTitle &lt;span style="color: blue;"&gt;As String &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;numShapes &lt;span style="color: blue;"&gt;As Integer &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;reportName = &lt;span style="color: #a31515;"&gt;"Task Cost Overview" &lt;/span&gt;&lt;span style="color: green;"&gt;' The built-in report. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;newReportName = &lt;span style="color: #a31515;"&gt;"Task Cost Copy" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;msg = &lt;span style="color: #a31515;"&gt;"" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;numShapes = 0 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;If &lt;/span&gt;ActiveProject.Reports.IsPresent(reportName) &lt;span style="color: blue;"&gt;Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;ApplyReport(reportName)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;' Display the report. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;CopyReport() myNewReport = ActiveProject.Reports.Add(newReportName) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PasteSourceFormatting()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;' Paste the copy to the new report. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' List the shapes in the copied report. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;For Each &lt;/span&gt;oShape &lt;span style="color: blue;"&gt;In &lt;/span&gt;myNewReport.Shapes &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;numShapes = numShapes + 1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;msg = msg &amp;amp; numShapes &amp;amp; &lt;span style="color: #a31515;"&gt;". Shape type: " &lt;/span&gt;&amp;amp; &lt;span style="color: blue;"&gt;CStr&lt;/span&gt;(oShape.Type) _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; &lt;span style="color: #a31515;"&gt;", '" &lt;/span&gt;&amp;amp; oShape.Name &amp;amp; &lt;span style="color: #a31515;"&gt;"'" &lt;/span&gt;&amp;amp; vbCrLf &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;' Modify the report title. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;If &lt;/span&gt;oShape.Name = &lt;span style="color: #a31515;"&gt;"TextBox 1" &lt;/span&gt;&lt;span style="color: blue;"&gt;Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;newReportTitle = &lt;span style="color: #a31515;"&gt;"My " &lt;/span&gt;&amp;amp; oShape.TextFrame2.TextRange.Text &lt;br /&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;With &lt;/span&gt;oShape.TextFrame2.TextRange &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Text = newReportTitle &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.Characters.Font.Fill.ForeColor.RGB = &amp;amp;H60FF10 &lt;span style="color: green;"&gt;' Bluish green. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;End With &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;oShape.Reflection.Type = msoReflectionType2 &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;oShape.IncrementTop(-10) &lt;span style="color: green;"&gt;' Move title 10 points up. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;oShape.Select() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;End If &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Next &lt;/span&gt;oShape &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;msgBoxTitle = &lt;span style="color: #a31515;"&gt;"Shapes in report: '" &lt;/span&gt;&amp;amp; myNewReport.Name &amp;amp; &lt;span style="color: #a31515;"&gt;"'" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;If &lt;/span&gt;numShapes &amp;gt; 0 &lt;span style="color: blue;"&gt;Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;MsgBox(Prompt:=msg, Title:=msgBoxTitle) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;MsgBox(Prompt:=&lt;span style="color: #a31515;"&gt;"This report contains no shapes."&lt;/span&gt;, _&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Title:=msgBoxTitle) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;End If &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;MsgBox(Prompt:=&lt;span style="color: #a31515;"&gt;"No custom report name: " &lt;/span&gt;&amp;amp; reportName, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title:=&lt;span style="color: #a31515;"&gt;"ApplyReport error"&lt;/span&gt;, Buttons:=vbExclamation)&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End If &lt;br /&gt;End Sub &lt;/span&gt;&lt;/div&gt;
&lt;p&gt;The changes the previous code makes in the report are the color and position of the title (in "TextBox 1", which is selected in Figure 3), and adding a reflection effect. You can modify any of the shapes, including table and chart fields, and add the wide variety of Office Art shapes and fancy effects. The macro also displays the name and type of each shape in the collection of &lt;strong&gt;Shapes&lt;/strong&gt; that is in the report; shape types are specified in the &lt;a href="http://msdn.microsoft.com/en-us/library/office/ff860759(v=office.15)" target="_blank"&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;&lt;strong&gt;MsoShapeType&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt; enumeration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figure 3. Copying and modifying a built-in report&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50-metablogapi/3223.pj15_5F00_VBA_5F00_CopyReport_5F00_735_5F00_07252384.gif"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="pj15_VBA_CopyReport_735" border="0" alt="pj15_VBA_CopyReport_735" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50-metablogapi/4380.pj15_5F00_VBA_5F00_CopyReport_5F00_735_5F00_thumb_5F00_670A16C6.gif" width="628" height="550" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Task Path formatting&lt;/h2&gt;
&lt;p&gt;With the &lt;b&gt;Task Path&lt;/b&gt; feature in Project 2013, you can dynamically show task predecessors, driving predecessors, successors, and driven successors by colors of tasks in the Gantt chart. In Figure 4, the &lt;b&gt;Driving Predecessors&lt;/b&gt; and &lt;b&gt;Driven Successors&lt;/b&gt; items are selected in the &lt;b&gt;Task Path&lt;/b&gt; drop-down list. When you select T3, the Gantt chart shows that T1 is a driving predecessor task and T4 is a driven successor task. That is, T1 is a predecessor task, where the finish date drives the scheduled start date of T3; and T4 is a successor task of the selected task T3, where the T4 start date is driven by the scheduling of T3.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 4. Using the task path properties to highlight tasks&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50-metablogapi/3716.pj15.VBA_5F00_TaskPathDrivingPredecessor_5F00_735_5F00_46EF0A09.gif"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="pj15.VBA_TaskPathDrivingPredecessor_735" border="0" alt="pj15.VBA_TaskPathDrivingPredecessor_735" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50-metablogapi/4377.pj15.VBA_5F00_TaskPathDrivingPredecessor_5F00_735_5F00_thumb_5F00_6DBD2049.gif" width="641" height="315" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can manually select a task or use VBA to select a task, and then use VBA or VSTO to check how another task is related to the selected task. For example, if you are in the Gantt chart view of the project shown in Figure 4, and then run the following statements in the Immediate window of the VBE, the &lt;b&gt;PathDrivenSuccessor&lt;/b&gt; statement prints &lt;b&gt;True&lt;/b&gt;.&lt;/p&gt;
&lt;div style="font-family: Consolas; background-color: #d6d6d6;"&gt;Application.SelectRow Row:=3, RowRelative:=False &lt;br /&gt;Application.HighlightDrivenSuccessors(True) &lt;br /&gt;? ActiveProject.Tasks(4).PathDrivenSuccessor&lt;/div&gt;
&lt;h2&gt;Waiting for a cache job to complete&lt;/h2&gt;
&lt;p&gt;Project Server 2007 and Project Server 2010 can determine when a server-side queue job is completed or has a problem, by using Project Server Interface (PSI) methods. Project Server 2013 and Project Online extend that capability with the client-side object model (CSOM &amp;ndash; not to be confused with the client object model in Project Professional and Project Standard).&lt;/p&gt;
&lt;p&gt;With Project Professional 2013, you can programmatically check the Active Cache status when you save, publish, or check in a project to Project Web App. The Active Cache for Project Professional runs on your local machine. The &lt;b&gt;GetCacheStatusForProject&lt;/b&gt; property exposes the status of the queue job.&lt;/p&gt;
&lt;p&gt;The following code example saves the active project, calls &lt;b&gt;WaitForJob&lt;/b&gt; to wait for the queue job to finish successfully, and then publishes the project. The &lt;b&gt;WaitForJob&lt;/b&gt; macro periodically checks the job state by calling &lt;b&gt;GetCacheStatusForProject&lt;/b&gt; and prints the job status to the Immediate window. If it finds the same status more than ten times in succession, the &lt;b&gt;WaitForJob&lt;/b&gt; macro assumes there is a problem and exits. The example uses a &lt;b&gt;Sleep&lt;/b&gt; method that can be run in either a 64-bit or 32-bit Project installation.&lt;/p&gt;
&lt;div style="font-family: Consolas; background-color: #d6d6d6;"&gt;&lt;span style="color: blue;"&gt;Option Explicit &lt;br /&gt;&lt;br /&gt;#If &lt;/span&gt;Win64 &lt;span style="color: blue;"&gt;Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Private Declare PtrSafe Sub Sleep Lib "kernel32" _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(ByVal dwMilliseconds As LongLong) &lt;br /&gt;&lt;span style="color: blue;"&gt;#Else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Private Declare Sub &lt;/span&gt;Sleep &lt;span style="color: blue;"&gt;Lib &lt;/span&gt;&lt;span style="color: #a31515;"&gt;"kernel32" &lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;dwMilliseconds &lt;span style="color: blue;"&gt;As Long&lt;/span&gt;) &lt;br /&gt;&lt;span style="color: blue;"&gt;#End If &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;' Save and publish the active project; wait for the queue after each operation. &lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;Sub &lt;/span&gt;TestCacheStatus() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;' Number of milliseconds to sleep between status messages. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;Const &lt;/span&gt;millisec2Wait = 500 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application.FileSave()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If &lt;/span&gt;WaitForJob(PjJobType.pjCacheProjectSave, millisec2Wait) &lt;span style="color: blue;"&gt;Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Debug.Print(&lt;span style="color: #a31515;"&gt;"Save completed ..."&lt;/span&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Application.Publish() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If &lt;/span&gt;WaitForJob(PjJobType.pjCacheProjectPublish, millisec2Wait) &lt;span style="color: blue;"&gt;Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Debug.Print(&lt;span style="color: #a31515;"&gt;"Publish completed: " &lt;/span&gt;&amp;amp; ActiveProject.Name)&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Debug.Print(&lt;span style="color: #a31515;"&gt;"Save job not completed"&lt;/span&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;End If &lt;br /&gt;End Sub &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;' Check the cache job state for a save, publish, or check-in operation. &lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;Function &lt;/span&gt;WaitForJob(job &lt;span style="color: blue;"&gt;As &lt;/span&gt;PjJobType, msWait &lt;span style="color: blue;"&gt;As Long&lt;/span&gt;) &lt;span style="color: blue;"&gt;As Boolean &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;' Number of times the same job status is repeated until &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' WaitForJob exits with an error. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;Const &lt;/span&gt;repeatedLimit = 10 &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;jobState &lt;span style="color: blue;"&gt;As Integer &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;previousJobState &lt;span style="color: blue;"&gt;As Integer &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;bail &lt;span style="color: blue;"&gt;As Integer &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;jobType &lt;span style="color: blue;"&gt;As String &lt;br /&gt;&lt;br /&gt;#If &lt;/span&gt;Win64 &lt;span style="color: blue;"&gt;Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Dim millisec As LongLong &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;millisec = CLngLng(msWait) &lt;br /&gt;&lt;span style="color: blue;"&gt;#Else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;millisec &lt;span style="color: blue;"&gt;As Long &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;millisec = msWait &lt;br /&gt;&lt;span style="color: blue;"&gt;#End If &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;WaitForJob = &lt;span style="color: blue;"&gt;True &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Select Case &lt;/span&gt;job &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Case &lt;/span&gt;PjJobType.pjCacheProjectSave jobType = &lt;span style="color: #a31515;"&gt;"Save" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;Case &lt;/span&gt;PjJobType.pjCacheProjectPublish jobType = &lt;span style="color: #a31515;"&gt;"Publish" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;Case &lt;/span&gt;PjJobType.pjCacheProjectCheckin jobType = &lt;span style="color: #a31515;"&gt;"Checkin" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;Case Else &lt;/span&gt;jobType = &lt;span style="color: #a31515;"&gt;"unknown" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;End Select &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;bail = 0 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;If &lt;/span&gt;(jobType = &lt;span style="color: #a31515;"&gt;"unknown"&lt;/span&gt;) &lt;span style="color: blue;"&gt;Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;WaitForJob = &lt;span style="color: blue;"&gt;False &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Do &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;jobState = Application.GetCacheStatusForProject(ActiveProject.Name, job) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.Print(jobType &amp;amp; &lt;span style="color: #a31515;"&gt;" job state: " &lt;/span&gt;&amp;amp; jobState) &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;' Bail out if something is wrong. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;If &lt;/span&gt;jobState = previousJobState &lt;span style="color: blue;"&gt;Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;bail = bail + 1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;If &lt;/span&gt;bail &amp;gt; repeatedLimit &lt;span style="color: blue;"&gt;Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;WaitForJob = &lt;span style="color: blue;"&gt;False &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Exit Do &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;previousJobState = jobState Sleep(msWait) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Loop While Not &lt;/span&gt;(jobState = PjCacheJobState.pjCacheJobStateSuccess) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;End If &lt;br /&gt;End Function &lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Following is an example of output in the Immediate window. For the meaning of the output values, see the &lt;b&gt;PjCacheJobState&lt;/b&gt; enumeration in the VBA Object Browser.&lt;/p&gt;
&lt;div style="font-family: Consolas; background-color: #d6d6d6;"&gt;Save job state: 4 Save completed &lt;br /&gt;... &lt;br /&gt;Publish job state: -1 &lt;br /&gt;Publish job state: 3 &lt;br /&gt;Publish job state: 3 &lt;br /&gt;Publish job state: 4 &lt;br /&gt;Publish completed: WinProj test 1&lt;/div&gt;
&lt;h2&gt;Working with SharePoint tasks lists&lt;/h2&gt;
&lt;p&gt;Project Server 2013 and Project Online can import SharePoint tasks list as a project where SharePoint maintains control, or can import a tasks list as a project where Project Server has full control of scheduling and other project management features. You can use Project Professional 2013 to open and update either type of project. When you create a local project in Project Professional 2013, you can save the project to a new SharePoint tasks list &amp;ndash; or link the new project with an existing tasks list.&lt;/p&gt;
&lt;p&gt;The Project Professional 2013 object model includes new and updated members of the &lt;b&gt;Application&lt;/b&gt; object to help work with SharePoint tasks lists:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;SynchronizeWithSite&lt;/b&gt; is updated to work with SharePoint sites through Project Web App, where projects can be in either the Project Server full control mode or the SharePoint management mode. &lt;b&gt;SynchronizeWithSite&lt;/b&gt; can still synchronize a local project with a SharePoint tasks list.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LinkToTaskList&lt;/b&gt; links a new project with a SharePoint task list. The method first verifies that the specified SharePoint site and tasks list exists, and then synchronizes the active project with the site by adding manually scheduled tasks and any assigned resources. &lt;b&gt;LinkToTaskList&lt;/b&gt; also creates a .MPP file in the Site Assets list. The project file can contain VBA macros. For example, if the original tasks list in &lt;span style="font-family: courier new,courier;" face="Courier New"&gt;http://MySite&lt;/span&gt; is named Test Tasks List, use the following command: &lt;br /&gt;
&lt;blockquote style="margin-right: 0px;" dir="ltr"&gt;
&lt;pre class="code"&gt;&lt;span style="font-family: courier new,courier;"&gt;LinkToTaskList SiteURL:="http://MySite", _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TaskListName:="Test Tasks List"&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;After you use the &lt;b&gt;LinkToTaskList&lt;/b&gt; method, the site contains the .MPP file at the following URL: &lt;span style="font-family: courier new,courier;" face="Courier New"&gt;http://MySite/SiteAssets/Content%20site-Test%20Tasks%20List.mpp&lt;/span&gt;. If Project is installed on a machine running Windows Server, you can use &lt;b&gt;Server Manager&lt;/b&gt; to install the Desktop Experience feature; otherwise, the .MPP file cannot be created.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AddSiteColumn&lt;/strong&gt; adds a column to a SharePoint tasks list for a project site, and optionally specifies the column name. The column can be one of the task &lt;strong&gt;PjField&lt;/strong&gt; constants, such as &lt;strong&gt;pjTaskBaselineDurationText&lt;/strong&gt;, where the column does not already exist in the SharePoint tasks list. The field cannot be an enterprise custom field or lookup table or a non-task field such as &lt;strong&gt;pjResourceActualCost&lt;/strong&gt;. The next update of the VBA Help topic for the &lt;strong&gt;AddSiteColumn&lt;/strong&gt; method will include a list of prohibited fields.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, create a tasks list in a SharePoint site, create a project in Project Professional, and then use the &lt;b&gt;LinkToTaskList&lt;/b&gt; method to import the task list. Set a baseline for the project (use the &lt;b&gt;Set&lt;/b&gt; &lt;b&gt;Baseline&lt;/b&gt; command on the &lt;b&gt;PROJECT&lt;/b&gt; tab of the ribbon), and then change the duration of some tasks.&lt;/p&gt;
&lt;p&gt;The following code adds task duration and baseline duration to the list of available columns in the SharePoint task list.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;b&gt;Note&lt;/b&gt;&amp;nbsp;&amp;nbsp; After you run the &lt;b&gt;AddDurationColumns&lt;/b&gt; macro, you must save the project in Project Professional to synchronize your changes with the SharePoint task list.&lt;/p&gt;
&lt;div style="font-family: Consolas; background-color: #d6d6d6;"&gt;&lt;span style="color: blue;"&gt;Sub &lt;/span&gt;AddDurationColumns() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;success &lt;span style="color: blue;"&gt;As Boolean &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;columnName &lt;span style="color: blue;"&gt;As String &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim &lt;/span&gt;fieldName &lt;span style="color: blue;"&gt;As &lt;/span&gt;PjField &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;results &lt;span style="color: blue;"&gt;As String &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;results = &lt;span style="color: #a31515;"&gt;"" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;fieldName = pjTaskBaselineDurationText &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;columnName = &lt;span style="color: #a31515;"&gt;"Baseline duration" &lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;' If the field name exists in the SharePoint tasks list, or &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' fieldName is one of the prohibited fields, the AddSiteColumn &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' method returns error 1100. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;On Error Resume Next &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;success = AddSiteColumn(fieldName, columnName) &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;If &lt;/span&gt;success &lt;span style="color: blue;"&gt;Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;results = &lt;span style="color: #a31515;"&gt;"Added site column: " &lt;/span&gt;&amp;amp; columnName &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;results = &lt;span style="color: #a31515;"&gt;"Error in AddSiteColumn: " &lt;/span&gt;&amp;amp; columnName &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;End If &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;fieldName = pjTaskDurationText &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;columnName = &lt;span style="color: #a31515;"&gt;"Current duration" &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;success = AddSiteColumn(fieldName, columnName) &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;If &lt;/span&gt;success &lt;span style="color: blue;"&gt;Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;results = results &amp;amp; vbCrLf &amp;amp; &lt;span style="color: #a31515;"&gt;"Added site column: " &lt;/span&gt;&amp;amp; columnName &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;results = results &amp;amp; vbCrLf &amp;amp; &lt;span style="color: #a31515;"&gt;"Error in AddSiteColumn: " &lt;/span&gt;&amp;amp; columnName &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;End If &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Debug.Print(results)&lt;/div&gt;
&lt;div style="font-family: Consolas; background-color: #d6d6d6;"&gt;&lt;span style="color: blue;"&gt;End Sub &lt;/span&gt;&lt;/div&gt;
&lt;p&gt;After you save the project, go to the task list in SharePoint. On the &lt;b&gt;LIST&lt;/b&gt; tab, select the &lt;b&gt;Modify View&lt;/b&gt; command. On the &lt;b&gt;Settings &amp;ndash; Edit View&lt;/b&gt; page, select the &lt;b&gt;Baseline duration&lt;/b&gt; field and the &lt;b&gt;Current duration&lt;/b&gt; field that the macro added. Figure 5 shows the task list with the two new fields.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Figure 5. Adding fields to a synchronized SharePoint task list&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50-metablogapi/2234.pj15_5F00_VBA_5F00_AddSiteColumn_5F00_735_5F00_7B8F6644.gif"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="pj15_VBA_AddSiteColumn_735" border="0" alt="pj15_VBA_AddSiteColumn_735" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50-metablogapi/5466.pj15_5F00_VBA_5F00_AddSiteColumn_5F00_735_5F00_thumb_5F00_2D8706CF.gif" width="695" height="462" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The Project object model can be used with VBA or with VSTO. The Project object model includes seven new classes, 292 new members, and a slew of new enumeration constants that support many new features in Project Standard 2013 and Project Professional 2013, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create new reports that can have tables and charts with task and resource fields, can include Office Art features, and can be both manually and programmatically modified.&lt;/li&gt;
&lt;li&gt;Manipulate the Task Path properties to dynamically show how predecessor tasks affect scheduling of a selected task, and how the selected task affects scheduling of successor tasks.&lt;/li&gt;
&lt;li&gt;Monitor the Active Cache to show the status of saving, publishing, and checking in a project to PWA.&lt;/li&gt;
&lt;li&gt;Work with SharePoint tasks lists in four different ways, to help realize the goal of managing and visualizing all of your work in one place.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;VBA-based and VSTO-based development can customize and integrate Project with a wider range of solutions than ever before possible.&lt;/p&gt;
&lt;h2&gt;Additional Resources&lt;/h2&gt;
&lt;p&gt;For videos and training for Project, see the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Module 9, &lt;i&gt;Project Professional 2013 training for developers&lt;/i&gt;, on the &lt;a href="http://msdn.microsoft.com/en-US/office/fp123632"&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;Office 2013 training for developers&lt;/span&gt;&lt;/a&gt; page&lt;/li&gt;
&lt;li&gt;Register for &lt;a href="https://www.ustechsregister.com/IgniteEvents/ProjectIgnite/CitySelect.aspx"&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;Project Ignite&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Project team periodically adds new articles to the Project Blog. For more information about new features in Project and Project Online, see the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.office.com/b/project/archive/2012/08/06/project-2013-reports.aspx"&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;Introducing Project's new reports&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.office.com/b/project/archive/2012/08/13/managing-tasks-in-sharepoint.aspx"&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;Managing tasks in SharePoint&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.office.com/b/project/archive/2012/08/20/adding-sharepoint-tasks-lists-to-pwa.aspx"&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;Adding SharePoint task lists to PWA&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Project VBA Help topics are located in the MSDN online library. Many of the topics for new members are incomplete in the Project 2013 Preview SDK; the topics will be completed for the RTM publication of the Project 2013 SDK. See&lt;span style="color: #0000ff;" color="#0000ff"&gt; &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee861523(v=office.15).aspx"&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;Welcome to the Project 2013 VBA developer reference&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For links to the Project 2013 SDK and many other resources, see the Project for developers page on MSDN at &lt;a href="http://msdn.microsoft.com/project"&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;http://msdn.microsoft.com/project&lt;/span&gt;&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=10345490" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Office+developer+documentation/">Office developer documentation</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/VBA/">VBA</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Project/">Project</category><category domain="http://blogs.msdn.com/b/officedevdocs/archive/tags/Office+15/">Office 15</category></item><item><title>Change shapes in Visio 2013</title><link>http://blogs.msdn.com/b/officedevdocs/archive/2012/08/23/change-shapes-in-visio-2013.aspx</link><pubDate>Thu, 23 Aug 2012 18:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10342891</guid><dc:creator>E. Schmidt</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/officedevdocs/rsscomments.aspx?WeblogPostID=10342891</wfw:commentRss><comments>http://blogs.msdn.com/b/officedevdocs/archive/2012/08/23/change-shapes-in-visio-2013.aspx#comments</comments><description>&lt;p&gt;Visio 2013 introduces a "Change Shape" feature that enables you to swap out a selected shape or group of shapes in the drawing with another type of shape. The new shapes can retain the position, connections, formatting, shape text, and/or shape data of the originals.&lt;/p&gt;
&lt;p&gt;For example, take a drawing like the following simple flowchart.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/0121.flowchart.png"&gt;&lt;img alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/0121.flowchart.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;With the Change Shape feature, you can change the Process shape labeled "Make a decision" to a Decision shape with a single button press:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/8562.flowchart_2D00_post_2D00_replace.png"&gt;&lt;img alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-92-50/8562.flowchart_2D00_post_2D00_replace.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Rather than using another shape in the drawing, the Decision shape that replaces the Process is a new instance of the Decision shape from the Decision Master shape. It retains the local formatting values of the original Process shape (that is, values that the user or the program changed after the shape was dropped), including the fill color, the shape text, and the bold applied to the word "decision."&lt;/p&gt;
&lt;p&gt;If another shape in the drawing references the original shape in a formula, Visio restores this reference after the operation and updates the reference to point towards the resulting shape. The same goes for hyperlinks: links that target the original shape will be updated to point towards the resulting shape. Connections, callout associations, shape comments, container membership, and list membership are likewise restored.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: You can only replace 2D shapes with other 2D shapes (like a Decision shape for a Process shape) and 1D shapes with other 1D shapes (replacing one type of connector with another). You cannot replace&amp;nbsp;a connector with a rectangle, as an example.&lt;/p&gt;
&lt;p&gt;For developers, there are two aspects of this feature that are worth examining: first, how to use this feature programmatically using the Visio 2013 APIs; and second, how to build custom shapes that interact predictably with this feature. I will take a look at each of these aspects in turn.&lt;/p&gt;
&lt;p&gt;Before I go any further, however, I should clarify some terminology. First, I will call the shape that is being removed from the drawing (and replaced by another) the "original shape." The Master shape that is being used to replace the shape on the drawing is called the "replacement shape." Finally, the shape that remains on the drawing page after the operation has completed is called the "resulting shape."&lt;/p&gt;
&lt;h2&gt;Using the Change Shape APIs&lt;/h2&gt;
&lt;p&gt;The Visio 2013 object model includes two new APIs that implement the Change Shape feature: &lt;a title="Selection.ReplaceShape" href="http://msdn.microsoft.com/en-us/library/jj230175(v=office.15)"&gt;Selection.ReplaceShape&lt;/a&gt; and the &lt;a title="Shape.ReplaceShape" href="http://msdn.microsoft.com/en-us/library/jj229596(v=office.15)"&gt;Shape.ReplaceShape&lt;/a&gt; methods.&lt;/p&gt;
&lt;p&gt;Using &lt;strong&gt;Shape.ReplaceShape&lt;/strong&gt;, the procedure described previously could have been written as a simple VBA macro, as shown in the following code sample.&lt;/p&gt;
&lt;div style="font-family: Consolas; background-color: #d6d6d6;"&gt;
&lt;p&gt;Sub ChangeToDecisionShape()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim vsoPage As Visio.Page&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim vsoShapes As Visio.Shapes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim vsoStencil As Visio.Document&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim vsoMaster As Visio.Master&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim vsoOriginalShape As Visio.Shape&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Get a reference to the currently active page in Visio.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set vsoPage = Application.ActivePage&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set vsoShapes = vsoPage.Shapes&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Get a reference to the Master to use as the replacement shape.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set vsoStencil = Application.Documents("BASFLO_U.VSSX")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set vsoMaster = vsoStencil.Masters("Decision")&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Iterate over every shape on the page to find the shape&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' to replace by testing the text of each shape.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; For Each vsoOriginalShape In vsoShapes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (vsoOriginalShape.Text = "Make a decision") Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Replace the shape using the default behavior.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vsoOriginalShape.ReplaceShape vsoMaster, _&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VisReplaceFlags.visReplaceShapeDefault&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next vsoOriginalShape&lt;br /&gt;End Sub&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;In the previous code sample, the &lt;strong&gt;Shape.ReplaceShape &lt;/strong&gt;method is called on the original shape. The method takes a Master object as a required argument, which represents the replacement shape. Although not used in the code sample, the method returns a Shape object that represents the resulting shape.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;ReplaceShapes&lt;/strong&gt; method has an optional parameter, &lt;em&gt;ReplaceFlags&lt;/em&gt;, which must be a constant from the &lt;a title="VisReplaceFlags" href="http://msdn.microsoft.com/en-us/library/jj229963(v=office.15)"&gt;VisReplaceFlags&lt;/a&gt; enumeration. Passing in an argument for the &lt;em&gt;ReplaceFlags&lt;/em&gt; parameter allows you to control the values of the resulting shape more finely. For example, you could pass in the &lt;strong&gt;visReplaceShapeLockText&lt;/strong&gt; flag (2), which would assure that the original shape's text is overwritten&amp;nbsp;by the text of the replacement shape.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Selection.ReplaceShape&lt;/strong&gt; method behaviors similarly to &lt;strong&gt;Shape.ReplaceShape&lt;/strong&gt;, with a couple of differences. All shapes contained by the selection are changed to instances of the replacement shape and the return type from the method is an array of shapes.&lt;/p&gt;
&lt;p&gt;If you call the &lt;strong&gt;Selection.ReplaceShape&lt;/strong&gt; method and some of the selected shapes cannot be replaced (have a &lt;strong&gt;LockReplace&lt;/strong&gt; cell value of '1' - see the section that follows), the method will replace only the shapes in the selection that can be replaced. The method then returns an array that contains only the resulting shapes from successful shape replacement.&lt;/p&gt;
&lt;h2&gt;Using the ShapeSheet to specify Change Shape behaviors&lt;/h2&gt;
&lt;p&gt;Visio 2013 includes several new ShapeSheet cells for working with the Change Shape feature: the &lt;a title="LockReplace" href="http://msdn.microsoft.com/en-us/library/jj229597(v=office.15)"&gt;LockReplace&lt;/a&gt; cell, the &lt;a title="PageLockReplace" href="http://msdn.microsoft.com/en-us/library/office/jj228446(v=office.15).aspx"&gt;PageLockReplace&lt;/a&gt; cell, the &lt;br /&gt;&lt;a title="DocLockReplace" href="http://msdn.microsoft.com/en-us/library/office/jj228794(v=office.15)"&gt;DocLockReplace&lt;/a&gt; cell, the &lt;a title="ReplaceLockText cell" href="http://msdn.microsoft.com/en-us/library/jj227910(v=office.15)"&gt;ReplaceLockText&lt;/a&gt; cell, the &lt;a title="ReplaceLockFormat" href="http://msdn.microsoft.com/en-us/library/jj228623(v=office.15)"&gt;ReplaceLockFormat&lt;/a&gt; cell, the &lt;a title="ReplaceLockShapeData" href="http://msdn.microsoft.com/en-us/library/jj228626(v=office.15)"&gt;ReplaceLockShapeData&lt;/a&gt; cell, and the &lt;a title="ReplaceCopyCells" href="http://msdn.microsoft.com/en-us/library/jj227885(v=office.15)"&gt;ReplaceCopyCells&lt;/a&gt; cell.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;The &lt;strong&gt;LockReplace&lt;/strong&gt; cell is simple in that it determines whether a shape or Master shape can be used in a change shape operation. If the cell is set to 1 (true), the shape cannot be replaced or be used as a replacement shape. If you select a shape on the drawing page that has its &lt;strong&gt;LockReplace&lt;/strong&gt; cell set to true, the &lt;strong&gt;Change Shape&lt;/strong&gt; button in the &lt;strong&gt;Editing&lt;/strong&gt; group on the &lt;strong&gt;Home&lt;/strong&gt; tab is disabled.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;PageLockReplace&lt;/strong&gt; and &lt;strong&gt;DocLockReplace&lt;/strong&gt; cells behave similarly to &lt;strong&gt;LockReplace&lt;/strong&gt;: when set to 1 (true), shape replacement operations are disabled. When disabled, the &lt;strong&gt;Change Shape&lt;/strong&gt; button is dimmed when the page (&lt;strong&gt;PageLockReplace&lt;/strong&gt;) or document (&lt;strong&gt;DocLockReplace&lt;/strong&gt;) is active.&lt;/p&gt;
&lt;p&gt;The following cells affect the output - the resulting shape - of a Change Shape operation. Only the values of the replacement shape, the Master shape being used to replace the shape(s) in the drawing, are used:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;ReplaceLockText&lt;/strong&gt; cell determines whether the text contained in the replacement shape overwrites the text of the shape being replaced. If this cell is set to 1 (true), any text contained by the replacement shape is copied to the resulting shape in the drawing.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;ReplaceLockFormat&lt;/strong&gt; cell determines whether the formatting values - fill formatting, line formatting, quick style, theme properties, gradients, bevels, reflection, soft edges, shadow, etc. - of the replacement shape overwrite the values o the original shape. If this cell is set to 1 (true), the formatting values of the replacement shape are copied to the resulting shape in the drawing.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;ReplaceLockShapeData&lt;/strong&gt; cell determines whether the shape data contained in a replacement shape overwrites all of the shape data of the original shape. If this cell is set to 1 (true), all rows and values of the shape data section of the replacement shape are copied onto the resulting shape. Any local values from the original shape are discarded.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;ReplaceCopyCells&lt;/strong&gt; cell is a little more complicated than the other cells. The &lt;strong&gt;ReplaceCopyCells&lt;/strong&gt; value of the replacement shape indicates a list of other ShapeSheet cells that are copied from the original shape to the resulting shape. The cell must contain a &lt;strong&gt;DEPENDSON&lt;/strong&gt; function call where each argument in the function is a reference to another ShapeSheet cell.&lt;/p&gt;
&lt;p&gt;Here's an example of how its used: A Master shape has its &lt;strong&gt;ReplaceLockFormat&lt;/strong&gt; cell set to 1 and tis &lt;strong&gt;ReplaceCopyCells&lt;/strong&gt; cell set to &lt;span style="font-family: Consolas; background-color: gray;"&gt;DEPENDSON(FillForegnd)&lt;/span&gt;. If used as the replacement shape in a Change Shape operation, the resulting shape will take on al the formatting values of the replacement shape &lt;em&gt;except&lt;/em&gt; the fill color (the value set in the &lt;strong&gt;FillForegnd&lt;/strong&gt; cell).&lt;/p&gt;
&lt;p&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=10342891" width="1" height="1"&gt;</description></item></channel></rss>