What’s in a Blog Name?

You may have never noticed, but if you look up in the top left of the screen you’re reading this on, you’ll probably see the title of this blog, Project Epistemology.  I really came up with that name because WordPress kind of insists on having a blog name and won’t let you create a blog without it.

So the question you may be asking yourself is ‘Why ‘Project Epistemology?’”  That’s being charitable I suppose – as a couple times now, I’ve had people misread that as “Project Episiotomy” – which I am sure would also be an interesting blog, but on a totally different topic.  (The conclusion there is that I probably should have included more women in my focus groups.)

Well, I figured it was probably time to take a break from writing about the technical to the more esoteric, and explain away the name of this blog so I can point to this post the next time someone asks me where the name came from.  

Epistemology, as you may know already, is the study of knowledge.  Specifically, it’s the study of how we know what we know.

As I’ve always seen it, epistemological stages map closely to the four stages of competence:

  • Unconscious Incompetence
  • Conscious Incompetence
  • Conscious Competence
  • Unconscious Competence

…often combined with the concept of known unknowns – a popular concept in project and risk management:

  • Unknown Unknowns
  • Known Unknowns
  • Known Knowns
  • Unknown Knowns

So how does that tie back to this blog….?  The goal of this blog as I see it is to help me identify the limits of my own knowledge.  Each time a customer or colleague asks me a question to which the response is “I don’t know” or “I’ll need to check on that,” I make a record of the topic.  That list of known unknowns, much like the library of unread books referenced in Taleb’s Black Swans, represents the topics that I know I don’t know, or the topics falling under the rubric of conscious incompetence.

That list may be derived from other sources as well…newsgroups, other blogs, discussions at user group meetings.  On a daily basis, users submit all sorts of fascinating questions to the newsgroups, to most of which my response is “I don’t know.”

In essence, I am leveraging customer and user interactions then to identify gaps in my own knowledge.  Then, when I have the time, I sit down and review that list of known unknowns, pick a likely one, do the research and generate a blog post.  Each blog post then represents a new check mark in the category of the known known or conscious competence category.

What’s in a Blog Name?

Configuring the TFS Connection

While configuring a proof of concept environment to demonstrate the TFS-Project Server integration the other day, I decided to take notes of my observations.  Those notes became a blog post – which you are now reading.  I am not sure exactly what the narrative is here, so for now, I guess we’ll just classify this under “Random Musings on the TFS-Project Server Integration Pack.”

First off, when creating a new PWA environment, I noticed that the process of mapping that PWA instance to TFS introduced six new Enterprise Custom Fields (ECF):

image

It would probably behoove an administrator to add these six fields to an enterprise view within the eGlobal. (hint, hint)

I also noticed that the mapping process created a couple of lookup tables.

image

I looked through those lookup tables, and they appeared to hold specific values used for the custom fields.  Nothing of too much interest.

After mapping the PWA instance to a new TFS collection, I went to upload the default field mapping.  Interestingly enough, the upload process kept failing with an error message of:

TFS 294026: The following work item field does not exist: Microsoft.VSTS.Scheduling.CompletedWork.  Contact your administrator for Team Foundation Server to add this work item field.

Once I actually created a team project within the TFS Collection, that error went away.  Moral of the story: ensure that you have at least one team project before uploading the default field set.  My guess is that this will only be an issue in demo environments as any existing environment would already have a team project created.

A couple of other things to note:

  • Mapping work item types will set the task to Fixed Work in Project unless that is overridden in the original mapping process.  This is actually pretty key, and worth noting.
  • If Team Explorer is open when the project is mapped to the team project, you’ll have to close Team Explorer before the Project Server tab will appear on the mapped work items.

The overall synopsis: developing the POC environment really wasn’t very hard at all, and although I ran into a couple of hiccups, they were mostly based on my own lack of familiarity with TFS and TFS terminology than anything technical.  So far, I am pretty pleased with the integration.

Configuring the TFS Connection

First Look: Project Server TFS Demo Image

Microsoft released the much awaited Project Server TFS demo image a couple of weeks ago, and I sat down this weekend to actually start working with it and getting some hands on experience.  This post is not necessarily meant as a highly technical article, but more a first response, archive of my notes, and hopefully provide some assistance to other folks working through the demo image.  If I can save someone else some time, great.

This post is specifically written for the demo image released on 4/20 and should not be construed as providing technical guidance for a production installation of the Project Server – TFS connector.  All command lines have been tested on the demo image and the demo image only.

Getting Acquainted With the Image

First off, you’ll want to get familiar with the user accounts that you’ll be using for the demo.  As near as I can tell, there are basically three:

  1. Administrator – Contoso\Administrator
  2. Lina Abola (PM) – Contoso\LinaA
  3. Peder Thode (DevMgr) – Contoso\PederT

Also note that the password on this image is different than the usual one used on other Contoso images.  For more information, you’ll have to download the image and see the accompanying support documentation.

Someone has thoughtfully included the ZoomIt presentation app on the C drive.  Great!

Getting Acquainted With the Admin Interface

After playing around with the scripts and trying out some of the scenarios, you’ll probably want to familiarize yourself with the command line interface – partly to look under the covers and partly to troubleshoot issues you may have found during the demo scenarios.

To access the command line, log into the environment as the administrator.  From the Start menu, select the Visual Studio Command Prompt.

image

The most useful command I found was the option to save the log file.  This helped tremendously in trying to troubleshoot why or when data was pushed back and forth from Project Server to TFS.  Tailored specifically to the demo environment configuration, the following command will yield the log file:

TFSAdmin ProjectServer /GetSyncMessages /Collection:http://tfspsdemo:8080/tfs/ >c:\output.xls

The output only includes errors, so if everything is working, you probably won’t see much in the file.  Copy and paste the text into the command prompt and you’ll get a raw Excel document. 

image

Add a table and some formatting, and you’ll get something like this:

image

…much easier to identify a specific project and why it may not be moving data back and forth.

The second command that I thought was helpful was the command to download the field mapping between Project Server and TFS.  Just to see what fields were indeed mapped, the following command did the trick:

TFSAdmin ProjectServer /DownloadFieldMappings /Collection:http://tfspsdemo:8080/tfs /FilePath:c:\fieldmappings.xml

Open with Excel and you get the following easy to read table:

image

Other Useful Commands

Here are some other commands tailored specifically for the demo image.  If you’re walking into a demo situation, you may want to have these copied into a text file and handy should you need them…

(For the full list of available commands, please see the MSDN article: http://msdn.microsoft.com/en-us/library/gg412656.aspx)

TFSAdmin ProjectServer /GetSyncMessages /Collection:http://tfspsdemo:8080/tfs/ >c:\output.xls

TFSAdmin ProjectServer /GetRegisteredPWA /tfs:http://tfspsdemo:8080/tfs

TFSAdmin ProjectServer /GetMappedCollections /tfs:http://tfspsdemo:8080/tfs

TFSAdmin ProjectServer /GetMappedProjects /Collection:http://tfspsdemo:8080/tfs

TFSAdmin ProjectServer /MapPlanToTeamProject /Collection:http://tfspsdemo:8080/tfs /EnterpriseProject:”Project Server Project Name” /TeamProject:”TFS Project Name”  (Only works after the project has been published in Project Server.)

TFSAdmin ProjectServer /GetMappedWorkItemTypes /Collection:http://tfspsdemo:8080/tfs /TeamProject:”TFS Project Name”

TFSAdmin ProjectServer /MapWorkItemTypes /Collection:http://tfspsdemo:8080/tfs /TeamProject:”TFS Project Name” /WorkItemTypes:”Type1,Type2″ (You’ll need to tailor the work item types to the options in the TFS template using that syntax.)

TFSAdmin ProjectServer /DownloadFieldMappings /Collection:http://tfspsdemo:8080/tfs /FilePath:c:\fieldmappings.xml

Project and Project Server Tweaks

I also ended up making the following tweaks to the demo environment:

  1. Change the time zone to something more local.  There’s nothing more distracting than looking at the displayed time during a demo and seeing it totally off – or maybe that’s just my OCD.
  2. If you plan to show how to create new Project Server projects, and map them to TFS, you’ll probably want to take the Team Foundation Gantt (Project Server) view out of one of the demo projects and copy it into the Enterprise Global.  Make sure to grab the corresponding table, and then to change the names slightly so you don’t get a conflict on opening the demo projects.  Finally, go into the view in eGlobal and confirm it’s pointed at the right table.
  3. Save and publish a project.  Watch the queue.  The queue seems to be stuck more often than not when I open up the image.  Restart the Event and Queue services and everything works fine.
  4. Set the site provisioning settings to manual.  That way, it won’t create a site every time you create a test project.
  5. Turn off the automatic Windows updates in the Control Panel.  I inadvertently left the network adapter connected after activating the image and found out about this one.  Windows Updates are set to download and install automatically – potentially kicking off a restart in the middle of a demo.  Set it to never check for updates.

And finally, for an optimal experience, if you plan to use Microsoft Project from your host machine to log into the Hyper V machine, make sure you have Team Explorer running, and the add-in active in Microsoft Project.  If that is absolutely impossible, you could get by with adding the Work Item Type (TFS) enterprise field to the default Microsoft Project view, but the experience is suboptimal – and it seems to break the functionality to roll up multiple resources from subtasks in TFS to tasks in Project Server.

Watch the log for errors along the line of “TF287005: An item that was changed does not contain a value for the work item type…” to see if that may be an issue.  It appears to relate to the fact that the same data should be in both the local Text30 field and the enterprise field – which can be done manually or automatically with the help of the Team Explorer add-in.

Other Random Interesting Things

A couple of other things that may explain observed behavior:

  1. Sync’d tasks become Fixed Work automatically unless the system is instructed otherwise.
  2. Exporting from Project to TFS sometimes seems to take a while.  If the data hasn’t been pushed over yet, check the logs.  If the logs are empty, then most likely everything is working, but you need to refresh the TFS query.
First Look: Project Server TFS Demo Image

Reporting with Gantt View Task Rollups (Part 3) – Using Group By Options

I figured I’d clean out my old queue of blog posts that I’d written but never published.  This particular post was half written when 2010 came out, and was sidelined while I soaked up all of the new product goodness.  I then borrowed parts of it for an MVP blog post and never got around to fixing it up.  Since I have a couple upcoming “Tips and Tricks” presentations coming up, I figured it was probably time to resurrect it.

This is Part Three in an ongoing series on rolling up the schedule to generate a single, 1 page report.  In this post, we’ll talk about roll up options with the Group By Summary feature.

The Group functionality is a powerful reporting tool which can be used when I desire to report on elements of my schedule that may not map precisely to elements in my WBS.  As an example, let’s say that I have developed my schedule based on a product-oriented WBS, but I wish to report on the progress of each phase.  I would then create a custom flag field to identify which phase specific tasks are in, and then Group By that field to develop an overall phase view.  Likewise, if I developed my original WBS as a phase-oriented approach (which I almost never would recommend), and want to map the schedule elements to specific products, I would employ a custom text field and the Group functionality.

Note that from my perspective, the schedule should always be structured to support your primary reporting needs – and coded to support any secondary reporting needs.

The Group By Summary feature is significantly more limited in functionality than the simple Roll Up field.  By default, only the Task bars can be summarized using the Group By Summary field.  If I want to roll up other key schedule components, like say Critical Path or baseline data, the Group By Summary will not roll up that data.

Luckily, there’s an obscure (but easy) workaround to that issue.  In the last several posts, I talked about how I never really like to check the options in the Layout screen to force a roll up of all tasks.  My preference is to selectively roll up items using the built in Roll Up field.  In this particular case, when I am rolling up data using the Grouping functionality – and I want to roll up baseline and Critical Path information, I would recommend turning those options on.

Here’s what the Format > Layout options look like by default:

image

And here’s what they should look like when rolling up schedule data to the Summary bars using the Group functionality.

image

So let’s see how those options affect the following schedule.

image 

You’ll see that I have assigned the tasks to two resources, Lkhagva and Dorj – both names that fall under the category of having been summarily rejected by my wife the last time we were in the market for baby names.  (Apparently the fact that they’re gender neutral was not a selling point).

Let’s take a look at how the rollup appears with those options off.

image

And now with those options on:

image

You’ll see in the above example that I have rolled up the Critical Path and the baseline data.  Typically, my clients may also ask for a rollup of the progress line as well.  You’ll note that in the second example, it’s relatively easy to eyeball the schedule to identify the critical path – and to identify which resources are on the critical path at any specific time.

The unfortunate byproduct of toggling on this feature is that now, everything is rolled up to the top level.  This may be ok for some users, but I usually feel the view is too cluttered, and wish to reduce the amount of clutter.  We can’t use the Roll Up field to remove items from the summary bars, as we have just overridden the use of that field.  You’ll see that if you toggle that field to No, the item does not get removed from the Rolled Up view.

In this case, I have found it helpful to create a new custom flag field to serve the same function – basically a Roll Up field for Grouped projects.   So I add a custom flag field to the project.  For this purpose, I will be using the Flag1 field.

image

Once adding that to my view, I go through the Bar Styles to add the Flag1 field as criteria for displaying.

image

Which now enables me to toggle the elements for display using the Flag1 field.  In the following example, I have toggled off everything but the Critical Path activities.

image

Reporting with Gantt View Task Rollups (Part 3) – Using Group By Options

Reporting with Gantt View Task Rollups (Part 2) – Milestone Reporting

I figured I’d clean out my old queue of blog posts that I’d written but never published.  This particular post was half written when 2010 came out, and was sidelined while I soaked up all of the new product goodness.  I then borrowed parts of it for an MVP blog post and never got around to fixing it up.  Since I have a couple upcoming “Tips and Tricks” presentations coming up, I figured it was probably time to resurrect it.

Continuing on in our series on rolling up project data to a single page summary, this post talks about how to roll milestones up to a single summary view.  Note that the Rollup component of this discussion may not be as relevant to the Project 2010 users – as they have access to the Timeline view, which pretty much serves the same purpose.  That’s not to say that the instructions below will not apply to Project 2010, only that there’s an easier way to accomplish the same thing. 

For a look at how to roll up Gantt Bars, take a look at yesterday’s post.

Rolling Milestones Up

Three elements are required to manage the data rollup feature:

1) Format > Layout > Uncheck the first two options.  We’ll talk about how to use this feature in a future post.  For now, I generally recommend turning it off, as it negates the ability to toggle rollups on or off using the default Rollup field.

