Office 365 Expert Discussion Series 5: DirSync and Office 365

Microsoft Support will be presenting a series of webcasts called the  Office 365 Expert Discussion Series ,  to showcase our tools and content that can be used to help make your Office 365 experience better and help solve common issues more quickly.  During our latest Expert Discussions Series, we will demonstrate some new diagnostic capabilities that are available for troubleshooting Office 365. The areas that will be covered by the diagnostics are related to DNS, ADFS, and DirSync troubleshooting. We will also b e demonstrating how to use Fix IT Center Pro to diagnose a broad range of issues using the automated diagnostics from Microsoft Support. Join us  on Thursday, November 29th at 8:00 AM Pacific Time  for this webcast. The duration of the meeting is planned for 1 hour. After the meeting concludes a recording of the session will be published to this blog post and the  Office 365 YouTube channel . Microsoft Support will be monitoring the Office 365 Expert Discussion  Forum  and  Wiki  as well as the Community closely for this topic for a week after the event to answer any questions about the live session. Be sure to view our past Expert Discussions  here .  To sign up for this webcast please  download and save the calendar invite below  where you will find the Lync invite and all other Office 365 Expert Discussion information.  We are excited to see you there!  —————————————————————————————————————————————————————————— Presenter : Steve Justice , Principle Escalation Engineer from Microsoft CSS and other Microsoft Support Team members. Date/Time:  Thursday November 29th , at 8:00 AM Pacific Time . (1 Hour presentation) Online Meeting Information: ……………………………………………………………………………………………………………………….. Join online meeting https://join.microsoft.com/meet/v-joshto/F00T8BQY Join by Phone +14257063500     +18883203585       Find a local number Conference ID: 27579341     Forgot your dial-in PIN? |   First online meeting?     [!OC([1033])!] ……………………………………………………………………………………………………………………….. Audience: Office 365 MVP and  Grid Members  and open to anyone who is interested in Office 365 Expert Discussions. 

What’s new with Microsoft Remote Connectivity Analyzer? A lot!

Have you ever gotten a call from someone you know whose Outlook client is having trouble connecting to their email server?  Don’t you just wish you had a tool that you could send to them that would walk them through a connectivity test and provide a simple way for them to send the results back to you? Or perhaps you’re an administrator that has been using the Remote Connectivity Analyzer for years to verify email configuration, but wish you had a way to verify the same tests from within your organization, that provided the same diagnostic details as the RCA website?   We’ve heard these requests, and we have some big news. For full details, see our blog post on the Exchange Team Blog . 

Installing the Project 2013 SDK download on Windows 8

The Project 2013 SDK download is updated for the RTM release of Project 2013. In addition to articles, references, and code samples that are updated from the July release of Project 2013 Preview, the SDK also includes a local copy of VBA Help for Project Standard and Project Professional. You can install the downloaded Project2013SDK.msi file on computers that are running Windows 8, Windows 7 (and a couple of earlier Windows releases), Windows Server 2008 R2, and Windows Server 2012. When you install the SDK on a Windows 7 machine, the SDK contents are accessible from the Start menu. Figure 1 shows, for example, that the Microsoft SDKs folder contains the Project 2013 SDK folder, which contains links to three files. From the hierarchical context of the Start menu, it is clear that the Documentation node is contained in the Project 2013 SDK folder. Similarly, if you install the SharePoint 2013 SDK download and the Apps for Office and SharePoint SDK download , they each create a folder in Microsoft SDKs , and each SDK has a Documentation node within its folder. Figure 1. Using the Project 2013 SDK from the Windows 7 Start menu The problem Windows 8 does not have a Start menu, it has two related Start screens. After you install the Project 2013 SDK download, and scroll the main Start screen to the links for the installed files, you can see the same three links as in Windows 7. (To see the Welcome Guide on the Start screen, you can search for Welcome.rtf , open it in Internet Explorer, and then pin Welcome Guide to the Start screen.) But , the Start screen in Windows 8 is not arranged in hierarchical folders. In Figure 2, it is not clear what the Documentation link is for. Figure 2. Using the Documentation link to the Project 2013 SDK, on the Windows 8 Start screen The problem is worse if you also install the SharePoint 2013 SDK and the Apps for Office and SharePoint 2013 SDK. You would then have three Documentation links and three Welcome Guide links, each of which goes to a different SDK. If you right-click one of the Start screen icons, the icon shows a check mark, and the Start screen shows options at the bottom (see Figure 2). If you choose All apps at the bottom right of the screen, Windows 8 shows lists of installed apps within top-level groups. For example, the Microsoft SDKs group contains links for all of the Office, Project, and SharePoint SDKs that you install; there are no subfolders to distinguish which links go to which SDK. In Figure 3, only the Project 2013 SDK is installed, and the links have the same names as in Figure 2. Figure 3. Using the Project 2013 SDK links in the Apps view, in Windows 8 The workaround (for now) On a machine with Windows 8, you can install one SDK at a time, and then rename the links on the Start screen, before installing another SDK. To install Office, Project, and SharePoint SDKs on Windows 8 Log on to Windows 8 as an administrator. Install, for example, the Project 2013 SDK. On the Start screen, right-click the Documentation icon, and then choose Open file location at the bottom of the screen. On the Windows Desktop, rename the Documentation link as Project 2013 SDK Documentation , and then choose Continue in the File Access Denied dialog box (see Figure 4). Figure 4. Renaming the Project 2013 SDK links in the Desktop view Similarly, rename the VBA Reference link as Project 2013 VBA Reference , and rename the Welcome Guide link as Project 2013 Welcome Guide . With the mouse pointer in the lower-left corner of the screen, choose the Start pop-up icon, and then scroll to the Project 2013 SDK icons (see Figure 5). Figure 5. Using the renamed links in the Start view Install the Apps for Office and SharePoint 2013 SDK, and similarly rename the Start screen links. Install the SharePoint 2013 SDK, and similarly rename the Start screen links. Figure 6 shows the Microsoft SDKs group with the renamed links in the All apps view. Figure 6. Using the renamed links for all three SDKs in the All apps view In future releases, the Office, SharePoint, and Project SDK downloads will be reconfigured so that they install with non-conflicting link names on Windows 8.  

Lync and Learn: Instant Collaboration with SharePoint Online

Audience: Office 365 for professionals and small businesses Office 365 for enterprises   Lync and Learn is an online session led by Office 365 Product Managers and Community  Grid members .  Lync and Learn sessions address different Office 365 subjects and scenarios and is beneficial to anyone who wants to learn more and expand their knowledge of the Office 365 suite. View past Lync and Learn sessions  here .        Many users move to Office 365 for its convenience and reliability of email. But Office 365 comes packaged with other products that can help greatly increase anyone’s productivity and collaboration.  One of the most powerful Office 365 tools is SharePoint Online. Some users may not  be aware of the potential of SharePoint Online, or may want to brush up on some SharePoint best practices. If this sounds like you, then be sure to join our next  Lync and Learn Session . Join  John Ventry  for an informative session detailing what SharePoint Online is and how it can instantly improve productivity and collaboration for you and your organization.   John Ventry  is a 17 year technology professional, currently working as an Office 365 and SharePoint consultant for St. Charles Consulting Group. John works with clients on developing SharePoint solutions, creating mobility strategies around SharePoint and Office 365, SharePoint migration strategies and Office 365 administration.   To join this webcast please join us on  Thursday November 15 th , at 10:00 AM Pacific Time  and  see the Lync information below.  Download and save the calendar invite  on this blog post. We are excited to see you there!  Interested in being our next Lync and Learn presenter?  Learn how to join the Office 365 Grid  and become an Office 365 Lync and Learn presenter. ——————————————————————————————————————————————————— Presenter:  John Ventry , Office365/SharePoint Consultant for St. Charles Consulting Group, and  Office 365 Grid member . Date/Time: Thursday May 15 th , at 10:00 AM Pacific Time . (1 Hour presentation) Live Meeting Information: ……………………………………………………………………………………………………………………….. Join online meeting https://join.microsoft.com/meet/v-joshto/F00T8BQY Join by Phone  +14257063500         +18883203585           Find a local number   Conference ID: 27579341     Forgot your dial-in PIN?   |    First online meeting?      [1033])!] ………………………………………………………………………………………………………………………….

Live@edu customers: Use the upgrade planning worksheet to upgrade your institution

Audience: Live@edu; Office 365 for education Editor’s Note: Please be sure that the contact information for your institution is up to date to be alerted to key Live@edu to Office 365 upgrade information. Sign in to the Service Management Portal (SMP)  and update the critical notification field with all updated contacts for your institution.  The upgrade to Office 365 for education is happening! By September 2013, all Live@edu customers will need to complete the upgrade to Office 365 for education. Microsoft will start scheduling more academic institutions for the upgrade soon, but you don’t have to wait. Sign in to SMP  and see if your institution is ready to upgrade, or contact Live@edu  support to initiate the upgrade.   Get started today. Download the upgrade planning worksheet and start planning. The Office 365 upgrade builds on your existing Live@edu deployment, and we provide the tools and guidance at each stage—including the new upgrade planning worksheet . You can use this tool to track the tasks required before, during, and after the upgrade.   To get started Download the upgrade planning worksheet and start by selecting the scenarios that apply to your Live@edu deployment. Prepare for the upgrade. Visit the upgrade center to better understand each step in the upgrade process. Start the upgrade to Office 365. Remember, after the upgrade your domain will be subscribed to Exchange Online Plan 1 automatically – which is free. You can then change your subscription to any of the Office 365 academic plans to give your students, faculty, and staff access to more services. Check out all the Office 365 academic plans .   Live@edu administrative changes coming December 2012 While Live@edu accounts are being prepared for the upgrade to Office 365, a few administrative features will not be available beginning December 3, 2012 until your institution’s upgrade to Office 365 for education is complete:  Add or remove accepted domains to your institution subscription. Change your institution mailing address and phone number within the SMP. Modify co-branding. Note Co-branding is not supported in Office 365 for Exchange Online. If you need to take any of these actions, consider doing so prior to December 3 . Once your institution completes the upgrade, you’ll be able to make these changes on Office 365.   Regards, The Live@edu to Office 365 team

