Project Programmability

This blog focuses on customizations and programming for Project Web App, Project Server, Project Professional and Project Standard. Includes User Interface (UI) customizations, Project Server Interface (PSI) and Visual Basic for Applications (VBA) Programming. It also covers Business Intelligence.
 
 

  • Project Programmability and Business Intelligence

    Scalable Issues & Risks Report

    • 2 Comments

    Introduction

    Out of the box the Issues & Risks components of Project Server 2007’s collaboration functionality have an architectural problem which surfaces when 100’s of Project Server Workspace sites are created. This problem is forced by the need to allow flexibility in PWS placement within the farm and the ability to assign issues and risks to any user within the farm, not just specific project team members.

    This results in a non-scalable multi-site query whenever a team member hits the home page of the Issues and Risks page in Project Web Access. The home page issue is mitigated by removal of the functionality; however the team member still needs a place to see all issues and risks across the Project Server site. These instructions detail how to implement such a place in a scalable manner using the data held in the Project Server Reporting Database in combination with SQL Server Reporting Services.

    Caveat: this solution is provided as a workaround; it is not intended to become part of the Project Server 2007 solution and as such will not be localized or migrated/upgraded in future releases. The source of this solution is provided to the customer as-is and should be tested within the customer’s pre-production environment prior to production deployment. Microsoft Product Support Services will not be able to offer full support for this software.

    Architectural Notes

    This solution uses the flexibility of the Microsoft Office Project Server 2007 architecture to leverage the following technologies:

    - Project Server Reporting Database
    This database contains Issue, Risk, Project & Resource data used by this solution. Note that this data is updated on project publish (or explicit WSS site synchronization) so after new Issues & Risks are created the project should be published or the site synchronized in order to make this data available in the reporting database.
    Team members should subscribe to the Issues & Risks lists for their projects in order to get earlier notification of new data.

    - SQL Server Reporting Services 2005 SP2
    The reports used to provide this solution were built using the Report Designer (available in the “Business Intelligence Workbench”) that ships with SQL Server 2005. The SP2 version of the software was used. Note that the installation section refers to the non-integrated Report Viewer web parts, used to demonstrate the integration. It is recommended that the integrated mode be used for a cleaner interface.
    The solution uses the Report Viewer web part that must be installed into the farm as described in the installation section.
    The solution is built as a master report that hosts two sub-reports, one for issues and one for risks – this makes individual reformatting and editing a little bit easier.

    - SharePoint Web Part Pages
    The report developed to display the list of issues & risks is hosted within the Reporting Services report viewer web part within a web part page that is added to the Project Web Access site. The report assumes that flat lists are being used for Issues and Risks, if folders within the list are to be used then further testing is recommended.

    Security Notes

    The report should be run using a data connection with credentials that have read-only access to the Reporting database, specifically the following tables:

    - MSP_EpmProject: Used to obtain project name and URL details

    - MSP_EpmResource: Used to filter data based on the caller (see more below)

    - MSP_WssRisk: Data on Risks, updated when the project is published or the site is explicitly refreshed, not when an issue or risk is added to the list.

    - MSP_WssIssue: Data on Issues, updated when the project is published or the site is explicitly refreshed, not when an issue or risk is added to the list.

    A design aim for the report is to avoid having to register every team member in the reporting database. This is met via SQL Server Reporting Services parameterized filtering on the caller’s userid (this is passed into the query so that only data directly assigned to the caller is returned) – This report was not tested in a farm configuration, it is recommended that it be fully tested in a multi-server configuration before live deployment to ensure that data is filtered.

    This report does not respect SharePoint list-item security (which is not enabled by default) – if an issue or risk is assigned to a team member and then secured individually in a manner that denies the team member access they will continue to see the data pertaining to the item in this report, however the link will not display the item form.

    Scalability and Performance Notes

    This solution will be considerably more performant than the cross-site query that it replaces. However it is recommended that an additional index be created in the reporting database to facilitate the filtering, specifically:

    MSP_EpmResource:

    CREATE NONCLUSTERED INDEX [IX_FastAccountLookup] ON [dbo].[MSP_EpmResource] 
    ( 
    [ResourceName] ASC 
    ) 
    INCLUDE ( [ResourceNTAccount]) 
    Go
    

    Installation Notes

    Assumptions:

    SQL Server 2005 Reporting Services 2005 is already installed in the farm, in non-integrated mode as specific website (in the example below: http://pconlan08:81/ReportServer) – it is recommended that integrated mode be used.

    The SQL Server 2005 Reporting Services web parts are installed on every SharePoint server in the farm, installation instructions:

    http://msdn2.microsoft.com/en-au/library/ms159772.aspx (note that the CAB file is located in a different location on an X64 server, search for RSWebParts.cab on the Reporting Services server(s))

    Installation Steps:

    1. Customize and Deploy the Reports

    Load the attached Reporting Services solution into Business Intelligence Workbench. Edit the Shared Data Source to point to the correct SQL Server and Reporting Database; then set the appropriate credentials (Reporting Services implements a secure credential store)
    Review the form design and make any customer-requested changes (see Report Configuration Notes below)
    In Business Intelligence Workbench edit the Project Properties to point to the correct Reporting Services server and Deploy the solution. Use the http://xxxxx:nn/Reports url to validate that the report works as intended before proceeding to the next step.
    Once tested, use the SQL Server Management Studio to connect to the Report Server and grant appropriate access to the reports to all team members. Test this with a subset of team members to ensure they can access the report.

    2. Create a web part page to host the web part for the report

    - Navigate to the PWA site as a SharePoint administrator, and use the Site Options drop down to select Site Settings/Modify All Site Settings which will bring up the Site Settings page.
    - Select Site Libraries and Lists which will bring up the Site Libraries and Lists page.
    - Select Create New Content which will bring up the Create page.
    - From the menu select: Web Part Page

    - Fill in the dialog as below:

    Note that you may want to place this page in a new document library rather than the Documents library as depicted as you will be granting read access to team members to this library.
    Note that once created the page can be “hidden” in the library to prevent accidental erasure (to do this edit its properties in the library view).
    This creates the page, click the “Add a Web Part” orange bar to add the web part. Use the “Advanced Web Part gallery and options” link, select the “Server Gallery” and then the “Report Viewer” web part.

    This will add the web part to the page. Now configure it as below:
    Menu4.JPG
    Note that the Toolbar and chrome are turned off and a fixed height of 12” is used. No width need be set. The Report Path can contain spaces (no need to %20 escape the string)
    Save the changes and the web page, navigate to the URL to ensure that the report web part displays as expected and that it contains the report as expected. (Note that if you edit and redeploy the report you will need to restart your IE session to avoid caching the report format)

    3. Connect the page to the Project Web Access menu

    In PWA Server Settings choose Quick Launch from the Look and Feel set of options.
    Add a new Entry to the Work Item Group: “Issues and Risks Report”, connect it to the page you created above, as depicted below:

    The final step in this task is to hide the un-scalable Issues & Risk option. In the Quick Launch dialog click the Issues & Risks link and set its hidden property.

    The final result should look like:

    You have now deployed the report, and added it to the PWA menu for team members to use.

    Report Implementation Notes

    Several SQL Server 2005 Reporting Services features have been used to deliver the reports, these are briefly discussed below.

    Team members will click on the new Issues and Risks Report link, this will take them to the page below:

    1. Issues and risks are grouped by status (to put Active at the top of each) – a filter could be added to remove items that have been postponed and/or closed if required, this is a trivial change to the reports. Note that if the types of status have been customized this may look slightly different.

    2. Within the grouping data is sorted by Due Date and Project Name. If Due data is not set then “Now” is assumed (ie the current date will be used)

    3. The Title is set up to be clickable to take the team member to the detailed item form, where the item can then be viewed and/or edited.

    4. Dates have had their time element stripped to save space on each row.

    5. The report displayed above is actually three reports – the master (that contains the Microsoft Office logo and sub-report objects) and two sub reports.

    6. Data is filtered on items assigned to the caller using Reporting Services filtering capabilities – the report has a hidden parameter (a standard Reporting Services feature) that is populated with the callers Windows account, care should be taken to test this in your environment.

    7. Further customization could add graphs/additional data to the view.

    Patrick Conlan

  • Project Programmability and Business Intelligence

    EPM 2007 Test Data Population Tool

    • 2 Comments

    Christophe just passed along this information:

    The EPM 2007 Test Data Population Tool solution starter was published on CodePlex today: http://www.codeplex.com/EPMDatapop

    MWSnap048 2007-11-26, 19_26_50.jpg

    The EPM 2007 Test Data Population Tool enables you to load large amounts of EPM data: resources, projects, tasks, assignments into a Project Server 2007 database. You can then use this data to test loads and help your organization plan for your Project Server 2007 deployment. This tool is similar to the EPM 2003 Data Population utility but contains more features plus since the sources are provided you can customize it to fit your specific needs.  It was written by EPM World Wide Center of Excellence (WW COE) to generate data needed to perform performance and scalability labs for large and complex EPM deployments.

    The EPM 2007 Test Data Population Tool is a Win Form application that leverages the Project Server Interface (PSI) and/or WinProj (Project Professional).

    This solution starter includes a 15 pages document, a setup.exe to deploy it, as well as all source code.

    A special thank you to Mike Shughrue and Michael Jordan from the EPM WW COE for creating and testing the tool extensively during scalability labs, as well as Boris Scholl from the Product Marketing Group for reviewing the code and documentation. 


    About CodePlex

    CodePlex is Microsoft's open source project hosting web site. You can use CodePlex to create new projects to share with the world, join others who have already started their own projects, or use the applications on this site and provide feedback. A word about Microsoft’s role: Microsoft does not control, review, revise, endorse or distribute the third party projects on this site. Microsoft is hosting the CodePlex site solely as a web storage site as a service to the developer community.

    Q&A

    Q: Is the tool supported?

    A: There is no support in terms of CSS/PSS. We expect the support being a CodePlex community effort. Please note that the customization code uses standard supported web service calls available out of the box in EPM2007.

    Q: Is the tool free?

    A: Yes.

    Q: Can I distribute the tool and the source code to customers and partners?

    A: Customers and Partners can use both. Please point them to CodePlex as they have to agree on the license terms

    Q: Can a partner distribute the tool and code as is?

    A: No, but he can point his customer to the website to download it, so he makes sure that the customer agrees with the license terms.

    Q: Can a customer install the customization and use it?

    A: Yes the customer can, but he/she is responsible for testing it and running it.

    Q: Can I suggest changes to it?

    A: Yes, join the CodePlex community or send us an email: epmssdev@microsoft.com

    Q: Will this tool be distributed in other ways (i.e. DVDs)?

    A: No.

    Q: What skills do I need to modify or change the tool?

    A: C#, Project Server Interface, and a good understanding of the EPM 2007 data schema.

    Q: I’m trying to modify the code and do have questions. Who do I ask?

    A: Go to the EPMDatapop discussion forum on CodePlex.

    Regards,

    Christophe Fiessinger

  • Project Programmability and Business Intelligence

    Microsoft Office Project Conference 2007 - Simple Effective Rights

    • 2 Comments

    I'm Phil Smail, one of the Program Managers from the Product Group. One of my presentations during the MOPC 2007 was one of security programmability. As part of that Presentation I demonstrated some code that I wanted to get onto this blog

    This code is a Simple Effective Rights tool. It's essentially a cut down version of the View Effective Rights tool we shipped with the Project 2003 Project Resource Kit (and will be shipping soon in the Project 2007 Project Resource Kit)

    It's a Winforms application that uses the PSI to brute force calculate why a user does/doesn't have the correct permissions. This version only does Project Permissions but could be very easily modified to handle Resource and Global permissions. It uses the PSI to work out the permissions

    When you first start the application you'll get the following logon screen:

    image

    When you enter the URL you are presented with the main Form page:

    image

    There are three drop downs at the top of the page. One to select the User, the second to choose the relevant permission, and the third to choose the Project Name. One those details have been entered you just need to hit the 'EffectivizeName Possible my Rights' button. It then looks like the following:

    image

    The columns mean the following:

    Column Name Possible Values Purpose
    Right Allow/Deny The right specified for the selected Permission
    Object Present True/False Whether the object is explicitly added to the category. If not then it may be accessible through the Category rules
    Category Name N/A The name of the category giving the user permissions
    User/Group Name User name or the Group name If this is via the User then the User Name is displayed else we just display the name of the Group
    Applicable Rules

    · All current and future projects in Project Server database

    · Only the projects indicated

    · The User is the Project Owner or the User is the Status Manager on assignments within that Project

    · The User is on that project's Project Team, The Project Owner is a descendant of the User via RBS

    · A resource on the project's Project Team is a descendant of the User via RBS

    The Project Owner has the same RBS value as the User

    The rules specified by the Category that may be relevant to the effective Permission

    The rules specified by the Category that may be relevant to the effective Permission

    As you can see in the case above the following can be understood from this:

    · The effective right is Deny for this user, this permission on this project

    · The user is denied in 4 categories, 3 directly on the user, one through a group

    What it’s doing under the covers is going through the user object and working out what categories they have permissions on and whether the object exists and what permission the user has on those objects. It then goes through all the groups the user belongs to, works out what categories they have permissions on and calculates the same information. This will give the effective right the user has.

    Why do we have to go through every item to work out the effective right of the user? Unfortunately there isn’t a PSI that tells us the effective permission of a user other than the logged on user.

  • Project Programmability and Business Intelligence

    Creating a Task Hierarchy

    • 2 Comments

    The following questions has been asked:

    "[...] is there a way to set up the task hierarchy within a single project?"

    and the answer is YES! To create a hierarchy within a single project, you have to set the outline level for the sub tasks. The below example creates two task, Summary Task and Sub Task. For the Summary Task, we do not set the outline level, we just create it as normal task. The Sub Task is where you set the outline level. In this example we set the outline level to 2:


    Connection conn = new Connection("http://chboyd01/pwa");

    WSProject.Project projWS = (WSProject.Project)conn.GetWebService(Connection.Project);

    Guid sessGuid = Guid.NewGuid();
    Guid jobGuid = Guid.NewGuid();
    Guid taskGuid = Guid.NewGuid();

    Guid projGuid = GetProjectUidFromProjectName("Excel");

    projWS.CheckOutProject(projGuid, sessGuid, "");

    WSProject.ProjectDataSet dsP;

     

    // Create a task with a constraint

     

    dsP = new WSProject.ProjectDataSet();

    WSProject.ProjectDataSet.TaskRow taskRow = dsP.Task.NewTaskRow();

     

    // Set the required fields

    taskRow.PROJ_UID = projGuid;
    taskRow.TASK_UID = taskGuid;
    taskRow.TASK_NAME =
    "Summary Task";

    taskRow.AddPosition = (int)PSLibrary.Task.AddPositionType.Last;

    dsP.Task.AddTaskRow(taskRow);

    projWS.QueueAddToProject(jobGuid, sessGuid, dsP, false);

    // Create a second task

    dsP = new WSProject.ProjectDataSet();

     

    taskRow = dsP.Task.NewTaskRow();

    Guid task2Guid = Guid.NewGuid();

    jobGuid = Guid.NewGuid();

    // Set the required fields

    taskRow.PROJ_UID = projGuid;
    taskRow.TASK_UID = task2Guid;
    taskRow.TASK_NAME =
    "Sub Task";

    // Set the start and finish dates

    taskRow.TASK_START_DATE = new DateTime(2007, 01, 31);
    taskRow.TASK_FINISH_DATE =
    new DateTime(2007, 02, 03);

    taskRow.TASK_OUTLINE_LEVEL = 2;

    taskRow.AddPosition = (int)PSLibrary.Task.AddPositionType.Last;

    dsP.Task.AddTaskRow(taskRow);

    projWS.QueueAddToProject(jobGuid, sessGuid, dsP, false);

    PublishProject(projGuid);

    The below screen shot is the result of running the above sample code:

    Chris Boyd

     

    Technorati tags: , , ,
  • Project Programmability and Business Intelligence

    Microsoft.Office.Project.Server.Schema

    • 2 Comments

    When working with Project Server Events, you may need to reference Microsoft.Office.Project.Server.Schema. Unfortunately, you will not find it in \Program Files\Microsoft Office Servers\12.0\Bin where you can find other common DLLs for Project Server.  For this DLL, you will need to copy it from the GAC:

    1.      Open Visual Studio Command Prompt

    2.      cd %windir%\assembly\GAC_MSIL\Microsoft.Office.Project.Schema\12.0.0.0*"

    3.      Copy Microsoft.Office.Project.Schema.dll to a directory outside of the GAC

    4.      Go back to Visual Studio and create a reference to Microsoft.Office.Project.Schema.dll from the directory you copied it to

    Just one thing to keep in mind; you may need to copy the DLL from the GAC again if a Project Server update is installed.

    Hope this helps,

    Chris

  • Project Programmability and Business Intelligence

    Syncing Project Workspaces with the RDB

    • 2 Comments

    It has been a while since I have done a blog post, so I figured I would share with you something that I am currently working on. We have run into the scenario where users are updating information on Project Workspaces and Project Manager wants to report on the data that the users are entering in the Workspaces. That information does not make it into the RDB until after a project publishes. To keep the RDB in sync with the Project Workspace, I wrote the following app that we run as a scheduled job:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Data;
    using System.Web.Services.Protocols;
    using System.Diagnostics;
    using PSLibrary = Microsoft.Office.Project.Server.Library;

    namespace WorkspaceRDBUpdate
    {
      class Program
     
    {
        static void Main(string[] args)
        {
          int count = 0;
         
    bool verbose = false;
         
    string ls_projURL = "";
         
    const string PROJECT_SERVICE_PATH = "_vti_bin/psi/Project.asmx";

          if (args.Length == 0 || args.Length > 2)
          {
            System.
    Console.WriteLine("WorkspaceRDBUpdate url [verbose]");
            System.
    Console.WriteLine(" url – The URL to the project server.");
            System.
    Console.WriteLine(" verbose – An optional parameter that outputs progress.");
          }
         
    else
         
    {
            ls_projURL = args[0];
            
           
    if (args.Length > 1 && args[1].ToLower() == "verbose")
            {
              verbose =
    true;
            }

            WSProject.Project ws_Project = new WSProject.Project();

            if (!ls_projURL.EndsWith("/"))
            {
              ls_projURL +=
    "/";
            }

            ws_Project.Url = ls_projURL + PROJECT_SERVICE_PATH;
            ws_Project.Credentials =
    CredentialCache.DefaultCredentials;

            Guid lo_projGUID;
           
    string ls_projName;

     

            WSProject.ProjectDataSet lo_projs = null;

            WSProject.ProjectDataSet lo_projDS;

            try
           
    {
              lo_projs = ws_Project.ReadProjectList();
             
    DataRowCollection lo_projects = lo_projs.Tables[lo_projs.Project.TableName].Rows;

              for (int i = 0; i < lo_projects.Count; i++)
              {
                lo_projGUID =
    new Guid(lo_projects[i][0].ToString());          
               
    ls_projName = lo_projects[i][1].ToString();

                try
               
    {
                  lo_projDS = ws_Project.ReadProjectEntities(lo_projGUID, 1, WorkspaceRDBUpdate.WSProject.
    DataStoreEnum.PublishedStore);

                  // Check if the Project has a Workspace

                  if (lo_projDS.Tables[lo_projDS.Project.TableName].Rows[0][lo_projDS.Project.WSTS_SERVER_UIDColumn.ColumnName] != null && lo_projDS.Tables[lo_projDS.Project.TableName].Rows[0][lo_projDS.Project.WSTS_SERVER_UIDColumn.ColumnName].ToString() != "")
                  {
                   
    if (verbose)
                      System.
    Console.WriteLine("Synchronizing Workspace for Project " + ls_projName);

                    ws_Project.QueueSynchronizeProjectWorkspace(
    Guid.NewGuid(), lo_projGUID, false);
                    count++;
                  }
                 
    else
                 
    {
                    if (verbose)
                      System.
    Console.WriteLine("Notice: Project " + ls_projName + " does not have a workspace.");
                  }
                }
               
    catch (SoapException lo_ex)
                {
                  PSLibrary.
    PSClientError psiError = new PSLibrary.PSClientError(lo_ex);
                  PSLibrary.
    PSErrorInfo[] psiErrors = psiError.GetAllErrors();

                  if (psiErrors.Length == 1)
                  {
                   
    if (psiErrors[0].ToString() == "ProjectNotFound")
                    {
                     
    if (verbose)
                        System.
    Console.WriteLine("Notice: Project " + ls_projName + " is not published.");
                    }
                  }
                }
              }

              Event("Successfully Synchronized " + count + " Projects with the RDB", EventLogEntryType.Information);

            }
            
    catch (WebException lo_ex)
            {
             
    if (verbose)
                System.
    Console.WriteLine("Error: " + lo_ex.Message);

              Event("Error: " + lo_ex.Message, EventLogEntryType.Error);
            }
            
    catch (Exception lo_ex)
            {
              
    if (verbose)
                System.
    Console.WriteLine("Unknown Error: " + lo_ex.Message);

              Event("Unknown Error: " + lo_ex.Message, EventLogEntryType.Error);
            }
          }
        }

        static private void Event(string as_msg, EventLogEntryType eventType)
        {
         
    EventLog lo_eventLog = new EventLog();    
         
    lo_eventLog.Source =
    "Workspace RDB Sync Job";
          lo_eventLog.WriteEntry(as_msg, eventType, 3652);
        }
      }
    }

    This application is fairly straightforward. It reads all the projects and checks if a workspace exists. If one exists, it forces the RDB to be updated by calling QueueSynchronizeProjectWorkspace(…). It logges events to the event log, which makes troubleshooting easy if administrator decide to run it as a scheduled job.

    Chris Boyd

  • Project Programmability and Business Intelligence

    ANNOUNCING: 15 upcoming Developer and 2 BI webcasts for Project 2010! (UPDATED)

    • 2 Comments

    It’s my pleasure to announce series of upcoming Project 2010 webcasts for developers and BI specialists - spanning from extending User Interface of Project 2010 to deep drill down on workflow creation and extending the BI using Excel Services and Performance Point Services!

    We would like to also announce the Project 2010 Solution Starters! They were created to help in deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! In this regard we offer two series of Web Casts – the introductory series as well as deep code drill-down. Please note the source code and additional documents will be available after the respective webcast.

    What is in this post?

    · Project 2010 Developer webcasts

    · Project 2010 Business Intelligence webcasts

    · Project Developer “Real-World Solutions” series webcasts

    · Additional Resources for Project 2010

    · Q&A

    Project 2010 Developer Targeted webcasts

      

    Title

    Level

    Date

    Abstract

    Presenter

    URL

    MSDN Webcast: Project 2010 and Project Server 2010 Programmability

    200

    On Demand

    In this webcast, we provide an overview of the programmability enhancements that are in the upcoming versions of Microsoft Office Project 2010 and Microsoft Office Project Server 2010. We highlight Windows Communication Foundation, Ribbon programmability, and the new programmability features such as Workflow. We also discuss writing backwards compatibility for Microsoft Office Project 2007 applications.

    Chris Boyd, Program Manager, Microsoft Corporation

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=7432

    MSDN Webcast: Project 2010 JS Grid Extensibility (Part 1 of 3): Project Web App

    400

    On Demand

    The first in a series of webcasts on extending grid pages in Project Web App it will focus on initializing custom grid code and interactions between the grid and the Project Web App Ribbon.  In particular we will see how to add additional functionality to the project center.

    Pat Malatack, Program Manager, Microsoft Corporation

    http://www.microsoft.com/en-us/showcase/details.aspx?uuid=085392c2-2f86-42a1-a899-9130b0faa073

    MSDN Webcast: Project 2010 JS Grid Extensibility (Part 2 of 3): Project Web App

    400

    On Demand

    This second grid talk will focus on the use of events and delegates to interact with the timesheet grid in a way that allows one to at custom features and functionality to that page

    Pat Malatack, Program Manager, Microsoft Corporation

    http://www.microsoft.com/en-us/showcase/details.aspx?uuid=0d0785c3-630b-4a7f-a3a1-4ca14db638ba

    MSDN Webcast: Project 2010 JS Grid Extensibility (Part 3 of 3): Project Web App

    400

    On Demand

    In this final grid extensibility talk we will walk through even more grid customizations including adding custom commands to the column header dropdown and custom row header states

    Pat Malatack, Program Manager, Microsoft Corporation

    http://www.microsoft.com/en-us/showcase/details.aspx?uuid=9775a5e3-d899-480e-8c43-f8a1f7ee831d

    MSDN Webcast: Project 2010 User Interface Customizations

    300

    On Demand

    This presentation will focus on Project Client user interface customization. In particular, the new Ribbon interface and custom task panes. It will also introduce the Project 2010 VSTO add-in and show how to use the Ribbon designer.

    Chris Boyd, Program Manager, Microsoft Corporation

    http://www.microsoft.com/en-us/showcase/details.aspx?uuid=253fa760-dbee-4b53-98d9-44de5fc03ae6

    MSDN Webcast: Project 2010 Workflow Deep Dive (Part 1 of 2): PWA & Admin Experience

    200

    Thursday, May 13, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    This web Cast will cover technical details of how workflows work within Project Server 2010.  We will go into how we are built ontop of sharepoint, how workflows connet with PWA, and what customizations can be done through UI level.

    Sam Chung, Program Manager, Microsoft Corporation

    http://www.microsoft.com/en-us/showcase/details.aspx?uuid=d2edf819-8e66-43fe-81cd-14a83a83cde3

    MSDN Webcast: Project 2010 Workflow Deep Dive (Part 2 of 2): Workflows in Visual Studio

    400

    Wednesday, May 26, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    This web Cast will cover the end to end story of creating workflows within Visual Studio.  We will discussing how to setup Visual Studio, how to create a basic workflow, and go over the different activities a developer will need in order to create a Project Server 2010 workflow.

    Sam Chung, Program Manager, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449563&Culture=en-US

    MSDN Webcast: Project 2010 Software Development Kit (SDK) Drill-down

    200

    Thursday, May 27, 2010

    Learn about the Project 2010 SDK content for Project Professional as well as for Project Server. This Web Cast explores the major parts of the SDK and includes development demonstrations using some the new Project 2010 features.

    Jim Corbin, senior Programming Writer, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032450102&Culture=en-US

    MSDN Webcast: Project 2010 Tailored Tools for Workflow Creation

    300

    Tuesday, June 1, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    This Web Cast will cover the different approaches customers and partners can take to create Project Server 2010 Workflows.  Whereas previous only Visual Studio was supported for creating Project 2010 Workflows, investments within this area has now opened up different avenues for our customers and partners to create these workflows.  In particular we will be covering some tools and partnerships which have been created for this particular purpose. 

    Sam Chung, Program Manager, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449569&Culture=en-US

    MSDN Webcast: Project 2010 Powerful Extensibility Using Visual Studio Tools

    400

    Thursday, June 3, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    Using the extensibility features of Microsoft Project 2010, I will show you how to
    1. Create a list of tasks in Microsoft Project that will require updating during a regular status update cycle
    2. Display that list as flexible grid using a Windows Form that can be sorted.
    3. Export the data to an XML file for opening in another program such as Excel or a Browser.
    We'll do this using Visual Studio, so it will be for real.

    Jim Aksel, Project MVP, Director, Celeris Systems

    http://www.microsoft.com/en-us/showcase/details.aspx?uuid=37577ffe-7c26-4ebf-8dba-f757bc3a92c3

    MSDN Webcast: Project 2010 Solution Starters (Part 1 of 2): Achieve Results Quickly

    200

    Tuesday, June 8, 2010
    9:00 am–10:15 am
    Pacific Time

    The purpose of creating the Project 2010 Solution Starters was to help in the deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! Please check Project 2010 developer center at http://msdn.microsoft.com/project for more details!
    This Web Casts will go over the user experience of these tools.

    Bobby Burns, Sam Chung, Program Managers, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449691&Culture=en-US

    MSDN Webcast: Project 2010 Solution Starters (Part 2 of 2): Achieve Results Quickly

    200

    Thursday, June 10, 2010
    9:00 am–10:15 am
    Pacific Time

    The purpose of creating the Project 2010 Solution Starters was to help in the deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! Please check Project 2010 developer center at http://msdn.microsoft.com/project for more details!
    This Web Casts will go over the user experience of these tools.

    Bobby Burns, Sam Chung, Program Managers, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032450819&Culture=en-US

    MSDN Webcast: Project 2010 Solution Starters Drilldown & Code Walkthrough (Part 1 of 4)

    400

    Tuesday, June 15, 2010
    12:00 pm–1:30 pm
    Pacific Time

    The purpose of creating the Project 2010 Solution Starters was to help in the deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! Please check Project 2010 developer center at http://msdn.microsoft.com/project for more details!
    These Web Casts will drill down and provide detailed code-level walkthrough for these tools.

    Mike Shughrue, Principal Consultant, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032450823&Culture=en-US

    MSDN Webcast: Project 2010 Solution Starters Drilldown & Code Walkthrough (Part 2 of 4)

    400

    Thursday, June 17, 2010
    12:00 pm–1:30 pm
    Pacific Time

    The purpose of creating the Project 2010 Solution Starters was to help in the deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! Please check Project 2010 developer center at http://msdn.microsoft.com/project for more details!
    These Web Casts will drill down and provide detailed code-level walkthrough for these tools.

    Mike Shughrue, Principal Consultant, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032450826&Culture=en-US

    MSDN Webcast: Project 2010 Solution Starters Drilldown & Code Walkthrough (Part 3 of 4)

    400

    Tuesday, June 22, 2010
    12:00 pm–1:30 pm
    Pacific Time

    The purpose of creating the Project 2010 Solution Starters was to help in the deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! Please check Project 2010 developer center at http://msdn.microsoft.com/project for more details!
    These Web Casts will drill down and provide detailed code-level walkthrough for these tools.

    Mike Shughrue, Principal Consultant, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032451063&Culture=en-US

    MSDN Webcast: Project 2010 Solution Starters Drilldown & Code Walkthrough (Part 4 of 4)

    400

    Thursday, June 24, 2010
    12:00 pm–1:30 pm
    Pacific Time

    The purpose of creating the Project 2010 Solution Starters was to help in the deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! Please check Project 2010 developer center at http://msdn.microsoft.com/project for more details!
    These Web Casts will drill down and provide detailed code-level walkthrough for these tools.

    Mike Shughrue, Principal Consultant, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032451066&Culture=en-US

    Project 2010 Business Intelligence

    Title

    Level

    Date

    Abstract

    Presenter

    URL

    MSDN Webcast: Project 2010 BI & Portfolio Reporting (Part 1 of 2): Advanced Techniques

    300

    Friday, May 21, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    Web Cast 1 users will have the ability to understand how to utilize Excel Services, Reporting Services and Dashboard Designer to create organizational specific Dashboards.

    Marc Soester, Project MVP, General Manager, i-PMO

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449565&Culture=en-US

    MSDN Webcast: Project 2010 BI & Portfolio Reporting (Part 2 of 2): Advanced Techniques

    300

    Tuesday, May 25, 2010
    12:30 P.M.–2:00 P.M. Pacific Time

    Within Web Cast 2 users receive a deep dive experience on how to generate reports utilizing Project Servers data sources. This web cast will also allow users to generate a Visio Services Report and Power Pivot analytics by utilizing the Project Server 2010 Data Sources.

    Marc Soester, Project MVP, General Manager, i-PMO

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449567&Culture=en-US

    “Real-World Solution” Project Developer series

    Title

    Level

    Date

    Abstract

    Presenter

    URL

    MSDN Webcast: Real-World Solutions: Importing Workspace Data into Project Server Custom Fields

    300

    On Demand

    A client has requested a Project Center view that displays the number of active issues for each project. This is not possible out of the box.

    Stephen C. Sanderlin, Project MVP, Vice President,
    msProjectExperts

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=6865

    MSDN Webcast: Real-World Solutions: Leveraging Project Server Security within SQL Reporting Services Reports

    300

    On Demand

    A client has requested a SQL Reporting Services report that displays sensitive financial data. However, they only want executors of the report to see information on projects to which they have access.

    Stephen C. Sanderlin, Project MVP, Vice President,
    msProjectExperts

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=6866

    MSDN Webcast: Real-World Solutions: Filter Resource and Project data based on Custom Fields

    300

    On Demand

    You are creating a custom Windows application for a client that extracts and displays Project and Resource information. Because the PSI provides no way to filter these entities prior to retrieval from the PSI, you must retrieve all of the projects or resources in order to filter them by Custom Field value. Because this client has some international users on slow WAN links, you must minimize the payload sent to the user by the PSI call.

    Stephen C. Sanderlin, Project MVP, Vice President,
    msProjectExperts

    http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032424143&Culture=en-US

    MSDN Webcast: Real-World Solutions: Exporting Project Server Data to CSV

    300

    Monday, May 24, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    A client would like to export data from Project Server into a legacy Line of Business system. This system only accepts data in a CSV format.

    Stephen C. Sanderlin, Project MVP, Vice President,
    msProjectExperts

    http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032424148&Culture=en-US

    Project 2010 Resources

    Product information

    · http://www.microsoft.com/project/2010/

    · Project Team Blog http://blogs.msdn.com/project/

    Interactive content - Videos & Sessions & Webcast

    · http://www.microsoft.com/showcase/en/US/channels/microsoftproject/

    · http://www.microsoft.com/events/series/epm.aspx

    IT Professional related

    · TechCenter @ TechNet http://technet.microsoft.com/ProjectServer/

    · Admin Blog http://blogs.technet.com/projectadministration/

    Developer related

    · Developer center @ MSDN http://msdn.microsoft.com/Project/

    · Programmability blog http://blogs.msdn.com/project_programmability/

    Additional questions? Project 2010 Forums!

    · http://social.msdn.microsoft.com/Forums/en-US/category/projectserver2010,projectprofessional2010/

    SharePoint 2010 resources

    · http://sharepoint.microsoft.com

    Q&A

    Q: What if I miss the Webcast?

    A: As the nature of the live interaction – you can ask questions during the live Webcast. If you miss it you can watch the recording, but the Q&A option is not available.

    Q: Where do I get more information on Project 2010?

    A: Please check the Project 2010 Resources in this e-mail.

    Q: I’m SharePoint developer and I want to get started with Project Server. What are the best resources?

    A: Beside of the resources above – you can visit our “Project Server Programmability” series of webcasts on http://msdn.microsoft.com/en-us/office/dd334415.aspx.

    Q: Can I get Project 2010 Beta Virtual Image?

    A: Yes- Hosted or Download

    Q: I’m interested in IT Professional Webcasts as well. Where do I find them?

    A: Please check this announcement from Christophe http://blogs.msdn.com/chrisfie/archive/2010/03/03/announcing-microsoft-project-server-2010-it-professional-technet-webcast-series.aspx

     

    Thanks!

    Jan

  • Project Programmability and Business Intelligence

    Great way to learn about the Project 2010 SDK

    • 2 Comments

    Jim Corbin – the Project SDK writer has done a great webcast where he in detail walks through the SDK contents and shows demos using the SDK samples. If you missed it – worth to see!

    MSDN Webcast- Project 2010 Software Development Kit (SDK) Drilldown (Level 200)

    Thanks Jim for your great work on the Project 2010 SDK!

  • Project Programmability and Business Intelligence

    ANNOUNCING: Microsoft Project 2010 Demonstration and Evaluation Installation Pack for RTM is HERE!

    • 2 Comments

    This is a great news! We have just released the Microsoft Project 2010 Demonstration and Evaluation Installation Pack http://go.microsoft.com/?linkid=9713956 that builds on top of 2010 Information Worker Demonstration and Evaluation Virtual Machine http://go.microsoft.com/?linkid=9728417  that SharePoint team has released recently. And yes the Virtual Image that has to be downloaded, imported and running prior to installing “our” Microsoft Project 2010 Demonstration and Evaluation Installation Pack.

    We also advice to watch the following webcast: Project 2010 Virtual Image, Getting Started Quickly (Level 100) 

    Highlights

    - End to end project lifecycle

    clip_image001

    - New Business Intelligence story!

    clip_image002

    - Built on top of common 2010 Information Worker Demonstration and Evaluation Virtual Machine http://go.microsoft.com/?linkid=9728417  using NEW Project 2010 Demo Installation Platform

    clip_image003clip_image004

    Demo storyline

    It follows the life of a project from inception through to completion! Demo storyline offers a comprehensive overview of the new and existing capabilities in:

    · Microsoft Project Professional 2010

    · Microsoft Project Server 2010

    · Microsoft SharePoint 2010 products and technologies

    · Microsoft Office 2010 Products

    More information about the Project 2010 Demo Solution in this comprehensive XPS document (also available on the download page http://go.microsoft.com/?linkid=9713956)

    Project 2010 Demo Installation Platform

    We have published the entire source code of the Project 2010 Demo Installation Platform http://code.msdn.microsoft.com/Project2010DemoPack so us and partners could extend on it and built future demo packs for Project 2010!

    Q&A

    Q: Do I need to download, import and run the 2010 Information Worker Demonstration and Evaluation Virtual Machine (http://go.microsoft.com/?linkid=9728417) before installing the Microsoft Project 2010 Demonstration and Evaluation Installation Pack?

    A: Absolutely yes. Refer to this comprehensive XPS document for more details.

    Q: Could I install this Microsoft Project 2010 Demonstration and Evaluation Installation Pack on any other VM, including Project 2010 Beta?

    A: No.

    Q: Is there anything around evaluation period and expiration I need to pay attention to?

    A: Please follow information included with 2010 Information Worker Demonstration and Evaluation Virtual Machine http://go.microsoft.com/?linkid=9728417 to properly understand procedure like re-arming and activation so you can prevent lot of unpleasant surprises!!!

    Q: Any recommended hardware for good performance?

    A: Yes -  we specify the additional HW requirements in this comprehensive XPS document. We recommend Solid State Drive for great performance. More about HW we use for demoing here.

    Q: How long does it take to install the Microsoft Project 2010 Demonstration and Evaluation Installation Pack on top of 2010 Information Worker Demonstration and Evaluation Virtual Machine?

    A: If the above VM is already running and working properly it takes up to 30 minutes. If you are using Solid State Drive it’s usually around 10 minutes.

    Q: What is in the Microsoft Project 2010 Demonstration and Evaluation Installation Pack?

    A: We have packaged the following content: 4 core Project databases, 1 SharePoint Content database, 1 OLAP Database, number of WSP customizations (check the Solution Starter webcast series here if you want to learn more), additional demo files and PowerShell script for configuring and deploying the whole solution. So that’s it in a nutshell. Check this link for more details http://code.msdn.microsoft.com/Project2010DemoPack.

    Q: Could I only extract the Microsoft Project 2010 Demonstration and Evaluation Installation Pack?

    A: Yes, we have included that option as well based on the demand, but it’s intended for expert use only.

    Q: What if I have additional questions about this Project 2010 Demo Solution?

    A: You have several options – please check this webcast and search or post your questions in this forum.

  • Project Programmability and Business Intelligence

    ANNOUNCING: 15 upcoming Developer and 2 BI webcasts for Project 2010!

    • 2 Comments

    It’s my pleasure to announce series of upcoming Project 2010 webcasts for developers and BI specialists - spanning from extending User Interface of Project 2010 to deep drill down on workflow creation and extending the BI using Excel Services and Performance Point Services!

    We would like to also announce the Project 2010 Solution Starters! They were created to help in deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! In this regard we offer two series of Web Casts – the introductory series as well as deep code drill-down. Please note the source code and additional documents will be available after the respective webcast.

    What is in this post?

    · Project 2010 Developer webcasts

    · Project 2010 Business Intelligence webcasts

    · Project Developer “Real-World Solutions” series webcasts

    · Additional Resources for Project 2010

    · Q&A

    Project 2010 Developer Targeted webcasts

       image
    (yes – this timeline was created using Project Professional 2010)

     

    Title

    Level

    Date

    Abstract

    Presenter

    URL

    MSDN Webcast: Project 2010 and Project Server 2010 Programmability

    200

    On Demand

    In this webcast, we provide an overview of the programmability enhancements that are in the upcoming versions of Microsoft Office Project 2010 and Microsoft Office Project Server 2010. We highlight Windows Communication Foundation, Ribbon programmability, and the new programmability features such as Workflow. We also discuss writing backwards compatibility for Microsoft Office Project 2007 applications.

    Chris Boyd, Program Manager, Microsoft Corporation

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=7432

    MSDN Webcast: Project 2010 JS Grid Extensibility (Part 1 of 3): Project Web App

    400

    On Demand

    The first in a series of webcasts on extending grid pages in Project Web App it will focus on initializing custom grid code and interactions between the grid and the Project Web App Ribbon.  In particular we will see how to add additional functionality to the project center.

    Pat Malatack, Program Manager, Microsoft Corporation

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=13327

    MSDN Webcast: Project 2010 JS Grid Extensibility (Part 2 of 3): Project Web App

    400

    On Demand

    This second grid talk will focus on the use of events and delegates to interact with the timesheet grid in a way that allows one to at custom features and functionality to that page

    Pat Malatack, Program Manager, Microsoft Corporation

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=13328

    MSDN Webcast: Project 2010 JS Grid Extensibility (Part 3 of 3): Project Web App

    400

    On Demand

    In this final grid extensibility talk we will walk through even more grid customizations including adding custom commands to the column header dropdown and custom row header states

    Pat Malatack, Program Manager, Microsoft Corporation

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=13329

    MSDN Webcast: Project 2010 User Interface Customizations

    300

    On Demand

    This presentation will focus on Project Client user interface customization. In particular, the new Ribbon interface and custom task panes. It will also introduce the Project 2010 VSTO add-in and show how to use the Ribbon designer.

    Chris Boyd, Program Manager, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449001&Culture=en-US

    MSDN Webcast: Project 2010 Workflow Deep Dive (Part 1 of 2): PWA & Admin Experience

    200

    Thursday, May 13, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    This web Cast will cover technical details of how workflows work within Project Server 2010.  We will go into how we are built ontop of sharepoint, how workflows connet with PWA, and what customizations can be done through UI level.

    Sam Chung, Program Manager, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449005&Culture=en-US

    MSDN Webcast: Project 2010 Workflow Deep Dive (Part 2 of 2): Workflows in Visual Studio

    400

    Tuesday, May 26, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    This web Cast will cover the end to end story of creating workflows within Visual Studio.  We will discussing how to setup Visual Studio, how to create a basic workflow, and go over the different activities a developer will need in order to create a Project Server 2010 workflow.

    Sam Chung, Program Manager, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449563&Culture=en-US

    MSDN Webcast: Project 2010 Software Development Kit (SDK) Drill-down

    200

    Thursday, May 27, 2010

    Learn about the Project 2010 SDK content for Project Professional as well as for Project Server. This Web Cast explores the major parts of the SDK and includes development demonstrations using some the new Project 2010 features.

    Jim Corbin, senior Programming Writer, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032450102&Culture=en-US

    MSDN Webcast: Project 2010 Tailored Tools for Workflow Creation

    300

    Tuesday, June 1, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    This Web Cast will cover the different approaches customers and partners can take to create Project Server 2010 Workflows.  Whereas previous only Visual Studio was supported for creating Project 2010 Workflows, investments within this area has now opened up different avenues for our customers and partners to create these workflows.  In particular we will be covering some tools and partnerships which have been created for this particular purpose. 

    Sam Chung, Program Manager, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449569&Culture=en-US

    MSDN Webcast: Project 2010 Powerful Extensibility Using Visual Studio Tools

    400

    Thursday, June 3, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    Using the extensibility features of Microsoft Project 2010, I will show you how to
    1. Create a list of tasks in Microsoft Project that will require updating during a regular status update cycle
    2. Display that list as flexible grid using a Windows Form that can be sorted.
    3. Export the data to an XML file for opening in another program such as Excel or a Browser.
    We'll do this using Visual Studio, so it will be for real.

    Jim Aksel, Project MVP, Director, Celeris Systems

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449571&Culture=en-US

    MSDN Webcast: Project 2010 Solution Starters (Part 1 of 2): Achieve Results Quickly

    200

    Tuesday, June 8, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    The purpose of creating the Project 2010 Solution Starters was to help in the deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! Please check Project 2010 developer center at http://msdn.microsoft.com/project for more details!
    This Web Casts will go over the user experience of these tools.

    Bobby Burns, Sam Chung, Program Managers, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449691&Culture=en-US

    MSDN Webcast: Project 2010 Solution Starters (Part 2 of 2): Achieve Results Quickly

    200

    Thursday, June 10, 2010

    The purpose of creating the Project 2010 Solution Starters was to help in the deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! Please check Project 2010 developer center at http://msdn.microsoft.com/project for more details!
    This Web Casts will go over the user experience of these tools.

    Bobby Burns, Sam Chung, Program Managers, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032450819&Culture=en-US

    MSDN Webcast: Project 2010 Solution Starters Drilldown & Code Walkthrough (Part 1 of 4)

    400

    Tuesday, June 15, 2010

    The purpose of creating the Project 2010 Solution Starters was to help in the deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! Please check Project 2010 developer center at http://msdn.microsoft.com/project for more details!
    These Web Casts will drill down and provide detailed code-level walkthrough for these tools.

    Mike Shughrue, Principal Consultant, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032450823&Culture=en-US

    MSDN Webcast: Project 2010 Solution Starters Drilldown & Code Walkthrough (Part 2 of 4)

    400

    Thursday, June 17, 2010

    The purpose of creating the Project 2010 Solution Starters was to help in the deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! Please check Project 2010 developer center at http://msdn.microsoft.com/project for more details!
    These Web Casts will drill down and provide detailed code-level walkthrough for these tools.

    Mike Shughrue, Principal Consultant, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032450826&Culture=en-US

    MSDN Webcast: Project 2010 Solution Starters Drilldown & Code Walkthrough (Part 3 of 4)

    400

    Tuesday, June 22, 2010

    The purpose of creating the Project 2010 Solution Starters was to help in the deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! Please check Project 2010 developer center at http://msdn.microsoft.com/project for more details!
    These Web Casts will drill down and provide detailed code-level walkthrough for these tools.

    Mike Shughrue, Principal Consultant, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032451063&Culture=en-US

    MSDN Webcast: Project 2010 Solution Starters Drilldown & Code Walkthrough (Part 4 of 4)

    400

    Thursday, June 24, 2010

    The purpose of creating the Project 2010 Solution Starters was to help in the deployment and customization of Project Server 2010. This set of Solution Starters is focusing on Demand Management experience in Project 2010. The Solution Starters source code will be publicly available via MSDN Code Gallery - so anyone can extend the experience! Please check Project 2010 developer center at http://msdn.microsoft.com/project for more details!
    These Web Casts will drill down and provide detailed code-level walkthrough for these tools.

    Mike Shughrue, Principal Consultant, Microsoft Corporation

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032451066&Culture=en-US

    Project 2010 Business Intelligence

    Title

    Level

    Date

    Abstract

    Presenter

    URL

    MSDN Webcast: Project 2010 BI & Portfolio Reporting (Part 1 of 2): Advanced Techniques

    300

    Friday, May 21, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    Web Cast 1 users will have the ability to understand how to utilize Excel Services, Reporting Services and Dashboard Designer to create organizational specific Dashboards.

    Marc Soester, Project MVP, General Manager, i-PMO

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449565&Culture=en-US

    MSDN Webcast: Project 2010 BI & Portfolio Reporting (Part 2 of 2): Advanced Techniques

    300

    Tuesday, May 25, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    Within Web Cast 2 users receive a deep dive experience on how to generate reports utilizing Project Servers data sources. This web cast will also allow users to generate a Visio Services Report and Power Pivot analytics by utilizing the Project Server 2010 Data Sources.

    Marc Soester, Project MVP, General Manager, i-PMO

    https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032449567&Culture=en-US

    “Real-World Solution” Project Developer series

    Title

    Level

    Date

    Abstract

    Presenter

    URL

    MSDN Webcast: Real-World Solutions: Importing Workspace Data into Project Server Custom Fields

    300

    On Demand

    A client has requested a Project Center view that displays the number of active issues for each project. This is not possible out of the box.

    Stephen C. Sanderlin, Project MVP, Vice President,
    msProjectExperts

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=6865

    MSDN Webcast: Real-World Solutions: Leveraging Project Server Security within SQL Reporting Services Reports

    300

    On Demand

    A client has requested a SQL Reporting Services report that displays sensitive financial data. However, they only want executors of the report to see information on projects to which they have access.

    Stephen C. Sanderlin, Project MVP, Vice President,
    msProjectExperts

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=6866

    MSDN Webcast: Real-World Solutions: Filter Resource and Project data based on Custom Fields

    300

    On Demand

    You are creating a custom Windows application for a client that extracts and displays Project and Resource information. Because the PSI provides no way to filter these entities prior to retrieval from the PSI, you must retrieve all of the projects or resources in order to filter them by Custom Field value. Because this client has some international users on slow WAN links, you must minimize the payload sent to the user by the PSI call.

    Stephen C. Sanderlin, Project MVP, Vice President,
    msProjectExperts

    http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032424143&Culture=en-US

    MSDN Webcast: Real-World Solutions: Exporting Project Server Data to CSV

    300

    Monday, May 24, 2010
    1:00 P.M.–2:00 P.M. Pacific Time

    A client would like to export data from Project Server into a legacy Line of Business system. This system only accepts data in a CSV format.

    Stephen C. Sanderlin, Project MVP, Vice President,
    msProjectExperts

    http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032424148&Culture=en-US

    Project 2010 Resources

    Product information

    · http://www.microsoft.com/project/2010/

    · Project Team Blog http://blogs.msdn.com/project/

    Interactive content - Videos & Sessions & Webcast

    · http://www.microsoft.com/showcase/en/US/channels/microsoftproject/

    · http://www.microsoft.com/events/series/epm.aspx

    IT Professional related

    · TechCenter @ TechNet http://technet.microsoft.com/ProjectServer/

    · Admin Blog http://blogs.technet.com/projectadministration/

    Developer related

    · Developer center @ MSDN http://msdn.microsoft.com/Project/

    · Programmability blog http://blogs.msdn.com/project_programmability/

    Additional questions? Project 2010 Forums!

    · http://social.msdn.microsoft.com/Forums/en-US/category/projectserver2010,projectprofessional2010/

    SharePoint 2010 resources

    · http://sharepoint.microsoft.com

    Q&A

    Q: What if I miss the Webcast?

    A: As the nature of the live interaction – you can ask questions during the live Webcast. If you miss it you can watch the recording, but the Q&A option is not available.

    Q: Where do I get more information on Project 2010?

    A: Please check the Project 2010 Resources in this e-mail.

    Q: I’m SharePoint developer and I want to get started with Project Server. What are the best resources?

    A: Beside of the resources above – you can visit our “Project Server Programmability” series of webcasts on http://msdn.microsoft.com/en-us/office/dd334415.aspx.

    Q: Can I get Project 2010 Beta Virtual Image?

    A: Yes- Hosted or Download

    Q: I’m interested in IT Professional Webcasts as well. Where do I find them?

    A: Please check this announcement from Christophe http://blogs.msdn.com/chrisfie/archive/2010/03/03/announcing-microsoft-project-server-2010-it-professional-technet-webcast-series.aspx

     

    Thanks!

    Jan

  • Project Programmability and Business Intelligence

    Writing a PSI Extension for Project Server 2010

    • 2 Comments

    The blog articles How to make PSI Extensions in Project Server 2010 - Part I and  Part II show how to create and use a simple PSI extension that reads a list of timesheets for the current user, by calling both the GetCurrentUserUid method and the ReadTimesheetList method in the extension. The code in the articles requires using the undocumented Microsoft.Office.Project.Server.Interfaces.dll and Microsoft.Office.Project.Server.Schema.dll assemblies, creates WCF channels for the Resource and Timesheet services, and then returns an XML string of the results.

    The blog articles show more information about using WCF development in Project Server than the Project 2010 SDK includes. For background information about why PSI extensions in Project Server 2010 are different than extensions in Project Server 2007, read those articles.

    The PSI Extensions in Project Server 2010.docx article in the attachment (PSIExtension.zip) shows how to create and use a PSI extension that makes the same calls as in the previous blog, but with the following differences:

    • Use the Resource and Timesheet proxy service files, instead of the undocumented assemblies.
    • Configure the services programmatically, similar to the same way shown in Walkthrough: Developing PSI Applications Using WCF, instead of creating a WCF ChannelFactory.
    • Return a TimesheetListDataSet, instead of a string.
    • Use an app.config file for the client, as with any other PSI service, instead of creating a ChannelFactory.

    The PSIExtension.zip attachment includes the draft article, complete code of the extension and a test application, and examples of the PSIExtensions.svc and web.config files for the PSI.

    --Jim

  • Project Programmability and Business Intelligence

    New VBA classes and members in Project Professional 2013 Preview

    • 2 Comments

    The What’s new for developers in the new Project desktop (besides task pane apps) article is available in the Office Developer Blog. The VBA and VSTO object model includes includes classes that support new reports with charts, tables, and Office Art. Other new members in the Project object model support the new task paths feature, cache status, and working with tasks lists in SharePoint 2013.

  • Project Programmability and Business Intelligence

    Connecting a Project Task Pane App to PWA

    • 2 Comments

    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).

    image

    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”.

    image

    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 Files\Reference Assemblies\Microsoft\Windows Identity Foundation\v3.5\Microsoft.IdentityModel.dll
    • C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.IdentityModel.Extensions\v4.0_2.0.0.0__69c3241e6f0468ca\Microsoft.IdentityModel.Extensions.dll
    • C:\Program Files\Reference Assemblies\Microsoft\Windows Identity Foundation\v3.5\Microsoft.IdentityModel.WindowsTokenService.dll
    • C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI\Microsoft.ProjectServer.Client.dll
    • C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll
    • C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll
    • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.IdentityModel.dll
    • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.IdentityModel.Selectors.dll
    • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.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: <?xml version="1.0" encoding="UTF-8"?>
     2: <OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TaskPaneApp">
     3:   <Id>[leave this line alone]</Id>
     4:   <Version>1.0</Version>
     5:   <ProviderName>Microsoft</ProviderName>
     6:   <DefaultLocale>en-US</DefaultLocale>
     7:   <DisplayName DefaultValue="TaskLastModifiedApp" />
     8:   <Description DefaultValue="This app will show you when the selected task was last modified"/>
     9:   <AppDomains>
     10:     <AppDomain>https://localhost:44301/</AppDomain>
     11:   </AppDomains>
     12:   <Capabilities>
     13:     <Capability Name="Project" />
     14:   </Capabilities>
     15:   <DefaultSettings>
     16:     <SourceLocation DefaultValue="https://localhost:44301/pages/URLConstructor.aspx" />
     17:   </DefaultSettings>
     18:   <Permissions>ReadWriteDocument</Permissions>
     19: </OfficeApp>

    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: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="URLConstructor.aspx.cs" Inherits="TaskLastModifiedAppWeb.Pages.URLConstructor" %>
     2:  
     3: <!DOCTYPE html>
     4:  
     5: <html xmlns="http://www.w3.org/1999/xhtml">
     6:  
     7: <head runat="server">
     8:     <title>TaskLastModifiedApp</title>
     9:     <meta http-equiv="X-UA-Compatible" content="IE=9" />
     10:     <script type="text/javascript" src="..\Scripts\Office\1.0\MicrosoftAjax.js"></script>
     11:     <script type="text/javascript" src="..\Scripts\Office\1.0\Office.js"></script>
     12:     <script type="text/javascript" src="..\Scripts\URLConstructor.js"></script>
     13:     <script type="text/javascript">
     14:         function getClientId() {
     15:             var clientId = '<%=ConfigurationManager.AppSettings["ClientId"].ToString() %>'; //read the clientID from web.config
     16:             getPwaUrl(clientId); //return to client code
     17:         }</script>
     18: </head>
     19:  
     20: <body>
     21:     Redirecting...
     22: </body>
     23:  
     24: </html>

    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: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PostOAuth.aspx.cs" Inherits="TaskLastModifiedAppWeb.Pages.PostOAuth" %>
     2:  
     3: <!DOCTYPE html>
     4:  
     5: <html xmlns="http://www.w3.org/1999/xhtml">
     6: <head runat="server">
     7:     <title></title>
     8: </head>
     9: <body>
     10:     <form id="form1" runat="server">
     11:     <div>
     12:     <asp:HiddenField ID="authCode" runat="server" value="NA"/>
     13:         Closing...
     14:     </div>
     15:     </form>
     16: </body>
     17: </html>

    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(object 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: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TaskLastModifiedAppWeb.Pages.Default" %>
     2:  
     3: <!DOCTYPE html>
     4:  
     5: <html xmlns="http://www.w3.org/1999/xhtml">
     6: <head runat="server">
     7:     <title>TaskLastModifiedApp</title>
     8:     <meta http-equiv="X-UA-Compatible" content="IE=9" />
     9:     <script type="text/javascript" src="..\Scripts\Office\1.0\MicrosoftAjax.js"></script>
     10:     <script type="text/javascript" src="..\Scripts\Office\1.0\Office.js"></script>
     11:     <script type="text/javascript" src="..\Scripts\TaskLastModifiedApp.js"></script>
     12:     
     13: </head>
     14:  
     15: <body>
     16:     <form id="form1" runat="server">
     17:         
     18:         <asp:HiddenField ID="projGuidHF" runat="server" />
     19:         <asp:HiddenField ID="taskGuidHF" runat="server" />
     20:         <asp:HiddenField ID="pwaUrlHF" runat="server" />
     21:  
     22:         <asp:Label ID="TaskLastModLabel" runat="server" Text="Loading..." />
     23:  
     24:         <div style="display: none;">
     25:             <asp:Button ID="hiddenTaskChangedButton" runat="server" OnClick="OnTaskChanged" />
     26:         </div>
     27:  
     28:     </form>
     29:  
     30: </body>
     31: </html>

    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 first 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.

    image

    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: <?xml version="1.0"?>
     2:  
     3: <configuration>
     4:     <system.web>
     5:       <compilation debug="true" targetFramework="4.0" />
     6:     </system.web>
     7:   <appSettings>
     8:     <add key="ClientId" value="a9ce3d5a-bb14-4aad-9c27-41a05c473b4d" />
     9:     <add key="ClientSecret" value="hL0C8wt2PPaBYNYRMZzcUcu3C/Vv0fbm48djGzyIXOw=" />
     10:   </appSettings>
     11: </configuration>

    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.

    image

    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.

    image

    Select a different task, and the data will update almost instantly.

    image

    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.

  • Project Programmability and Business Intelligence

    Using the updated ChangeXML utility for Statusing

    • 2 Comments

    The Statusing methods in the Project Server Interface (PSI) in Microsoft Project Server 2010 enable one user to read, submit, and update assignment and task status for another user, without resorting to impersonation. In the Project Server 2007 SDK, the How to: Generate ChangeXML for Statusing Updates article shows how to generate the changeXml parameter for the UpdateStatus method, validate the XML, and use the ReadStatus and SubmitStatus methods. The Project 2007 SDK download includes the complete Visual Studio 2005 solution for the ChangeXML utility. However, the ChangeXML utility could only update status for the current user.

    The ChangeXML utility  is now updated for Project Server 2010, in the attached ChangeXMLUtility.zip file. With it, you can generate the changeXml parameter and update status for the current user or for another user. To update status for another user, the utility uses the ReadStatusForResource and UpdateStatusForResource methods. In addition, the utility checks whether the current user has the global StatusBrokerPermission security permission, adds the ResID attribute to the changeXml parameter, and validates the XML against the updated ChangeList.xsd schema in Project Server 2010. For more information about the ChangeList.xsd schema, see Introduction to the ChangeList Schema and Statusing ChangeXML.

    Note: The ChangeXML utility is designed for use only on a test installation of Project Server 2010, as an example of a programming utility for statusing. It should not be used on a production installation.

    The updated ChangeXML utility also has several other changes. The previous version uses the ASMX interface, which was the only choice available for Project Server 2007. In the updated version, you can choose to programmatically initialize the WCF interface of the PSI by entering the Project Web App URL, or by using the WCF endpoint values in the app.config file. In the following screenshot, the login is automatic if you use the app.config value.

            ChangeXML_LogOn_AppConfig

    Note: To use the app.config file, change the URL to the value for your PWA instance, for each PSI service endpoint.

    In the main window, after you log on Project Server, choose Build Change XML.

            ChangeXML_Main_Empty

    You can choose to update the status of available assignments for the current user, or – if you have the StatusBrokerPermission – you can choose another user and update assignments for that user. In the following screenshot, the update is for another user. The Items available for update list shows the Project name : Task name : User name values for each item. You can choose to update assignment values or task values for that assignment. The Generate a Change dialog box shows different controls in the Update section, depending on what kind of update you choose. For example, if you choose to update an assignment custom field, you can choose the custom field and the lookup table value, if the custom field uses a lookup table.

            ChangeXML_Generate_4User_Assign_HealthCF

    When you choose Update XML, the tool generates the changeXml parameter value, as follows:

            ChangeXML_Main_4User_Assign_HealthCF

    Following is the changeXml parameter value in the case shown, for updating the Health assignment custom field. Note that the XML value includes the ResID attribute for the Assn element.

    <Changes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Proj ID="a3e78597-2302-45fc-bb15-7f23d74efdf8">
        <Assn ID="b001d2d9-69eb-49a0-aa9f-6bbe53f9484c"
    ResID="aa3a6f6f-bb70-4d2e-92da-b06580ae6376"> <LookupTableCustomFieldChange IsMultiValued="false"
    CustomFieldType="Text"
    CustomFieldGuid="00004f6d-90a2-439a-8cc2-1c1ef6d2da4f"
    CustomFieldName="Health"> <LookupTableValue
    Guid="0000c45d-8a43-4eb0-9b74-e535b391988a">Late</LookupTableValue> </LookupTableCustomFieldChange> </Assn> </Proj> </Changes>

    You can clear the Run Update check box to just validate the changeXml parameter. For example, manually change one of the elements, attributes, or values in the XML, and see if it still validates. Or, you can check Run Update to validate and run the change.

    When the change is completed, try opening the project in Project Professional. If you are the project manager, you are prompted to review the status change in PWA. If you accept the change in PWA, to see the change, open the project in Project Professional. For example, if you changed the Health assignment custom field, go the the Task Usage view, and then add the Health field to the view.

            WinProj_OpenProject_AssnHealthCF_Changed

    After you save and publish the project, you can also see the change in the Reporting database. For example, run the following query in SQL Server Management Studio for the RDB:

    SELECT TOP 1000 [AssignmentUID]
          , [ResourceUID]
          , [Health_T]
        FROM [ProjectServer_Reporting].[dbo].[MSP_EpmAssignment_UserView]

    Find the correct assignment and resource GUIDs in the Results pane:

    SQLSrv_ReportingDB_EpmAssignment

    The ChangeXML utility is useful for creating and testing values of the changeXml parameter for the UpdateStatus method,
    where
    you can create and test changes for the current user and for other Project Server 2010 users. It also contains code examples
    that show how to check for a security permission of a resource and use statusing methods.

    Updating the ChangeXML utility

    Here are the main steps that were used to update the application from Project Server 2007 to 2010. The user interface had only
    minor tweaks, because that was not an issue for a test tool.

    1. Open in Visual Studio 2010 to update the solution; change the target to .NET Framework 3.5.
    2. Add a reference to the updated ProjectServerServices.dll, which contains a proxy WCF interface of the PSI services.
    3. Remove ASMX initialization; initialize PSI services for WCF (programmatic and/or with app.config). This step is not
      essential, but the WCF interface is recommended for moving forward.
    4. Modify the login dialog box; use the WCFHelpers.dll assembly from ProjTool for login routines. The ProjTool code for
      Project Server 2010 is in the SDK download.
      Note: The logon routines for Forms authentication are not updated in this sample.
    5. Get and display the StatusBrokerPermission value for the current user. Enable the Update for user option if the current
      user has the correct permission.
    6. Get the list of active resources, by using ReadUserList; add the ResourceItem class for combobox display and values.
    7. Refresh the list of items to update, by using ReadStatusForResource.
    8. Add ResID to classes for generating and displaying the changeXml parameter (ChangesProj, ChangesProjAssn,
      ChangesProjTask, and Items).
    9. Remove the empty ResID attribute in the changeXml value for the current user.
    10. Run statusing updates for a selected user, by using SubmitStatusForResource.
    11. Test

    In actuality, testing occurs after each step is completed.

    —Jim Corbin

  • Project Programmability and Business Intelligence

    Reading Enterprise RBS values: the Easy Way and the Not-So-Easy Way

    • 2 Comments

    There are a couple of ways to programmatically get the Resource Breakdown Structure (RBS) value for a Project Server user. The simplest way is to query the Reporting database, for example:

    SELECT [ResourceUID] ,[ResourceName] ,[ResourceBookingType] ,[ResourceIsActive] ,[RBS] FROM [ProjectServer_Reporting].[dbo].[MSP_EpmResource_UserView] AS res WHERE res.ResourceName = N'Linda Jones'

    The result on my machine is:

    ResourceUID

    ResourceName

    ResourceBookingType

    ResourceIsActive

    RBS

    0D455775-01CB-42E1-A481-A6F0F1F8208A

    Linda Jones

    0

    1

    User Assistance.DevDocs.SDK Writers

    To get the RBS by using the PSI is a bit more work. Because the RBS is an enterprise resource custom field that uses the RBS lookup table, you can use the following steps:

    1. Call the ReadResources method and filter the primary Resources table for the user name and GUID. Alternately, you can use the ReadUserList method to get all of the active resource names and GUIDs, and iterate through the ResourceDataSet for the specific resource. The attached example uses the –userList command line argument to have the application use the ReadUserList method, and displays the elapsed time for the method used.
    2. Call ReadResource with the resource GUID to get the full ResourceDataSet.
    3. Iterate through the ResourceDataSet.ResourceCustomFields table to get the CODE_VALUE for the RBS custom field (if it exists).
    4. Use a filter with the ReadLookupTables method to get a LookupTableDataSet that contains only the LookupTableTrees table for the RBS lookup table.
    5. Iterate through the LookupTableTrees table to get the LT_VALUE_FULL string that corresponds to the CODE_VALUE in the RBS custom field.  The LookupTableTrees row where the LT_STRUCT_UID element matches the  custom field CODE_VALUE contains the correct RBS string.

    The attached example also writes the various datasets to XML files, for debugging purposes. Keep in mind that the app user must have the ManageUsersAndGroups global permission, and the other permissions specified in the SDK topics for the methods used, in order to read data of other resources.

    The attached ReadRBS.zip file contains the complete Visual Studio solution for the example described in this post. To use the sample, change the server name and Project Server name for the endpoint addresses in the app.config file. The sample uses the WCF interface for Project Server 2010; however, it can be adapted to use the ASMX interface for Project Server 2007.

    For example, the following command gets the same RBS value shown by the Reporting database query:

    C:\Test>ReadRbs -name "Linda Jones"

    XML output from ReadResources:
            C:\Project\Samples\Output\RBS_ReadResources_UserInfo.xml

    Using ReadResources method: 412.309 milliseconds

    XML output from ReadResource:
            C:\Project\Samples\Output\RBS_ReadResource_FullUserInfo.xml

    XML output from ReadLookupTables:
            C:\Project\Samples\Output\RBS_LookupTable.xml

    User name: Linda Jones
            GUID: 0D455775-01CB-42E1-A481-A6F0F1F8208A
            RBS value: User Assistance.DevDocs.SDK Writers

    Press any key to exit...

  • Project Programmability and Business Intelligence

    The Beta of Visual Studio 2010 SP1

    • 2 Comments

    See Announcing Visual Studio 2010 Service Pack 1 Beta for a download link. General availability will be Thursday, Dec. 9.

  • Project Programmability and Business Intelligence

    Timesheet Solutions for Webcast: Understanding the PSI in Project Server 2010

    • 2 Comments

    The MSDN Webcast: Understanding Project Server Interface (PSI) in Project Server 2010 (Level 300) presentation is available for download, when you register for the event. Several of the sample applications that were demonstrated in the webcast are available in the Project 2010 SDK download. The TimesheetSamples.zip file that is attached to this blog post includes the two example solutions for timesheets. (Steven Haden and Olivier Laymand, Microsoft Corporation, did the webcast and created the sample code.)

    • MyTsSample shows how to update a  timesheet for a resource, where the timesheet is in single entry mode.
    • TimesheetEventHandler shows how to use impersonation with a TimesheetEventReceiver.OnCreated event handler, to update the timesheet name.
  • Project Programmability and Business Intelligence

    You can use Project with SharePoint Composites, too

    • 1 Comments

    The Guide to creating SharePoint Composites includes a 73-page download that explains SharePoint Composites. To quote from the download, “A SharePoint Composite combines data, documents, and business process in a useful, productive way. … A SharePoint Composite is a ‘do-it-yourself’ business solution.” The SharePoint Composites.docx handbook includes a detailed introduction along with common design patterns that can help provide ideas on how to integrate and present data for collaboration and BI, by using SharePoint.

    Although the Office 2010 integration points section includes only a brief mention of Microsoft Project, the handbook overall is a useful introduction to the concepts. For those who work with Project and Project Server, the handbook can help to expand your view of what is possible – as well as what is useful.  Similar terms you might have heard in the past include mashup and OBAs (Office Business Applications). The SharePoint Composites handbook extends those ideas specifically for SharePoint-based solutions.

  • Project Programmability and Business Intelligence

    Building an app for Project Server 2013

    • 1 Comments

    Alex Burton, a Project MVP, has published a series of posts titled Building your first Project Server app on the EPMSource blog. The app is named Publish All; it publishes all enterprise projects for the PWA instance where the app is installed. The Publish All app is developed by using the Project Server JavaScript object model (JSOM) with "Napa" Office 365 Development Tools, and can be deployed to Project Online and to an on-premises installation of Project Server 2013.

    The blog series includes the following parts:

    Alex has even gone so far as to add a support page for the Publish All app, at http://epmsource.com/2013-apps/. It looks to be a very useful series.

    For more information about the Napa tools, see How to: Create a basic app for SharePoint by using Office 365 Development Tools on MSDN. For information about using Visual Studio 2012 with the JSOM for Project Server, see Getting started with the Project Server 2013 JavaScript object model.

  • Project Programmability and Business Intelligence

    Project 2010 SDK, **March** update (online MSDN only)

    • 1 Comments

    See Project 2010 SDK Documentation for the March update of the online Project 2010 SDK.
    The  pre-release Project 2010 SDK is updated on MSDN. Post-beta builds of Project Server are changed for setting WCF service references and using multi-authentication (where Windows and Forms are both used) with Claims. These issues do not affect the Project Server 2010 beta release.

    The topic How to: Use Impersonation with WCF is updated again for the RC release, since the previous update in February.
    Update of Impersonation Article and Code for Project Server 2010 in the Project_Programmability blog includes  code download with the second round of changes that have been made in Project Server 2010 and SharePoint Server 2010 since the beta release.

    Topics with major updates:
    Developing Project Server Workflows (all four subtopics are updated, including a PowerShell script for managing workflow deployment)
    Prerequisites for WCF-Based Code Samples (includes the corrected changes for creating a PSI proxy)
    The managed code reference also has more content, particularly in the Workflow and Driver areas.

    The SDK download will be updated shortly after product general availability.

  • Project Programmability and Business Intelligence

    Code samples from the Project 2010 SDK webcast

    • 1 Comments

    The attached WebcastSamples_Project2010SDK.zip file contains three complete Microsoft Visual Studio 2010 projects for code samples that were briefly discussed in the Project 2010 Software Development Kit (SDK) Drilldown webcast:

    • ProjectGuideAddIn:  Uses Microsoft Office development tools (VSTO) in Visual Studio 2010 to add a toggle button to the Project Standard or Project Professional 2010 ribbon, which turns the Project Guide on or off. You can install the compiled add-in by running setup.exe in the ProjectGuideAddIn\publish subdirectory. The add-in uses a hard-coded location of the Project Guide files, C:\PG\DefaultProjectGuideFiles. To install the Project Guide files, install the Project 2010 SDK download, and then extract ProjectGuideFiles.zip to C:\PG.
    • ASMXLogon_MultiAuth:  Shows how to make ASMX web service calls to the PSI on a Project Server installation that uses both Windows authentication and Forms authentication. The solution uses the LoginWindows and Project proxy source files, available in the Project 2010 SDK download, and derives Web service classes that override the Web request headers. ASMXLogon_MultiAuth is a complete solution that implements the Using Claims Multi-Authentication discussion in the Prerequisites for ASMX-Based Code Samples article.
    • WCFLogon_MultiAuth:  Shows how to make Windows Communication Foundation (WCF) service calls to the PSI on a Project Server installation that uses both Windows authentication and Forms authentication. The WCF solution does the same job that the ASMX solution does, but uses the ProjectServerServices.dll proxy assembly for the PSI services instead of proxy source files. The Project 2010 SDK download includes a script to compile the proxy assembly from the proxy source files. The WCF solution also uses an App.config file to configure the WCF client endpoints. Because the solution uses the ProjectServerServices.dll proxy assembly, you can see Intellisense descriptions while programming the PSI by using the ProjectServerServices.xml file from the SDK download. WCFLogon_MultiAuth is a complete solution that implements the Using Claims Multi-Authentication discussion in the Prerequisites for WCF-Based Code Samples article.

    The ASMXLogon_MultiAuth and WCFLogon_MultiAuth solutions are useful to compare the differences in developing a basic application with ASMX web services and WCF services for the PSI -- as well as to learn how to handle Project Server installations that use both Windows and Forms authentication.

  • Project Programmability and Business Intelligence

    Using the Ribbon Designer with Project Client

    • 1 Comments

    Hey,

    In this post, I will be showing how you can use the Ribbon designer in Visual Studio 2010 to create custom ribbons in Project Client 2010. To get started, you will need a copy of Visual 2010 with the Office Tools installed and Project Client 2010 installed.

    1. To get started, open Visual Studio and create a new Project 2010 add-in:

      image
    2. Next, you need to add the Ribbon Designer by adding a user control to you project:

      image image
    3. In the Ribbon Designer, add the controls you want to include on your ribbon. In my example, I am going to add a simple button, which when clicked, will display a message box with the name of the active project:

      image 
    4. Double click on the button to view the code for the ribbon. Here, we are going to add a reference to the Project interop assembly and a static variable that will reference the application:     

      Code Snippet
      1. using System;
      2. using System.Collections.Generic;
      3. using System.Linq;
      4. using System.Text;
      5. using Microsoft.Office.Tools.Ribbon;
      6.  
      7.  
      8. using MSProject = Microsoft.Office.Interop.MSProject;
      9.  
      10. namespace ProjectAddIn2
      11. {
      12.  
      13.     public partial class Ribbon1
      14.     {
      15.         public static MSProject.Application Appliction;
      16.  
      17.         private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
      18.         {
      19.  
      20.         }
      21.     }
      22. }


    5. The next step is to set the Application variable in the start up method of the add-in:

      Code Snippet
      1. using System;
      2. using System.Collections.Generic;
      3. using System.Linq;
      4. using System.Text;
      5. using System.Xml.Linq;
      6. using MSProject = Microsoft.Office.Interop.MSProject;
      7. using Office = Microsoft.Office.Core;
      8.  
      9. namespace ProjectAddIn2
      10. {
      11.     public partial class ThisAddIn
      12.     {
      13.         private void ThisAddIn_Startup(object sender, System.EventArgs e)
      14.         {
      15.             Ribbon1.Appliction = Application;
      16.         }
      17.  
      18.         private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
      19.         {
      20.         }
      21.  
      22.         #region VSTO generated code
      23.  
      24.         /// <summary>
      25.         /// Required method for Designer support - do not modify
      26.         /// the contents of this method with the code editor.
      27.         /// </summary>
      28.         private void InternalStartup()
      29.         {
      30.             this.Startup += new System.EventHandler(ThisAddIn_Startup);
      31.             this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
      32.         }
      33.         
      34.         #endregion
      35.     }
      36. }


    6. Last step is to add a message box that displays the name of the project:

      Code Snippet
      1. using System;
      2. using System.Collections.Generic;
      3. using System.Linq;
      4. using System.Text;
      5. using Microsoft.Office.Tools.Ribbon;
      6.  
      7.  
      8. using MSProject = Microsoft.Office.Interop.MSProject;
      9. using System.Windows.Forms;
      10.  
      11. namespace ProjectAddIn2
      12. {
      13.  
      14.     public partial class Ribbon1
      15.     {
      16.         public static MSProject.Application Appliction;
      17.  
      18.         private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
      19.         {
      20.  
      21.         }
      22.  
      23.         private void button1_Click(object sender, RibbonControlEventArgs e)
      24.         {
      25.             MessageBox.Show("Active Project: " + Appliction.ActiveProject.Name);
      26.         }
      27.     }
      28. }

    When you compile and run the application, you should see Project client boot and have the ribbon appear:

    image

    Hope this helps,

     

    Chris Boyd

  • Project Programmability and Business Intelligence

    Microsoft Project 2010 on TechED North America

    • 1 Comments

    You may have seen Christophe's post on the Project 2010 Presence on TechED 2010. If you plan to attend, please mark your calendar with the following Project 2010 sessions!

    BIO10-INT | Light Up Your Project and Portfolio Management with Powerful Dashboards

    • Session Type: Interactive Session
    • Track: BI: Improve Organizational Effectiveness
    • Speaker(s): Jan Kalis
    • Level: 200 - Intermediate

    This session demonstrates how to build dashboards that span from individual project managers to company executives that show project and portfolio status and details in rich and interactive way to guide in the decision-making process. The session focuses on Microsoft products and solutions reaching from individual project management products to company-wide solutions. We demonstrate use of Microsoft Project Professional 2010, Microsoft Project Server 2010 and Microsoft SharePoint Server 2010 - especially its rich Business Intelligence tools (including Excel Services, PerformancePoint Services and Visio Services) to achieve the above declared goal.

    OSP03-INT | Customizing Microsoft Project 2010

    • Session Type: Interactive Session
    • Track: Office & SharePoint
    • Speaker(s): Jan Kalis
    • Level: 300 - Advanced

    This session provides an overview of the new customization/extensibility capabilities of Microsoft Project 2010. Using real examples, we demonstrate how to develop a custom project initiation process, to extend Project Web Access, and much more!

    OSP11-INT | Microsoft Project 2010 Frequently Asked Questions

    • Session Type: Interactive Session
    • Track: Office & SharePoint
    • Speaker(s): Christophe Fiessinger, Jan Kalis
    • Level: 200 - Intermediate

    In this interactive session, come to hear answers to frequently asked questions from customers and partners about Microsoft Project and Project Server 2010. Specific areas of coverage include the four key investments of Microsoft Project 2010: Unified Project and Portfolio Management, Simple and Intuitive User Experience, Enhanced Collaboration and Reporting, Scalable and Connected Platform. We keep the session open for discussion, walk through some demos and discuss any IT professional related topics.

    OSP209 | Microsoft Project and Project Server 2010 Overview 

    • Session Type: Breakout Session
    • Track: Office & SharePoint
    • Speaker(s): Christophe Fiessinger, Jan Kalis
    • Level: 200 - Intermediate

    This session provides an overview of the key investment areas and capabilities of Project Server 2010 and Project Professional 2010, including demand management, portfolio analysis, time tracking, business intelligence/reporting, and other better together capabilities, by being built of top of SharePoint 2010 Enterprise features.

    OSP303 | Deploying and Upgrading to Microsoft Project Server 2010

    • Session Type: Breakout Session
    • Track: Office & SharePoint
    • Speaker(s): Christophe Fiessinger, Rolly Perreaux
    • Level: 300 - Advanced

    This session provides an overview on how to deploy a Project Server 2010 Farm. Specific topics discussed includes upgrading and migrating from prior version (2007 and 2003), how to architect and configure Project Server within the context of a SharePoint Server 2010 Farm, capacity planning, and more.

    TLC-83 | Microsoft Project 2010

    • Session Type: TLC Demo Station
    • Track: Office & SharePoint
    • Level: 200 - Intermediate

    Being called the most significant release for Project in over a decade, Project 2010 delivers flexible work management solutions for individuals, teams and the enterprise. It provides the right collaboration tools for occasional and professional project managers and a pathway to more advanced project and portfolio management capabilities of Project Server 2010. Project 2010 can be used to effectively manage all types of work—from simple tasks to complex projects and programs.

     

    See you Monday!

  • Project Programmability and Business Intelligence

    VBA Help: Use the Local, Offline VBA Help File

    • 1 Comments

    The online VBA Help for Project 2010 (and other Office 2010 products) is not published yet to Office.com -- it has many missing members and topics. When you install the RTM release of Project Standard 2010 or Project Professional 2010, the local VBA Help file ([Program Files]\Microsoft Office\Office14\1033\WINPROJ.DEV.HXS) is installed just fine, but the default Project Help window uses the content on Office.com.

    Until the publication issue is corrected, to see all of the topics in VBA Help, right-click the Connection Status drop-down list in the bottom right corner of the Project Help window, and then click Show content only from this computer

    You can also update the local VBA Help file; see the Project 2010 SDK download.

    --Jim

  • Project Programmability and Business Intelligence

    Technical Resources on Workflow/Demand Management in Project Server 2010

    • 1 Comments

    Introduction

    This blog entry is designed to try and capture all of the different pieces of information that exists right now regarding workflows in Project Server 2010.  Based on the feedback we are in process of creating a dedicated “Demand Management” resource center on Microsoft TechNet that will became the “one-stop” shop for all your technical and developer resources for Demand Management, including Workflows in Project 2010.

    Technet

    Demand Management in Project Server 2010

    http://technet.microsoft.com/en-us/projectserver/ff899331.aspx

    SDK

    Developing Project Server Workflows:

    http://msdn.microsoft.com/en-us/library/ee767694(v=office.14).aspx

    Out of the Box Sample Workflow Source Code:

    Download the SDK: http://www.microsoft.com/downloads/details.aspx?FamilyID=46007f25-b44e-4aa6-80ff-9c0e75835ad9&displaylang=en and find the source code in the “Samples\Workflow\SampleProposal2” directory

    Sharepoint Office Task Class:

    http://msdn.microsoft.com/en-us/library/microsoft.office.workflow.actions.officetask.aspx

    Using InfoPath Forms in a Workflow:

    http://msdn.microsoft.com/en-us/library/ms573938(v=office.14).aspx

    Blogs:

    Introduction to Demand Management:

    http://blogs.msdn.com/b/project/archive/2009/11/13/project-2010-introducing-demand-management.aspx

    End User level Walkthrough of the Out of the Box Sample Workflow:

    http://blogs.msdn.com/b/project/archive/2010/03/19/video-walkthrough-of-the-out-of-the-box-sample-proposal-workflow.aspx

    How to use the Skip to Stage Feature:

    http://blogs.msdn.com/b/project_programmability/archive/2010/02/10/how-to-use-the-skip-to-stage-feature-in-project-server-2010-workflows.aspx

    Debugging a Project Server Workflow in Visual Studio 2010

    http://blogs.msdn.com/b/project_programmability/archive/2010/07/15/debugging-a-project-server-workflow-in-visual-studio-2010.aspx

    Solution Starters (Open Source Solution Starters)

     Microsoft Project 2010 Solution Starters

    http://code.msdn.microsoft.com/P2010SolutionStarter

    Recorded Videos:

    Demand Management Overview:

    http://www.microsoft.com/showcase/en/US/details/31184ff3-f797-4647-985f-4ccd873d71fb

    Workflow Deep Dive:

    http://www.microsoft.com/showcase/en/US/details/34f2e816-bec5-4a5a-a7f8-b356dac292fc

    Webcasts:

    Demand Management Overview:

    Part 1:

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=13490

    Part 2:

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=13493

    Part 3:

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=13491

    Part 4:

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=13492

    Workflow Deep Dive:

    Part 1:

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=13332

    Part 2:

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=13333

    Tailored Tools for Workflow Creation:

    http://www.microsoft.com/events/series/epm.aspx?tab=Webcasts&seriesid=51&webcastid=13337

    Project Forum:

    http://social.msdn.microsoft.com/Forums/en-US/category/projectserver2010,projectprofessional2010/

    Project Server 2010 Demonstration Virtual Machine Image Download:

    http://www.microsoft.com/downloads/details.aspx?FamilyID=f48eacb9-6ea7-4aca-bc10-d3677ef81a9d&displaylang=en

    Hitchhiker’s Guide to Demand Management (white paper)

    http://technet.microsoft.com/en-us/library/ff973112.aspx

Page 3 of 11 (255 items) 12345»