image

2) Summary Task Level Rollup Field – Setting this to No will turn off all rollup functionality for this specific summary task.  This should be turned on for any summary task intended to be displayed as a rollup task in the Gantt Chart.

image

3) Task Level Rollup Field – Setting this field to Yes will rollup the task to any summary task that also has the Rollup field set to Yes.  If the summary task has Rollup set to No,  this field will not have any impact.

image

For a better description (with screen shots) of the impact of these fields, please refer back to the last post on rolling up Gantt bars.

In the following example, we have a simple project schedule.  I have a number of tasks and a number of key milestones.

image

My goal is to surface the milestones all on a single line.  To do this, I expose the built-in Rollup field, and toggle the summary task and the target milestones to yes.  This selectively rolls up the project milestones.

 image

When collapsing the summary bar, I get a view like this.  Note that one of the major challenges with attempting this approach prior to 2010 is that the text labels often run all over each other.  Additionally, the summary bar somewhat obscures our view of the project. 

image

Both issues are easy to fix.  To correct the text placement, I have two options.  I can opt to create a custom flag field, and tie it to a specific line in the Bar Styles dialog box, thus allowing me to toggle text position through the use of a custom field – or if it’s just a one-off formatting change, I can simply doubleclick on the milestone in question and modify the text placement.  Generally my preference is to use custom fields, as that allows programmatic changes of formatting in the future.  By clicking on the item and changing it, we’re creating a new, separate style just for that one item, which we may not want in the future.  Note that you can also use custom fields to toggle the milestone into a second row to avoid overcrowding the main swimlane.

In this case, however, to keep things simple, we’ll just click on the Project Started milestone, select the Bar Text tab, and move the name from the top to the bottom.

image

Now to remove the Summary bar.

image

Doubleclick on the Gantt Chart to get the Bar Styles dialog box.  Add the “Not Rolled Up” criteria to the Summary bar.

image

And the results are as follows.

image

So why use this instead of the Timeline View in 2010?  In 2010, the Timeline View doesn’t display baseline or progress.  You can’t control which text fields are connected to the milestone in the Timeline View.  With this setup, all of those custom elements may be displayed, yielding a much richer experience.

Reporting with Gantt View Task Rollups (Part 2) – Milestone Reporting

Reporting With Gantt View Task Rollups (Part 1) – Rolling Up Gantt Bar Charts

I figured I’d clean out my old queue of blog posts that I’d written but never published. This particular post was half written when 2010 came out, and was sidelined while I soaked up all of the new product goodness. I then borrowed parts of it for an MVP blog post and never got around to fixing it up. Since I have a couple upcoming “Tips and Tricks” presentations coming up, I figured it was probably time to resurrect it.

Hence, this post marks the beginning of a multipart series on developing rollup views within the Microsoft Project desktop client. Note that the screenshots are mostly from the 2007 version, but that everything should apply pretty much the same to 2010. I guess at this point, that may engender some points purely for nostalgia.

***

This post focuses on using built-in functionality that a lot of people are not familiar with. In this case, our goal is to generate a simple, 1 page report of an active project using Microsoft Project’s Rollup and Group features. Note that the Rollup component of this discussion may not be as relevant to the Project 2010 users – as they have access to the Timeline view, which pretty much serves the same purpose (albeit with some limitations). That’s not to say that the instructions below will not apply to Project 2010, only that there’s an easier way to accomplish the same thing. The Group section of this post is still definitely relevant to Project 2010.

Understanding Out of the Box Views

Microsoft Project contains a number of Rollup Views out of the box. Few users in my experience have ever used these views, but they’re still there. The 2007 version even included the Rollup_Formatting Macro, which is one of those items that didn’t quite make the transfer to the 2010 product. (For instructions on how to bring it over to 2010, please see Dale Howard’s post on the topic.)

The macro actually performs/performed (depending on which version you’re using) some interesting functions:

  • It removed any custom bar styles applied to the view.
  • Toggled how the bars show up within the view (i.e. simply a finish milestone or the entire task bar)
  • Flag every other task to display the task label above the task using the Flag10 field. This effectively staggers the labels for the tasks so that there’s less chance of text overlap.

image

Here’s the same view with the summary row expanded. Note how the Text Above field is flagged as yes for every alternate row.

image

Microsoft Project also comes with a couple other rollup views:

  • Bar Rollup – displays bars on the summary level.
  • Milestone Date Rollup – displays diamonds and dates for milestones at the summary level.
  • Milestone Rollup – displays diamonds at the summary level.

Rolling Data Up

First and foremost, it is important to remember that any schedule should be built upon the foundation of the WBS. That is the crux of effective rollup reporting. Each element of the schedule should be rolled up to match a specific deliverable listed within the WBS.

Assuming that this is indeed the case, then rolling up data will provide an easy to use view listing each WBS item on a specific line. Three elements are required to manage the data rollup feature:

1) Format > Layout > Uncheck the first two options. We’ll talk about how to use this feature in the next section. For now, I generally recommend turning it off, as it negates the ability to toggle rollups on or off using the default Rollup field.

image

2) Summary Task Level Rollup Field – Setting this to No will turn off all rollup functionality for this specific summary task. This should be turned on for any summary task intended to be displayed as a rollup task in the Gantt Chart.

image

3) Task Level Rollup Field – Setting this field to Yes will rollup the task to any summary task that also has the Rollup field set to Yes. If the summary task has Rollup set to No, this field will not have any impact.

image

So let’s take a look at a couple of examples. This is a relatively simple set of experiments borrowed from questions seen frequently on the Microsoft Project newsgroups.

In the first example, we wish to display a set of four subtasks rolled up on one Gantt Line. These may be subtasks or phases within the project.

image

By toggling the Rollup field, we can get each of the four tasks to show up on the summary line.

image

Note that if I set the summary task Rollup to No, then all of the formatting goes away.

image

