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.
Note: For the updated article, see How to: Modify the Ribbon in PWA in the Project 2010 SDK. The attached PWA_Ribbon_Customization.zip file includes the complete Visual Studio 2010 solution.
The attached PWA_Ribbon_Customization.zip file includes an article that shows how to develop and deploy a SharePoint feature that adds a Close Project button to the Project Details page in Project Web App. You can add a second feature to the same solution that removes, modifies, and disables several buttons and other controls on the Timesheet page, when timesheets are in the single entry mode. The code in the article is based on code samples by Adrian Jenkins and Maria Kouvlaki, Microsoft Corporation.
The Object Link Provider (OLP) in Project Server 2010 enables the management of the Project-specific lists in a project site (issues, risks, deliverables, documents, and custom lists) and integration of the SharePoint lists with Project Server. The OLP has the same functionality as in Project Server 2007; however, you can use Windows Communication Foundation (WCF) to develop OLP solutions for Project Server 2010.
The attached code (OLP_Sample.zip) is a preview of an example that uses the CreateWebObjectLinks method, to be published in the next update of the Project 2010 SDK. Before you run the sample application, perform the following steps:
Use Project Professional 2010 to create and publish a project with at least one task.
Use Project Web App to open the project site.
Create at least one issue or risk in the Issues or Risks SharePoint list of the project site.
Change the OLP constructor values according to your example.
Add a web service reference to http://localhost/pwa/_vti_bin/Lists.asmx, and name the reference WebSvcLists.
This example performs the following tasks:
Verifies that the project, task, and project site exist and gets their corresponding GUIDs.
Links a task and a SharePoint list item (in this case, an Issue).
Links a task and a generic object.
Gets the list of SharePoint items that are linked to a task and writes the contents of the ObjectLinkProvider dataSet dsLinkedObjects to an XML file.
Gets a list of generic items that are linked to a task.
Deletes the links to web objects.
For more information about how the sample code works, see Procedures 1-6 in How to: Use the OLP to Link an Object to a Task.
We have published preliminary version of the Scrum Solution Starter for Project 2010 on MSDN Code gallery http://code.msdn.microsoft.com/P2010Scrum please participate actively in the Discussion to notify us about any issue you may encounter or post any feedback!
Scrum is an iterative, incremental methodology for project management often seen in agile software development. Although Scrum was intended for management of software development projects, it can be used to run software maintenance teams, or as a general project/program management approach. There are 3 main items in Scrum: Product backlog: A product backlog is dynamic—Items may be deleted or added at any time during the project. It is prioritized—Items with the highest priority are completed first. It is progressively refined—Lower priority items are intentionally course-grained. Sprint backlog: A sprint backlog is a negotiated set of items from the product backlog that a team commits to complete during the time box of a sprint. Items in the sprint backlog are broken into detailed tasks for the team members to complete. The team works collaboratively to complete the items in the sprint backlog, meeting each day (during a daily scrum) to share struggles and progress and update the sprint backlog and burn down chart accordingly. Burn down: The sprint burn down chart is a publicly displayed chart showing remaining work in the sprint backlog. Updated every day, it gives a simple view of the sprint progress. It also provides quick visualizations for reference
A Scrum Master wants to use Project for the basics of running a sprint, including:
The Visual Studio Team Foundation Server (TFS) group has released a beta version of the Feature Pack for integration of TFS 2010 with Project Server. The beta version is a “go live” release. If the user agrees to the pre-release license agreement, the Feature Pack can be installed and will be supported in a production environment. However, it is not the final release, and is still subject to change, so you should first test it in a non-production environment.
Note The TFS Feature Pack requires the Microsoft Visual Studio 2010 Ultimate edition, SP1, and TFS 2010 SP1. It can work with either Project Server 2010 or Project Server 2007.
For an article in the Project team blog, see Announcing Visual Studio Team Foundation Server 2010 and Project Server Integration Feature Pack Beta.
For an article that describes the major features, benefits, and installation of the TFS-PS Feature Pack, see Brian Harry’s blog: Portfolio Management: TFS <-> Project Server Integration in Beta.
If you have worked with TFS, you know what a great advantage that is for large development projects – and even for small ones. You already know what an amazing tool Project Server is. The TFS-PS Feature Pack brings together the two best-in-the-world tools for team collaboration on development projects, and enables development-focused and project-focused people to keep working with the tool they know best and to truly combine forces.
See Announcing Visual Studio 2010 Service Pack 1 Beta for a download link. General availability will be Thursday, Dec. 9.
Microsoft Office Project Server 2007 and Microsoft Project Server 2010 internally manage cache synchronization by tracking revisions to major entities such as projects and maintaining records for deletions of those entities. Although the Draft, Published, and Archive databases in Project Server are not documented, and direct access to those databases is not supported, a basic understanding of cache synchronization in Project Server can be useful in determining issues of performance optimization. (This article was written by Patrick Conlan, Microsoft Corporation.)
Warning: The information in this article is applies only to the specified versions of Project Server, and is subject to change without notice.
In Project Server 2007, we made a series of changes that were designed to improve the scalability and reliability of Project Server, especially when it is under usage stress. One of the most significant changes was the introduction of several caches, specifically:
The location of the master copy of data varies by content. Projects use the Draft database; most other data uses the Published database.
The caches are synchronized during data movement operations such as the following:
We use a fairly complicated versioning scheme to work out what data needs to move as part of the synchronization. Some of you may have already worked out some of the versioning processes!
Depending on the number of project managers who use Project Professional within an organization, there can be hundreds or even thousands of caches - one on every Project Professional desktop plus the caches in the SQL Server databases. Depending on when they were last synchronized, the caches can contain different versions of project entities.
Each entity has a primary table that controls the entity version number. For example, MSP_Projects is the primary table for projects. When an entity is created and each time the entity is saved, Project Server uses the entity version to aggregate the edit session changes.
Version Tracking Schema
The following schema fragment from the MSP_Projects table shows the fields that are used to track changes at the project level:
[REV_NEXT_SEED], [REV_RANK], [PROJ_CURRENT_REV_COUNTER], [PROJ_CURRENT_REV_RANK], [CREATED_REV_COUNTER], [MOD_REV_COUNTER]
The REV_RANK and PROJ_CURRENT_REV_RANK fields are used to signal an archive restore. If synchronization shows a disparity of rank between caches, then Project Server performs a full resynchronization (in effect resetting the REV_RANK field with a revision = 0)
The REV_NEXT_SEED field contains the next version number to be used for any changes. The PROJ_CURRENT_REV_COUNTER and MOD_REV_COUNTER contain the active version number. There are two numbers to enable us to see when the document was lasted edited by Project Professional or by another application.
The CREATED_REV_COUNTER field is either 1 or 0, depending on how the project was created. When Project Professional creates a project, CREATED_REV_COUNTER = 1.
We had two options for handling deletes in the cache coherency model:
Flagging would give better short term performance (less impact on SQL Server), but would quickly cause data bloat within the most important tables. We decided to use the second option of deleting the data and creating a record of the deletion.
We use shadow tables to record delete operations for tables that are in the cache synchronization scheme. Shadow tables are very narrow tables that contain the minimum data needed to track deletes. Project Server updates the shadow tables when major entities are deleted.
The following schema is for the project shadow table, MSP_PROJECTS_SHADOW.
[PROJ_UID] [dbo].[UID] NOT NULL, [DELETED_REV_COUNTER] [int] NOT NULL, [DELETED_DATE] [datetime] NOT NULL
When a project is deleted, it uses just 28 bytes of data in a row of the MSP_PROJECTS_SHADOW table (16 bytes for the GUID + 4 bytes for the INT + 8 bytes for the DATETIME value), plus normal SQL Server page overhead.
Administrators of Project Server installations that have a lot of data churn should maintain an active archive and delete policy to take advantage of the shadow tables and improve performance.
Because Project Server 2010 is deeply integrated with Microsoft SharePoint Server 2010, SharePoint is a key part of development for Project Server. The new SharePoint Developer Team Blog combines many SharePoint-related blogs into one. To subscribe, the URL is easy to remember: