What I Did For My Summer Vacation

(Taking a short break from the technical this week….Never fear, more Project fun is on its way.)

My family, like many mixed international families, represents a unique combination of cultures, both inherited and acquired.  As a result, every couple of years, we like to throw the kids on a plane and take them back to Mongolia to see their maternal grandparents. 

Since 1) there’s no direct flight from the US to Ulaanbaatar and 2) it’s probably a bit optimistic to expect two kids to travel for 24 hours, have a 12 hour jet lag, and still be on their best behavior in a high pressure family environment, we typically spend a couple of days in Beijing en route.  That’s where my wife and I lived off and on from 1994 through 2003.


As usual, Beijing represents a combination of the new and the familiar old.  We now can zip around under the city in air conditioned comfort, but the subway station map still displays a collection of the same places that we knew and loved back in the day.  The latest musical trend is still straight outta’ Kashgar, only now it’s more experimental, and less flamenco-influenced.  The old Chinese taxis may have been replaced with domestically produced Hyundais, but Beijing cab drivers are still the same cab drivers at whose side thousands of foreign students have learned that impenetrable Beijing accent…

The Summer Palace still looks the same as it always has, although this was the first time I’ve ever actually rented a paddle boat and headed out into the lake behind it.


I was quite  pleased to have the opportunity to finally meet Liu Dashuang, Beijing-based Project MVP.  Good to see Project Server and project governance going strong in the Chinese market.


…and after a couple of days of old-fashioned Chinese hospitality and some polishing of my rusty Beijing accent, we hopped a Air China flight north to Ulaanbaatar, Mongolia.

Mongolia (UB & Kharkhorin)

Ulaanbaatar as well was a mix of the old and new.  There were still many of the landmarks I remember from the late 90s – mixed with a major construction boom and a flood of Korean cultural influence as thousands of Mongolian workers move back and forth between UB and South Korea.


The old Soviet jeeps appear to be a thing of the past, replaced by a wide mix of automobiles representing the wide reach of the Mongol diaspora across South Korea, Japan and Europe.  Luckily, I was still able to find some of the old buses I remember taking back and forth from UB to the steppes.


UB boasts a brand new privately funded monument to the great man himself…


…but Gandan Monastery was pretty much still as I remember it.



…and this time, we were even able to take the kids out to the countryside to show them a bit of my old life in Ovorkhangai.  We headed to Kharkhorin, the home of Erdene Zuu, Ogedei’s old capital city.


There, we stayed in a ger camp:


..where I kept waxing nostalgic for the small ger I lived in for two years in the late 90s.  Here’s the view from the back of the camp….



I was glad to see that my countryside skills hadn’t atrophied, namely the skill to make a fire and the stomach to drink copious amounts of airag, or fermented mare’s milk.


I was especially pleased to be able to introduce my kids to Narantsetseg, my old partner in crime, who not only took care of her three kids, extended family, and a small herd of animals – but also agreed to take on a fairly useless Peace Corps Volunteer with no real skills. 

Here, we stopped by her new English classroom.


Very glad to see that hundreds of Mongolian children are still being educated by her capable hands.

What I Did For My Summer Vacation

Passing Filter Parameters Through SharePoint URLs

Here’s a neat trick I figured out the other day.  It didn’t actually solve my problem, but I figured it was worth documenting in case it comes in handy in the future.  My goal was to add filter parameters to a URL so that it would automatically filter for specific elements.

This sort of technique could be used to point users or a page viewer webpart from a project workspace back to a centralized document repository, the likes of which I described in this post.

So first off, we need the URL of the list.  Since I have the Contoso demo environment open, I’ll just use the sample report library in the BI Center.



Now let’s filter on all items where Modified By = Marc Soester.  We need to identify how the system is referring to the Modified By field.  To do this, click on the Library tab, and select the Library Settings option.  Click on the Modified By field in the middle of the page.

That will yield a page that looks like this:


Take a look at the URL:


That last bit is what we’re looking for.  Internally, SharePoint refers to the Modified By field as the Editor field.

So now we take the original URL and add the following string:

?&FilterField1=Editor&FilterValue1=Marc%20Soester …to yield the following URL:


Click on that, and you get a filtered list:


Want to filter on two fields?  Use the following syntax:


…which will filter on all Visio Drawings (VDW) created by the System Account.


Passing Filter Parameters Through SharePoint URLs

Identifying Resource Calendar Exceptions with Project Professional