The problem now is however, how do I visually differentiate the four tasks. To do that, I will add four flag fields, one for each subtask category. We’ll call them Phases 1-4.

image

Then I modify the Gantt Chart bars. To access this screen, doubleclick on the Gantt Chart. Scroll down to where you see the “*Rolled Up…” entries begin. Note that the “*” before each of the titles tells Microsoft Project not to include that specific label in the project legend when the project is printed. Using the *Rolled Up Task as the base, I insert four lines, and change the colors appropriately.

image

Going back to the Gantt Chart, this yields the following results:

image

At this point, I may also opt to change the formatting options for the subtasks so that they match their rolled up counterparts. I can then roll up the tasks to get the following view.

image

Let’s go back into the Bar Styles and modify the text labels…..

image

Note that I staggered the names, and put the labels on top for Phases 1 and 3, and on the bottom for Phases 2 and 4. This brings up the single trickiest issue that I have found with managing rollups, and that is trying to ensure that the text doesn’t all land on top of each other. The only solutions I have developed for this would be to use custom flag fields to control multiple bar chart styles, and thus allow me to toggle the text location – or add a callout using the Drawing options.

image

One more task remains – and that is to remove the summary task black bar. One handy trick when modifying the Gantt Styles is that you can mouse over the offending item to see which element in the Bar Styles Dialog is controlling the formatting:

image

So we have identified that the offending element is the Summary line. To remove this, I go back into the Bar Styles, and change the criteria for that bar:

image

And the end results look like this:

image

Now I point out that this view is pretty simplistic, and doesn’t come close to demonstrating the capabilities of Microsoft Project. In addition to rolling up Task bars, I can also roll up such items as baseline data, progress lines, or other key elements. This means that I can, in theory, roll up an entire view of the project to a handful of lines.

Reporting With Gantt View Task Rollups (Part 1) – Rolling Up Gantt Bar Charts

The Bulk Edit Tool, Unwrapped

In a previous post, I took the time to review the Bulk Import Tool, one of the Project Server 2010 Solution Starters available for free download from Codeplex.  The Bulk Import Tool imports large numbers of projects from SharePoint lists.  As I discussed in that post, some of the data doesn’t quite make it into Project Server – or may make it into Project Server in a form that must be edited.

That makes the Bulk Edit Tool a natural next step.  This tool allows the user to open any number of projects within the Project Center, and then to change the project level fields in a convenient datasheet interface.  In all honesty, I‘ve had decidedly mixed luck with getting this tool to work, and was about to skip a discussion of it, but then I decided to give it a second try. 

Thus, I spun up my Hyper V machine, installed the add-in and spent some time understanding how it works.  This post represents the results of that second look.

image

First off, the installation is pretty much the same as the Bulk Import Tool.  If you need guidance on how to install it, I refer you to that post.

That being said, the main quirks that I identified in this tool are pretty much as follows:

  1. Sometimes the tool just doesn’t work.  I am not sure why.  I suspect that it just stops working when the number of projects exceeds a certain limit, but I don’t know.  In environments where I can’t get it to work, I fall back on using the Bulk Import Tool to perform bulk edits (as documented here).
  2. When selecting the projects to be edited, the user has the option to add a filter.  For instance, if I only want to see the active projects, I can set a filter to only display projects where a custom field called Active=”Yes.”  The filter actually seems to work pretty well on non-flag fields.  Every time I ran the filter on a flag field, the tool would freeze.
  3. Filters to identify which fields are blank seem to be problematic.  For instance, when I filtered on a multiline text field to see if it was blank (=” ”), the filter wouldn’t run.
  4. Filters on text and date fields seem to work just fine.

If you can get past the filter step, the tool allows you to set the values for the selected project fields.  Some things that caught my eye here:

  1. Flag fields, which show up in Project Server as offering the option of only Yes or No, show in the tool as having three possible states: Yes, No, and Unknown.  As near as I can tell, Unknown corresponds to a blank cell, which is a bit weird as I’ve always learned that a blank cell is the same as entering “No.”
  2. The owner field may not be changed in bulk, i.e. the user can’t select an option at the top and then use the highlight and fill option to populate the cells underneath.  The Bulk Edit Tool may still be used to edit the owner field, but each cell must be clicked on one by one.  (again, here the Bulk Import Tool is slightly more useful.)
  3. Some fields seem to freeze the tool, for instance in preliminary testing, trying to bulk edit the Hyperlink tool didn’t quite succeed.