Creating Project Workflows using Visual Studio 2012

In Project Server 2010, Project developers were able to create Project Workflows using Visual Studio 2010. In Project Server 2013, we enabled creating the workflows with SharePoint Designer , which makes it much easier and faster to create Project Workflows. In that blog post , we showed how we have simplified the workflow creation for Project using SharePoint Designer 2013. We are, however, still supporting creating Project Workflows with Visual Studio for the more complex set of workflows, and in fact, have also made it easier to create Project Workflows with Visual Studio 2012. Below, we are going to use a sample two-stage workflow to show how you can create workflows with Visual Studio 2012: 1. Creating the Workflow solution: File Menu> New> Project> Office/SharePoint> SharePoint solutions > SharePoint 2013 Project. Give this project a name, and hit OK: In the customization wizard, enter the address of the PWA web you’d like this workflow to be published to. Then, pick the sandboxed solution option to limit this workflow to this particular PWA web: 2. At this point, the project you’ll see the empty canvas. In the Project Menu, click on the Add New Item, and from the Office/SharePoint tab, select Workflow, enter a name, and hit Add: Then, in the customization wizard, pick Site workflow: Then, pick the history list and the workflow tasks list from that site. We recommend that you use the default lists since a number of PWA UI entry points, use these default lists. Then, hit Finish: 3. Now, we need to set up the environment to use the Project Server activities. In the toolbox, right click and click on “add tab”, and call the new tab “project server”: Then, right click on the “project server” tab and click on “choose items” from the menu, and you’ll see this dialog: In the dialog click on Browse, and navigate to where the workflow dlls are located. They are usually located in C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions15TEMPLATEWorkflowActivities You’ll see two activities dll there. Open the project server one (Microsoft.Office.Project.Server.WorkflowActivities.dll), and hit OK. You are now taken back to the “toolbox items” dialog, and highlights the selected corresponding activities. Hit OK to continue. 4. You might see a “sequence” in the canvas. Delete that, and from the toolbox, pick Flowchart and add it by dragging it into the main area. This flowchart will be the main container of all the stages of the workflow: In the toolbox, click on Control flow, and add the sequence inside that flowchart. Throughout this sample workflow, we will use sequence to represent workflow stages in Visual Studio. This is similar to how SharePoint Designer handles each stage, i.e. each stage is equivalent to a separate sequence in Visual Studio: Rename the sequence to “Create_Stage” by clicking on the “Sequence” and start typing to change the name. Drag the line from start to “Create_Stage” to connect them together:   5. Double click on the “Create_Stage” to drill into this sequence a. Under project server in toolbox, add the “EnterProjectStage” and “ExitProjectStageGate” activities to the sequence. These two activities are required in any of the PWA stages in Visual Studio. b. In the properties of “EnterProjectStage”, change the StageID to the Stage ID of the particular stage you’d want this sequence to represent. You can find the stage ID in the URL of that stage, and is available if you navigate to that stage in PWA Settings > Workflow Stages, and then click on the particular stage. Since stageID is a string, the ID should be provided in quotation marks. c. Put another sequence between “EnterProjectStage” and “ExitProjectStageGate”. Essentially, everything in this sequence is what is represented in the text-based designer in SharePoint Designer stage definition. d. From project server item in the toolbox, drop the “waitForProjEvent” activity in that sequence: e. Change the EventName property to “OnProjectSubmit”. The other supported Event Names are “OnProjectCommit” and “OnProjectCheckIn” 6. In the breadcrumb, click on Flowchart to go one level up. Add another sequence after Create_Stage and call it Finished_Stage, and connect the wire from Create_Stage to the Finished_Stage: 7. Similar to the Create_Stage, add the EnterProectStage and ExitProjectStageGate activities to the sequence as well as the WaitForProjectEvent activity in the middle, and set the properties accordingly:     8. This completes building the workflow in Visual Studio. However, in order to make sure that the workflow can be properly published to the PWA, we need to make a few more changes in the xaml files of the project: From solution explorer, pick “Elements.xaml” under the workflow node a. Replace the WSEventSourceGUID with the following so that the workflow is correctly identifies as a project workflow: b. Inject the following properties under the “Url = WorkflowStartAssociation”:                         9. Now that everything is set, and the workflow is ready for publishing, click on the “Build Solution” under the Build menu, and then click on the “Deploy Solution” under the Build menu. The wsp file is now deployed to the site. You can also find a copy of the wsp file in the file system, under [project name]> bin> debug Now, the workflow will show up in PWA. If you navigate to PWA Settings > Enterprise Project Types, and create a new Enterprise Project Type, you will see this workflow as one of the options in the workflow dropdown list. For more information, see Getting started developing Project Server 2013 workflows in the Project 2013 SDK.