I delivered a Microsoft Project Professional tips and tricks session a while back, and that may have gotten me thinking about other tricks that I’ve got buried deep in the recesses of presentation topics folder.

This post addresses a question that appears on the Project newsgroup every now and then, i.e. how does the project manager get an easy to use overview of all calendar exceptions for resources assigned to a project.  This technique is applicable to any version of Microsoft Project that I’ve ever worked with – and works equally well with standalone or enterprise files.

First, let’s take a look at how you find and set the calendar exceptions.  Navigate to the resource sheet….


…double click on a resource and select the option to Change Working Time.  This will display the exception screen.


That may be difficult to do for each of the resources in a project schedule – especially because in a Server environment, the Admin may be adding exceptions to the resource pool and neglecting to notify us.  We need a method to generate a single list of all exceptions.

The solution is quite easy.  Simply go to the Project tab and click on the Reports button.


Pick one of the Assignment reports and click on the Edit button.


In the Details dialog box, add the Resource calendar data.  Click OK and then select the report.


…and you have a handy report listing all calendar exceptions:


Identifying Resource Calendar Exceptions with Project Professional

Applying Security to a PDP Redux

A couple of weeks ago, I thought I’d figured out how to apply security to a PDP page and documented it in a post here.  Well, it turns out I was wrong.  A reader pointed out that she’d tried the same thing – which appeared to work fine when logged in as an Admin, but not as a PM.

That solution may still work in some limited scenarios – specifically where the role with the diminished permissions has the ability to review a project, but not edit or save it.  If the role with the diminished permissions needs to edit the project, then that solution will throw a “Value does not fall within the expected range” error on check-in.

Melodie also pointed out a better method to accomplish the same thing.  This blog post is intended to document that solution.  Thank you very much to Melodie for contributing to the community.

Essentially, we’re going to leverage the SharePoint personalization functionality.  This feature is turned on by default and allows each user to create their own personal view of a page.  In this case, we will need to log in as the user and create personalized views of the required PDPs.

Follow these steps to personalize the page:

1) Log in as the user.  You’ll probably need them to log you in and sit next to you while you do this.

2) Select the option to Personalize this Page from the menu in the top right.


3) Add Webparts to the page and configure appropriately.  Click on Stop Editing to, well, stop editing.


And now this is what the page looks like for the administrator.


When logging in as someone else, this is what I see.


Still a bit hard to administer but not bad for specific scenarios.

Applying Security to a PDP Redux

PMI Houston Follow Up

Thanks to everyone for attending my two presentations today at Houston’s George R. Brown Convention Center.  As discussed, please find the relevant links below:

1) Portfolio Management with Project Server 2010 – the presentation was based on a white paper I wrote which includes all of the content as well as much more detail.  You can find it here: http://technet.microsoft.com/en-us/library/gg715564.aspx.

2) Best Practices in EPM Tool Deployment – PDF of the slide deck is available here.

Feel free to ping me with follow up questions or to continue the discussion in the comments section of this post.

PMI Houston Follow Up

Project Server 2010 Database Restore (Part II)

My last post provided an overview of the available options to move PWA from one farm to another.  In this post, I will walk through in more detail how to use the five database restore method to migrate a PWA instance from one farm to another.

First off, a disclaimer….if you plan to use this in a production environment, stop right now and look at using the Central Admin backup/restore method instead.  In my opinion, that gives you a much better fidelity reproduction of your source environment.

If you’re only looking to move data to a virtual environment to provide a proof of concept or a demonstration environment….or if for some reason your other disaster recovery techniques have failed and all you have are the five databases to rebuild your environment, then continue reading.

You should also make sure to read Brian Smith’s blog post on caveats with this approach.  This may give you a heads up on potential issues you may face.  Once you’ve done that, feel free to proceed.

So the challenge I set before myself was to pull the five databases from the Contoso demo image and restore the full PWA instance to a target environment that I had built myself.  The target environment was a slightly higher patch level.

1) Backup your source databases.

Open SQL Server Management Studio and identify the five required databases (Archive, Draft, Published, Reporting and Content):


Right click on the source databases, and select Tasks > Backup. 


Save the files in a place you will be able to find them again.


Afterwards, you should have all of the databases in one location.


2) Restore the databases to the target environment.

Open SQL Server Management Studio in the target environment, right click on the Databases heading, and choose the option to restore the database.