After clicking on the option to update the projects, I would recommend the following:

  1. Watch the Manage Queue page to confirm that the server is still processing the projects.  Sometimes it’s hard to get the feedback that the server has completed publishing all of the projects.
  2. Review the option to Force Check In Enterprise Objects.  Occasionally, some projects got stuck in checked out mode.

Good luck….

The Bulk Edit Tool, Unwrapped

Catch UMT At The PMI Houston Confab

I know what you’re thinking.  After last year’s performance, they surely wouldn’t want me to come back and have another go.  Well, it turns out that they do.  I am pleased to note that UMT will have a significant presence at the PMI Houston Annual Confab, June 7-9 at the George R. Brown Convention Center:

  • Application Lifecycle Management Fundamentals, presented by Tony Castronovo
  • Project Portfolio Management with Project Server 2010, presented be yours truly
  • Advanced Tips and Tricks with Microsoft Project 2010, me again

Catch UMT At The PMI Houston Confab

SharePoint Saturday Houston Follow Up

Thanks to everyone for coming out to SharePoint Houston yesterday – and to the organizers of this fine event.

A couple folks at my presentation mentioned that I worked through the demos pretty quickly, and so I wanted to post this quick follow up with the links to the step by step instructions for each of the showcased scenarios.

(In no special order):

White Paper Summary

Excel Services – I don’t really have a post specifically on this topic, but this is related.

Rest API

Visio Services (Timeline View)

External Lists

PerformancePoint Decomposition Trees

SharePoint Saturday Houston Follow Up

Making a Read Only PDP with InfoPath Forms

The genesis of this post lay in a conversation I had with a client.  The goal of the discussion was to identify a method to lock down specific project detail pages (PDP) within Project Server.  I figure that there’s probably a number of ways to accomplish this, but since I had been playing with InfoPath lately, this seemed to be the most logical choice.

From a process standpoint, the locked down PDP would enable a PMO to set specific fields at the project initiation, and then either prohibit or strongly discourage project managers to modify these fields.  If you’ve used Project Server for any time, of course, you’ll know that there is no true field level security….once a user can edit the project in Microsoft Project Professional, all of the fields may be edited.  But in some cases, perhaps where the project manager is primarily interacting with the project within the browser, this may be an effective way to control fields.

For other techniques that would probably be used in conjunction with this, I would encourage you to take a look at this post on security trimming PDPs, and some of my early posts of extending PDP pages into SharePoint lists.  At some point, I’ll probably come up with a proposed solution for leveraging SharePoint lists to provide secure extensions of Project Server data.

The Challenge

So the challenge I set before myself was to replicate a PDP page, but to make it read only.  At the end of this experiment I wanted to be able to pull up a PDP page, and have it render Project Server data without requiring any further input from the user.  My conclusion is that it’s not all that hard to accomplish this, albeit it requires a couple of tricks to get the output of the Query Filter Webpart to match the data requirements of the database query.

Preparing the SharePoint Site

The first thing we need to do is to add two libraries to our main PWA site: a data connection library and a forms library.  The data connection library will contain the required UDC file to link our form to the Project Server database.  The forms library will contain the form for our PDP pages.

You’ll find the options to create both libraries after selecting the View All Site Content option under Site Settings, then clicking Create and Libraries.

image

As a useful trick, you may note an InfoPath form maps to a specific content type within the form library.  If you plan on deploying this solution with different InfoPath forms, you’ll probably want to enable content type management within the forms library and then create a couple of extra content types.

Once you’ve created those two libraries, you’ll probably want to confirm that InfoPath is in fact configured within your SharePoint farm.  To do that, you’ll have to navigate to the Central Admin site.  Click on the General Application Settings.

image

Click on Configure InfoPath Forms Services.  Assuming that this does not violate your organizational security policies, go ahead and check the last three check boxes.  Click OK.

image

Close Central Admin.

Creating the Data Connection