Lync Online: OneNote Sharing Feature

Using Lync and OneNote, an Office 365 user can take notes during a Lync Meeting. In addition, other meeting participants can see and add to these notes during the meeting. Users can also take private notes and, if the user also has Outlook, he or she can include notes in the meeting request, allowing users to preview them, add their own notes, and prepare for the meeting accordingly.   Author : Alexandra Lise Publication date : November 6, 2012 Product version : Lync Online   Lync’s sharing feature gives Office 365 users with OneNote a way to share notes with colleagues in different locations during an ad hoc (IM, audio, and/or video) conversation or a scheduled Lync Meeting. Collaboration features allow others to contribute to the notes. And, with Outlook and OneNote, Lync Online users can send out notes in a meeting request for attendees to preview. Guidance First, help Lync Online users set up a sharing session , by pointing them to the following topics: Set up a Lync Meeting Explains how to schedule an online meeting by using Outlook or Lync Web Scheduler. Start an impromptu Lync Meeting Explains how to invite one person or a group of people into a Lync IM conversation and add audio and/or video. Next, teach users to add notes to a meeting request and/or Lync Meeting by following the steps at Use shared and private notes in a Lync Meeting . Finally, make sure users know how to let others edit the notes and also how to save notes from Lync. Edit notes together To give control to another person, on the sharing bar at the top of your meeting window, click Give Control , and then either click an individual attendee or click Give Control Automatically to grant control to anyone who requests it during the sharing session. Take back control at any time by clicking Give Control again, and then clicking the either the name of the person who has control or Give Control Automatically if it’s selected. Save notes To save notes during a Lync sharing session, pause on the presentation (monitor) icon, click the Manage Presentable Content button, click More , and then select the saving option. Lync’s sharing and collaboration tools combine with OneNote’s ability to keep track of information by giving Office 365 users with both programs a way to share notes during sharing sessions with large and small audiences, remote users, and in scheduled or impromptu settings and to work with colleagues to capture evolving ideas and to collect information from different experts. Additional Resources To learn more, check out the following articles: Download the Lync 2013 for Office 365 Sharing and Collaboration Quick Reference Introduction to the Lync Meeting Window Check the Lync 2013 for Office 365 Help at office.com for related training and videos, coming soon. Keywords: Lync Meeting, OneNote, notes, sharing

Lync Online: PowerPoint Sharing Feature

Using Lync and PowerPoint, an Office 365 user can give PowerPoint presentations, record them, and work collaboratively on PowerPoint slides during a Lync Meeting with as many as 249 other people. This article describes how to use this feature.   Author : Alexandra Lise Publication date : November 6, 2012 Product version : Lync Online   Lync’s sharing feature gives Office 365 users a way to share PowerPoint presentations with colleagues in different locations. Users can present information from slides or take advantage of Lync’s collaboration features and work together on a presentation to be delivered later. Collaboration features enable users to give control to other users while the annotation tools help groups focus on certain parts of a presentation. Sharing sessions can be done ad hoc or during a scheduled Lync Meeting. Getting Started To help Lync Online users set up a sharing session , point them to the following topics:   Set up a Lync Meeting — explains how to schedule an online meeting by using Outlook or Lync Web Scheduler . TIP: To be able to set up Lync Meetings users must be enabled for dial-in conferencing. For details, see Configure Dial-in Conferencing .   Start an impromptu Lync Meeting — explains how to invite one person or a group of people to join a Lync IM conversation and add audio and/or video. Presenting and Recording To give a presentation 1. In a meeting or conversation window, pause on the presentation (monitor) icon, and then click PowerPoint . Figure 1. Selecting PowerPoint in the meeting window. 2. Options: To move the slides, use either the arrows at the bottom of the meeting window or click Thumbnails , and then click the slide you want to show To see your presenter notes, click Notes . To use the laser pointer, highlights, shapes, the eraser, pen, text changer, and other annotation tools, on the upper-right side of the slide, click the Annotations button — then click the type of annotation you want to use. Note : annotating doesn’t change the actual file, although, if you want to, you can save an annotated copy. To prevent someone from skipping ahead or using annotations, in the meeting window, click More Options , click Lync Meeting Options , and then select the permissions level for the participant(s). To record a presentation 1. In the meeting or conversation window, click More Options , and then click Start Recording Figure 2. Figure 2. Starting recording. 2. (Optional) Use the controls at the bottom of the window to pause and resume recording. 3. When finished, click the Stop Recording button. Lync automatically saves the recording in a format that plays in Windows Media Player and Zune. Figure 3. Stopped recording notification. To manage a presentation To prevent people from downloading the presentation, during a sharing session, hover over presentation (monitor) icon, click the Manage Presentable Content button, and then click the Permissions menu and the appropriate option. To prevent people from annotating or skipping ahead, in the meeting window, click Meeting Options , click Lync Meeting options , and then select the appropriate permissions. To save someone else’s presentation or an annotated copy, during a sharing session, pause on the presentation (monitor) icon, click the Manage Presentable Content button, click More , and then select the saving option. To edit a presentation together To give control to another person, click Give Control on the sharing bar at the top of your meeting window. Then either click an individual attendee or click Give Control Automatically to grant control to anyone who requests it during the sharing session. To take back control at any time click the Give Control again, then click either the name of the person who has control or Give Control Automatically if it’s selected. Lync’s sharing and collaboration tools, combined with PowerPoint’s ability to organize and feature important information, give Office 365 users an effective way to present information to remote users in large and small audiences, It also enables users to work with colleagues— in scheduled or impromptu sessions— to develop, refine and style presentation content. Additional Resources To learn more, check out the following articles: Lync 2013 for Office 365 Sharing and Collaboration Quick Reference Record and Playback a Lync Meeting Introduction to the Lync Meeting Window   Keywords : Lync Meeting, PowerPoint, present, annotations