Choose a new name for the restored database.  In this case, I enter the name “PWA_Contoso_Archive.”  Select the option to restore from a device, specifically the location where you have stored the source data.


3) Create a new Web Application.

In my target environment, I already have a PWA site created at http://demo/pwa.  Hence, I need to create a second Web App to host the restored PWA.  In this case, I will create a second Web Application at http://demo:81 and then I will put my new PWA at http://demo:81/pwa.


Note that creating the new Web App creates a new content database to contain the Web Application data.

As a best practice, you should always create a site collection at the root of the Web App.  If you don’t you’ll run into issues when saving from Office applications or publishing forms from InfoPath.

4) Attach the restored content database to the new Web App.

Follow the instructions here to restore the content database to the new Web App.  Kind of feels good to use STSADM again, I must admit.  Thankfully, this is the closest I’ll ever get to being a developer.


5) Provision a new PWA site.

When provisioning the site, ensure two things:


6) Validate the new site.

At this point, you’ll want to take a tour of your new PWA site to ensure that all of the data transferred.


Navigate to the Project Center and click on a project to ensure the PDP page appears.


Next, click on the Server Settings and review the Project Sites.


Observe that all of the sites appear to be properly linked.

Finally, navigate to one of the project workspaces and click around to ensure everything works.

I noticed that adding a new issue or risk doesn’t seem to work immediately.  Clicking on the link to add a new item yields an error.


To fix this error, simply click on the InfoPath Form option on the list ribbon, and then republish the form.  The list will now work.


….and there you are, a restored PWA site using the five database backup/restore method.

Project Server 2010 Database Restore (Part II)

Project Server 2010 Database Restore (Part I)

It’s disaster recovery week here at Project Epistemology.  In this episode, I set my sights on the various techniques available to either restore or migrate Project Server to a new farm.  My next post will discuss how to use the elusive five database restore method to move PWA from one farm to another.

As Project Server 2007 aficionados may fondly remember, the four database restore technique was a mainstay of  troubleshooting and demo environments.  Essentially, the process was to backup the four main SQL databases from the source environment, restore them to the target environment, and then create a new PWA site using the restored databases.  This replicated the source environment into a virtual environment and allowed for remote troubleshooting or the development of proof of concept solutions.

In Project Server 2010, the four database solution only gets you so far.  As the Project Detail Pages are stored in the content database, you need all five databases to capture a full PWA instance:

  1. Archive
  2. Draft
  3. Published
  4. Reporting
  5. Content

As it would be, the other day I was looking into options to refresh a training environment, and I figured the five database restore would be simple and easy.  I went online and looked through all of the TechNet articles, and couldn’t find a simple, concise summary of how to move PWA from one farm to another using the five database restore solution (which is perhaps more a statement on my ability to search and/or comprehend online material than on the available content).  There are a number of posts that address similar topics, but most discuss how to migrate a 2007 instance to 2010 using the database detach/reattach method.

This posting is similar, but is written specifically to move one Project Server 2010 PWA instance from one farm to another using the database detach reattach method.

First a disclaimer…I will gladly defer to any actual SharePoint or Project Server DR experts who may point out specific steps in this process that are not required or irrelevant.  All I can say is that these steps worked for me in a virtual environment, and that’s good enough for me.  Feel free to add any and all feedback at the bottom of this post.

Solution Overview

First off, let’s look at the available solutions for moving PWA:

Central Admin Farm Backup/Restore – this is the method that I would definitely advocate if you’re trying to create a high fidelity environment that corresponds closely to your source environment.  This solution is well documented on TechNet: http://technet.microsoft.com/en-us/library/dd207307.aspx

In 2007 however, I often had issues with this solution when trying to replicate client data to virtual environments for troubleshooting purposes as the restore would often fail if the virtual environments weren’t patched to exactly the same level as the source environment.  If moving from PROD to DEV in a corporate environment, patches should be the same however.

Four Database Restore – This is another popular method that worked fine in 2007 and has certain limitations in 2010.  In the four database restore method, the key PWA SQL databases are restored to the target environment and then used to provision a new PWA site.  Doing so in 2010 will restore project data, but will not restore the Project Detail Pages.  Clicking on a project in the Project Center will yield an error message and send the user back to the Project Center.

Still, the four database restore method is a quick and easy way to get data into a virtual environment and is perfectly adequate to do troubleshooting on such things as security or timesheet data.  This may be my own opinion, but I’ve found this method to be more fault tolerant than the Central Admin method, i.e. it seems to work better when restoring databases across SharePoint patch levels.