To create the data connection, let’s open a blank form in InfoPath Designer.

image

On the Data tab, click on the Data Connections button.

image

Follow the default options to create a new data connection file to receive data from a SQL database.  For this example, I will be using the EPMProject_UserView table from the Reporting database.

image

Select the fields that you will require.  For this post, I’ll just go ahead and select all the fields in the view.

image

Complete the wizard.  Make sure to deselect the last checkbox on the last screen.

image

Once you get to the Data Connections dialog box, select to convert the newly created data connection to a connection file.

image

Post the connection file to the connection library created when we started this process.  Close InfoPath and navigate to the connection library.

image

As versioning is turned on within this library by default, you may need to click on the drop down arrow next to the connection file and set it to approved.

Configuring the InfoPath Form

Our next step is to create the InfoPath form.   With the data connection created, this is actually quite simple – with one minor caveat.  We need to add a mechanism to the form to manipulate the data received from the query string filter and convert it into something recognizable by the form query.

Create a new form with the Data Connection File template.  You could probably use any template, but this is the one that seemed the most appropriate when I was writing this post.

image

Connect it to the data connection created previously.

image

You should end up with a screen that looks like this.  Note the data fields on the right hand side of the screen.

image

InfoPath fields show up in two flavors: query and data.  The query fields are used to query the database….the data fields yield the results.  So our goal is to add the Project UID field to the appropriate query field, trigger the query, and show the results in the data fields at the bottom of the form.

You may wish to play with various permutations of this form, but the simplest way to emulate the PDP functionality is to delete everything but the data field box.

image

Now add a custom field called TempUID to the form data set by right clicking on the myFields item in the right hand dialog box.  This will create a field called my:TempUID.

image

Now click on the option to Manage Rules in the Ribbon.  Select the TempUID field, and click the option to set a New rule.

image

Set the rule to set the query field ProjUID whenever the TempUID field is changed. (Not the data field). The format for the data will appear as follows:

concat(“{“, translate(., “abcdefghijklmnopqrstuvwxyz”, “ABCDEFGHIJKLMNOPQRSTUVWXYZ”), “}”)

…where the “.” represents the TempUID field.  This formula does two things:

  • Adds round brackets around the TempUID entry, i.e. {abcdef}
  • Converts the lower case letters to upper case, i.e. {ABCDEF}

If you don’t add this formula, then the query will return an error stating that the ProjUID field is invalid data.  When completed, the calculation should look something like this (noting again that the field name appears as a “.”):

image

Add a second rule to the same field to query for data after the first rule is run.

image

Going back to the form, drag the desired fields to the data field box.

image

Save the form, and publish it to the form library created at the beginning.  When publishing the form, promote the TempUID field so that it may be used in Webpart connections.

image

After publishing the form, close InfoPath.  You are now ready to create the Project Detail Page.

Creating the PDP

Back in Project Server, navigate to the Project Detail Pages under Server Settings.  Add two Webparts to the page, the Query Filter web part and the InfoPath form.  Edit the Query Filter Webpart to pull the ProjUID parameter.

SNAGHTML2154f81

Configure the InfoPath form to pull the Query String Filter into the TempUID field we promoted when we published.

image

…and that’s it.  Add the PDP to your project type, and it will automatically display Project Server data whenever the page is viewed.

SNAGHTML21954ce

Yes, I admit the form is kind of ugly – and that description field got truncated, but dressing up InfoPath forms is probably a decent topic for another post.  For now, we got the data to show up – which I think is pretty good progress.

Credits

To give credit where credit is due….thanks very much to Jimmy McAnally (@jimmymcanally), a former colleague.  I ran into him at a recent Houston SharePoint User Group meeting, and he graciously spent a couple of hours helping me with a different hypothetical InfoPath question.  In the process, he ended up teaching me enough about InfoPath to get me started down this path.  Also thanks to Clayton Cobb (@warrtalon), SharePoint MVP, for graciously attempting to help me out on the online forums – despite my near-incoherence in being able to actually describe the issues I was facing.  I’ll give them credit for everything that actually works in this post and I would encourage you to blame me for any incorrect or misleading information.

Making a Read Only PDP with InfoPath Forms