Skype is Replacing Messenger for Instant Messaging and Presence

Have you seen the good news?  Skype and Messenger are coming together.  Soon millions of Messenger users will be able to reach their Messenger friends on Skype.  By updating to Skype, Messenger users can instant message and video call their Messenger friends plus a whole lot more.  Skype will become the preferred choice for all of our users’  communication needs.  We will retire Messenger in all countries worldwide in the first quarter of 2013, with the exception of mainland China.   Learn more about this exciting change . …( read more )

Connecting a Project Task Pane App to PWA

Introduction Apps for Office present a great new opportunity to bring data from a variety of sources into Office applications. The new Project specifically offers a very powerful way to surface both SharePoint and Project Web App data in a task pane app in Project Professional. To connect with SharePoint or PWA from the client, we use on-the-fly OAuth flow as presented in the SharePoint 2013 SDK . The App for Project described in this article connects with the same PWA site collection that Project Professional is currently connected to, and displays data about the currently selected task that is not otherwise available from within Project Professional. This will work with all versions of Project Professional (C2R, MSI, On Demand) and with all PWA environments (Project Online, Project Server). Setup Prerequisites for this project are: Visual Studio 2012 IIS or IIS Express configured to allow applications to run on your server (at localhost) Office 2013 and SharePoint 2013 tools for Visual Studio, available here Project Professional 2013 Project Online tenant or Project Server The first step is to launch Visual Studio 2012. Create a new App for Office 2013 project as shown below. Let’s call it “TaskLastModifiedApp”. In the next dialog, make this a Task Pane App for Project. We need to add references, as this app will use a number of APIs across Office and SharePoint. These DLLs may be in a different location on your system. Most of these references are automatically added if you use the App for SharePoint template, so if you can’t find these on your system, create a quick App for SharePoint solution and note the reference paths to help you out. You should add: C:Program FilesReference AssembliesMicrosoftWindows Identity Foundationv3.5Microsoft.IdentityModel.dll C:WindowsMicrosoft.NETassemblyGAC_MSILMicrosoft.IdentityModel.Extensionsv4.0_2.0.0.0__69c3241e6f0468caMicrosoft.IdentityModel.Extensions.dll C:Program FilesReference AssembliesMicrosoftWindows Identity Foundationv3.5Microsoft.IdentityModel.WindowsTokenService.dll C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions15ISAPIMicrosoft.ProjectServer.Client.dll C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions15ISAPIMicrosoft.SharePoint.Client.dll C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions15ISAPIMicrosoft.SharePoint.Client.Runtime.dll C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.0System.IdentityModel.dll C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.0System.IdentityModel.Selectors.dll C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.0System.ServiceModel.dll Additionally, you will need to add a copy of TokenHelper.cs, which is generated when creating an autohosted or provider-hosted App for SharePoint project. Task Pane App Manifest The actual task pane app is just an XML manifest. Open up TaskLastModifiedApp.xml from the TaskLastModifiedApp project in your Solution Explorer. Replace its contents with the following: 1: 2: 3: [leave this line alone] 4: 1.0 5: Microsoft 6: en-US 7: 8: 9: 10: https: //localhost:44301/ 11: 12: 13: 14: 15: 16: 17: 18: ReadWriteDocument 19: Replace the port after localhost (in both instances) with whatever port you have configured IIS to use for SSL. Make sure to toggle the “SSL Enabled” property on the TaskLastModifiedAppWeb project to true. Let whatever ID was originally set in the manifest remain. Architecture Next, delete the TaskLastModifiedApp.html page – we will need .aspx pages in this project. The basic architecture of the task pane app is as follows: When the task pane app is launched, it loads “URLConstructor.aspx”, which pulls the PWA URL from the client and constructs a call to OAuthAuthorize with the proper tokens to request permissions for the app to access PWA data. This page loads “URLConstructor.js” to interact with the client. OAuthAuthorize is launched in a new window, since we cannot predict the customer’s Project domain. After the user trusts the app, that new window is redirected to “PostOAuth.aspx”, which surfaces the auth code back to URLConstructor.aspx. Once URLConstructor.aspx has the auth code, the task pane app is redirected with this as a token to “Default.aspx”, which has the functional code for the app. This page uses Project CSOM code in its code-behind page to read data from PWA, as well as “TaskLastModifiedApp.js” to interact with the client. Constructing the OAuthAuthorize URL The complete code for URLConstructor.aspx is as follows: 1: 2:   3: 4:   5: 6:   7: 8: TaskLastModifiedApp 9: 10: 11: 12: 13: 14: function getClientId() { 15: var clientId = ‘ ‘ ; //read the clientID from web.config 16: getPwaUrl(clientId); //return to client code 17: } 18: 19:   20: 21: Redirecting… 22: 23:   24: This page needs to be an .aspx page in order to read from web.config, but does not need anything in its code-behind. The clientId read from web.config is needed for the authorization flow. getPwaUrl() is a function within URLConstructor.js. The complete code for URLConstructor.js is as follows: 1: var _projDoc; 2: var pwaUrl; 3: var oAuthUrl; 4:   5: Office.initialize = function (reason) { 6: _projDoc = Office.context.document; 7: getClientId(); //on document load, reads the ClientId from web.config first since it is server-side 8: } 9:   10: function getPwaUrl(clientId) { //uses Office App API to read PWA URL 11: _projDoc.getProjectFieldAsync(Office.ProjectProjectFields.ProjectServerUrl, 12: function (asyncResult) { 13: if (asyncResult.status == Office.AsyncResultStatus.Succeeded) { 14: pwaUrl = asyncResult. value .fieldValue; 15: generateUrl(clientId); //creates the OAuthAuthorize URL with necessary parameters 16: } 17: else { 18: logMethodError( “getProjectFieldAsync” , asyncResult.error.name, asyncResult.error.message); 19: } 20: } 21: ) 22: }; 23:   24: function generateUrl(clientId) { 25: oAuthUrl = pwaUrl + “/_layouts/15/OAuthAuthorize.aspx?IsDlg=1&client_id=” + clientId + “&scope=Projects.Read&response_type=code&redirect_uri=https://localhost:44301/pages/PostOAuth.aspx” ; 26: authWindow = window.open(oAuthUrl); 27: codeListener(); //start listening for the auth code 28: } 29:   30: function codeListener() { 31: setTimeout(function () { readCode(); }, 1000); //check for the auth code every one second 32: } 33:   34: function readCode() { 35: try { //if we can actually reach the authCode field on PostOAuth.aspx 36: authCode = authWindow.document.getElementById( “authCode” ). value ; //pull the authCode value 37: if (authCode != “NA” ) { //if it is not the default “NA” 38: authWindow.close(); //close the new window 39: document.location.href = “/Pages/Default.aspx?code=” + authCode; //redirect task pane to the app code with the authCode token 40: } 41: } 42: catch (e) { 43: codeListener(); //if we couldn’t reach PostOAuth.aspx, wait another second and try again 44: } 45: } When the task pane app loads, it first reads web.config from the aspx page, since this is server-side code. Once it has the clientId, we read the PWA URL. We then create the full OAuthAuthorize URL with the parameters specified above. scope=Projects.Read requests read permission to projects on the current PWA site. Make sure to match the SSL port here as well, as before. On running the app, a new window will open up outside of Project that prompts the user to login to PWA (if they have not checked “Keep me signed in” previously). They will then be presented with a “Do you trust…” page, the same as if they were installing an App for SharePoint. This is the OAuthAuthorize.aspx page. Once trusted, that new window navigates to PostOAuth.aspx, presented below: 1: 2:   3: 4:   5: 6: 7: 8: 9: 10: 11: 12: 13: Closing… 14: 15: 16: 17: And PostOAuth.aspx.cs: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Web; 5: using System.Web.UI; 6: using System.Web.UI.WebControls; 7:   8: namespace TaskLastModifiedAppWeb.Pages 9: { 10: public partial class PostOAuth : System.Web.UI.Page 11: { 12: protected void Page_Load( ob
ject sender, EventArgs e) 13: { 14: var code = Request.QueryString[ “code” ]; 15: authCode.Value = code; 16: } 17: } 18: } This page saves the auth code token in a hidden field. The task pane app, still on URLConstructor.aspx, waits for this value and then closes the new window. The app then continues on to default.aspx with the proper code token needed to finish the OAuth flow. Reading the Last Modified Date of the Selected Task The remainder of this article is an example of what you might do in your task pane app now that you have read access to PWA data. This example will show you the Last Modified date and time of the task you have selected. On launch, it shows you data for the selected task, and as you change tasks, the data is updated using an event handler. The complete code for Default.aspx is as follows: 1: 2:   3: 4:   5: 6: 7: TaskLastModifiedApp 8: 9: 10: 11: 12: 13: 14:   15: 16: 17: 18: 19: 20: 21:   22: 23:   24: 25: 26: 27:   28: 29:   30: 31: This page contains three hidden fields used to pass data back and forth between the client-side code and the server-side code. It also leverages a label to surface the results to the user, and a hidden button that the client-side code uses to call a server-side function, as you will see below. The complete code for TaskLastModifiedApp.js is as follows: 1: var _projDoc; 2: var taskGuid; 3: var projGuid; 4: var pwaUrl; 5:   6: // This runs after every postback 7: Office.initialize = function (reason) { 8: _projDoc = Office.context.document; 9: if (document.getElementById( “pwaUrlHF” ). value == “NA” ) { //if this is the first run 10: firstRun(); 11: } 12: manageTaskEventHandler( ‘addHandlerAsync’ ); //need to re-register event handler after each postback 13: } 14:   15: // Only need these on the first page load, not on postbacks 16: function firstRun() { 17: getProjGuid(); 18: _projDoc.getProjectFieldAsync(Office.ProjectProjectFields.ProjectServerUrl, 19: function (asyncResult) { 20: pwaUrl = asyncResult. value .fieldValue; 21: document.getElementById( “pwaUrlHF” ). value = pwaUrl; 22: } 23: ) 24: getTaskGuid(); 25: } 26:   27: // Get the GUID of the selected task, comes from SDK 28: function getTaskGuid() { 29: var TaskLastModLabel = document.getElementById( “TaskLastModLabel” ); 30: TaskLastModLabel.innerHTML = “Loading…” ; 31: _projDoc.getSelectedTaskAsync(function (asyncResult) { 32: taskGuid = asyncResult. value ; 33: document.getElementById( “taskGuidHF” ). value = taskGuid; //saves the task GUID to a hidden field to pass to the code-behind 34: document.getElementById( “hiddenTaskChangedButton” ).click(); //runs the CSOM calls in the aspx.cs file 35: }); 36: } 37:   38: // Get the GUID of the current project. 39: function getProjGuid() { 40: _projDoc.getProjectFieldAsync(Office.ProjectProjectFields.GUID, 41: function (asyncResult) { 42: projGuid = asyncResult. value .fieldValue; 43: document.getElementById( “projGuidHF” ). value = projGuid; //saves the project GUID to a hidden field to pass to the code-behind 44: } 45: ) 46: } 47:   48: // Task selection changed event handler. 49: function onTaskSelectionChanged(eventArgs) { 50: getTaskGuid(); 51: } 52:   53: // Add or remove a task selection changed event handler. 54: function manageTaskEventHandler(docMethod) { 55: manageEventHandlerAsync( 56: Office.EventType.TaskSelectionChanged, // The task selection changed event. 57: onTaskSelectionChanged, // The event handler. 58: docMethod // The Office.Document method to add or remove an event handler. 59: ); 60: } 61:   62: // Add or remove the specified event handler. 63: function manageEventHandlerAsync(eventType, handler, operation, onComplete) { 64: _projDoc[operation] //The operation is addHandlerAsync or removeHandlerAsync. 65: ( 66: eventType, 67: handler, 68: function (asyncResult) { 69: // code here runs after event has been registered (or failed) 70: } 71: ); 72: } The first time this code runs, it pulls the PWA URL (just like we did in URLConstructor.js) and saves it to one of our hidden fields, registers a client-side event handler to capture when a new task is selected, and starts the process of connecting to PWA and pulling the data we need, which is mostly done in the code-behind file. After each postback, we do not need to recapture the PWA URL, as our ProjectContext is maintained as a static variable. We need to make one quick tweak to TokenHelper.cs first – change GetRealmFromTargetUrl from a private method to a public method. The complete code for Default.aspx.cs is as follows: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Web; 5: using System.Web.UI; 6: using System.Web.UI.WebControls; 7: using Microsoft.ProjectServer.Client; 8: using Microsoft.SharePoint.Client; 9:   10: namespace TaskLastModifiedAppWeb.Pages 11: { 12: public partial class Default : System.Web.UI.Page 13: { 14: public static ProjectContext projContext; 15: public static PublishedProject thisProj; 16: public Guid projGuid; 17:   18: protected void Page_Load( object sender, EventArgs e) 19: { 20: if (!IsPostBack) //set values of hidden fields if this is the first page load 21: { 22: projGuidHF.Value = “NA” ; 23: taskGuidHF.Value = “NA” ; 24: pwaUrlHF.Value = “NA” ; 25: } 26: } 27:   28:   29: protected void GetContexts() 30: { 31: var code = Request.QueryString[ “code” ]; //pulls the code token from the request 32:   33: string targetPwa = pwaUrlHF.Value; //pulls the PWA URL from where the Office app API stored it 34:   35: Uri targetPwaUri = new Uri(targetPwa); 36:   37: var tRealm = TokenHelper.GetRealmFromTargetUrl(targetPwaUri); 38:   39: Uri rUri = new Uri( “https://localhost:44301/pages/PostOAuth.aspx” ); //hardcoded link to redirect_uri 40:   41: var clientContext = TokenHelper.GetClientContextWithAuthorizationCode(targetPwa, “00000003-0000-0ff1-ce00-000000000000” , code, tRealm, rUri); 42:   43: projContext = GetProjectContextWithAuthorizationCode(targetPwa, “00000003-0000-0ff1-ce00-000000000000” , code, tRealm, rUri); 44:   45: projGuid = new Guid( “{” + projGuidHF.Value + “}” ); //loads the current project through CSOM 46:   47: var projects = projContext.LoadQuery(projContext.Projects.Where(proj => proj.Id == projGuid)); 48: projContext.ExecuteQuery(); 49: thisProj = projects.First(); 50: } 51:   52: protected void OnTaskChanged( object sender, EventArgs e) //determine the selected task’s last modified date 53: { 54: if (thisProj == null ) 55: { 56: GetContexts(); 57: } 58: 59: var taskGuid = new Guid(taskGuidHF.Value); 60:   61: var tasks = projContext.LoadQuery(thisProj.Tasks.Where(task => task.Id == taskGuid)); //load the selected task off of the project 62: projContext.ExecuteQuery(); 63: PublishedTask thisTask = tasks.First(); 64: string dateMod = thisTask.Modified.ToString( “D” ); //pull out the Modified field on the task 65: string timeMod = thisTask.Modified.ToString( “t” ); 66: TaskLastModLabel.Text = “The selected task was last modified on ” + dateMod + ” at ” + timeMod + “.” ; 67: } 68:   69: public static ProjectContext GetProjectContextWithAuthorizationCode( string targetUrl, string targetPrincipalName, string authorizationCode, string targetRealm,Uri redirectUri) 70: { 71: Uri targetUri = new Uri(targetUrl); 72:   73: string accessToken = 74: TokenHelper.GetAccessToken(authorizationCode, targetPrincipalName, targetUri.Authority, targetRealm, redirectUri).AccessToken; 75:   76: return GetProjectContextWithAccessToken(targetUrl, accessToken); 77: } 78:   79: public static ProjectContext GetProjectContextWithAccessToken( string targetUrl, string accessToken) 80: { 81: Uri targetUri = new Uri(targetUrl); 82:   83: ProjectContext projContext = new ProjectContext(targetUrl); 84:   85: projContext.AuthenticationMode = ClientAuthenticationMode.Anonymous; 86: projContext.FormDigestHandlingEnabled = false ; 87: projContext.ExecutingWebRequest += 88: delegate ( object oSender, WebRequestEventArgs webRequestEventArgs) 89: { 90: webRequestEventArgs.WebRequestExecutor.RequestHeaders[ “Authorization” ] = 91: “Bearer ” + accessToken; 92: }; 93:   94: return projContext; 95: } 96: } 97: } PageLoad() The f
irst time the page loads, we need to initialize the hidden field values. This enables us to not set them directly in Default.aspx (and thus lose their values after a postback) and lets the client-side code distinguish between a first run load and a postback. GetContexts() This code also only runs once, assuming the current project remains loaded. This handles the last part of the OAuth flow – we use the code token from OAuthAuthorize to generate a client context and a project context using methods in TokenHelper.cs, as well as slightly modified methods GetProjectContextWithAuthorizationCode() and GetProjectContextWithAccessToken(). OnTaskChanged() This first checks to make sure we have a project loaded from which to pull data. We then read the selected task guid from the hidden field, which was updated client-side before this method was called. We use Project CSOM to load the selected task from PWA and read its Last Modified field, which is then presented to the user in a readable format using the label on Default.aspx. Register the App ID and App Secret Since we are not submitting this app to the Office Store, we need to register it on our test tenant. On your tenant, navigate to https://[your PWA site]/_layouts/15/appregnew.aspx. Generate a new App Id and App Secret, set the Title to “TaskLastModifiedApp”, set the App Domain to localhost:44301 (or wherever the app code is running), and set the Redirect URI to match the redirect_uri token value in the oAuth URL created in URLConstructor.js. Hit Create, and then add the App Id and App Secret to web.config in your Visual Studio solution. It should look like the following when you are done, with your values for ClientId and ClientSecret: 1: 2:   3: 4: 5: 6: 7: 8: 9: 10: 11: Time to Test! To run the app, just hit F5 in Visual Studio, which will launch Project Professional. Make sure to connect to a PWA profile, then load a published project (or create and publish a new one). From a task view, select the Project tab in the ribbon, hit the dropdown for Apps for Office, and click TaskLastModifiedApp. The app will launch in a task pane on the right side of the screen. It’ll prompt you to trust the app, quickly load, and then display the last modified date and time of the selected task. Select a different task, and the data will update almost instantly. Wrap-Up In this blog post, you have learned how to create a task pane app in Project Professional that can display data from PWA that would not normally be visible in the client. The app uses SharePoint’s OAuthAuthorize page to request permissions from PWA and handle the authentication handshake between the app code and your online data. For more on working with OAuth, make sure to check out the relevant node in the SharePoint 2013 SDK. For more information on PWA programmability, check out the Project 2013 SDK . To learn more about writing task pane apps for the new Project, see this node in the Office 2013 SDK .