Here’s the rough process:

  1. Backup the SQL databases from the source environment.
  2. Restore the SQL databases to the target environment.
  3. Provision a new PWA site in the target environment using the restored databases.

Five Database Restore – …and that brings us to the five database restore.  This restores the entire PWA instance to the target environment.  It’s a little work, but not that much harder than the four database restore method.

Here’s the rough process for the five database restore:

  1. Backup the SQL databases from the source environment.
  2. Restore the SQL databases to the target environment.
  3. Create a new Web Application if one does not exist already.  You need to provision the new PWA site with the same URL as the old one, so if your source URL was http://source/PWA then you need to provision this to a Web App using the PWA address.  You may use something like http://target/PWA or even http://target:81/PWA, but it helps to use a Web App that doesn’t already have a PWA site provisioned already as that may have already used the default PWA URL.
  4. Use STSADM (or whatever tool you’d like) to add the content database to your new Web App.
  5. Provision a new PWA site with the same URL and databases that you restored.
  6. Review the sites to ensure that all of the data has transferred over properly.

Next up….I walk you through the five database restore process.

Project Server 2010 Database Restore (Part I)

Testing User Roles with Delegation

Delegation in Project Server 2010 is one of those features that I’ve been vaguely exposed to but have never really played with in detail.  I always felt that the feature was designed for one user to cover for another user – a nice idea, but a function that I never saw a major need for (although my supported user base is starting to convince me otherwise).

Lately though I‘ve seen the feature mentioned in a different perspective – as an administrative aid.  Those discussions were percolating in the back of my head until a client asked me how they could test specific security and views from various perspectives.  That’s when delegation finally clicked for me.  I played with it, and yes indeed, delegation is a fantastic tool to test Project Server from multiple user roles.

This functionality doesn’t quite replace setting up a couple of dummy accounts to test with, which was the typical practice with the 2007 version of the tool.  As long as you stick with Project Server functionality, delegation’s pretty good.  Once you start testing BI Center or PDP security though, delegation won’t work, and you’ll have to go back to use dummy accounts.

I also must point out that this is not a very original posting.  In fact, when I started looking for documentation on this feature, I found this great one from Alex Burton dated way back in December 2009.  So consider this post to be the blog equivalent of the digital bump in the distribution list. 

This post may be a little different in that it’s written from the perspective of an administrator testing the system.  My goal is not to roll delegation out to everyone in the organization, but merely to turn on just enough of it to allow the administrator to become a delegate to anyone in the resource pool.

Security Settings

Heather O’Cull wrote a great write up of the security settings in her post from March 2010.  The key to turning on delegation is to turn on three of the four security toggles in the Project Web App Permissions:

  • Manage Resource Delegates – this toggle turns on the feature and allows you to use it.
  • Can Be Delegate – this allows you to become a delegate.
  • Manage My Resource Delegates – this allows you to assign yourself as the delegate for another user.


Last but not least, we have the fourth security setting…

  • Manage My Delegates – this security setting is not strictly required in this scenario as it allows you as administrator to assign someone else to be your delegate.  You could turn it on, but if we use the principle of least permissions, I would leave this one off.

Group Security Settings

Each of those security settings has a corresponding setting in the Global Permissions section of the User Group.  I would make sure that everyone but the Administrators group have these permissions checked off, i.e. a soft deny.  The Administrator should have all permissions checked to “allow.”


Note that the Administrator Group:My Organization Category also has a Manage Resource Delegate option that is on by default – but off by default for the other groups.

Testing Specific Roles

Once the security has been configured, you merely have to navigate to the Personal Settings option on the Quick Launch menu.


Once there, select the option to Manage Delegates.


Save the configuration.  When you wish to test the role, simply go back to Personal Settings and choose the option to Act as a Delegate.


You now see Project Server through the same perspective as the user selected in the delegation configuration screen.  Click on the yellow bar to stop the delegation process and return to your normal permission level.

Additional Resources

One of the other reasons that I wasn’t so keen on delegation when I was first introduced to it was that there didn’t appear to be much of an audit trail based on who was doing what on whose behalf.  When doing research for this post, I turned up on old posting from Christophe Fiessinger where he provided a tool to capture when delegation was turned on and for which users.

Migrating from 2007?  Check out Brian Smith’s blog on delegation in migrated environments

And finally, it’s all documented on Technet.

Testing User Roles with Delegation