Brian Smith writes here about a new behavior added in SP2 around timesheet pre-population and some reports of some customer dissatisfaction.
The ‘Gist’ is that with SP2 if you have the ‘Current task assignments’ option in the Default Timesheet Creation Mode then even after a user creates their timesheet new tasks assigned to them that fall within that timesheet period will still be added to the timesheet. Pre SP2 these new task assignments would NOT show up in the timesheet. The user would have had to delete the timesheet and recreate it. That was a HUGE bummer and the new functionality is VERY cool.
As Brian states there are a few customers that have users that want to delete a line from their timesheet but now, with SP2, if the line was a task from a Project the timesheet line comes back the next time the user opens their timesheet. The timesheet will now ALWAYS contain all tasks to which the user is assigned (that fall into that timesheet period.) These customers are unhappy with this behavior.
I think this is the best thing that could happen for these users. Basically, we have a situation here where a team member has been assigned a task by a project manager so it shows up on their timesheet. Then for whatever reason the team member feels that the task should not be on their timesheet. Either they feel that the task should be done by someone else or they feel that it should be done next week or some other reason. So they delete the line but then it comes back. So the good part of this is that it will encourage this user to talk to their project manager and explain why they think the task should not be on their timesheet. If the PM agrees then they can remove the assignment or move the task to a later week and it will drop from the users timesheet.
This feature not only makes timesheet task population dynamic but will now also encourage team member-project manager communications! Now THAT is a good feature. :-)
UPDATE (on 6/30/2009):
Here is the KB on this issue. Funny…it actually links back here and to Brian Smith’s blog. :-)
As some of you may already know the PERT Addin that was in Project for several versions was NOT included in Project 2010. The good news is that below we have the first version of some sample code you can use to add the feature back into the product! This first version does not use a form like the old one. It uses custom fields at the task level to store the Pessimistic, Optimistic and Most Likely estimates and the weights for each estimate. This is just a preliminary version. We hope to gather feedback and then release a future version of the code as a Visual Studio project that can be customized and used to create a Project 2010 Addin.
This code depends on using 7 task level custom fields:
The image below shows a Gantt Chart view with these fields inserted. In this example we see weights only on the first task. This is an option you can set in the code. If the option is set to ‘False’ then each task can have its own set of weights. Duration estimates are inserted for each task. The code at this point will estimate every task. (We could add the option to allow a project manager to specify which tasks should be estimated.)
To use this sample code in your own projects:
Now the code is ready to be used. All that is left is to insert the fields in the table above into a Gantt Chart view, enter your estimates and your weights (Remember that the weights must add up to 6!!) and then run the macro using the Quick Launch button you just added.
This is just a first pass at a sample for replacing the PERT functionality. Please email me (email@example.com) with your feedback.
Some things to think about:
One last thing: This is just sample code and should be thoroughly tested before you use it on a ‘production’ project.
Sub PERT()Dim tskT As TaskDim tskFirst As TaskDim FoundBadWeights As BooleanDim UseOneSetofWeights As Boolean
UseOneSetofWeights = TrueFoundBadWeights = False
CustomFieldRename FieldID:=pjCustomTaskDuration1, NewName:="Optimistic Duration"CustomFieldRename FieldID:=pjCustomTaskDuration2, NewName:="Most Likely Duration"CustomFieldRename FieldID:=pjCustomTaskDuration3, NewName:="Pessimistic Duration"CustomFieldRename FieldID:=pjCustomTaskNumber1, NewName:="Optimistic Weight"CustomFieldRename FieldID:=pjCustomTaskNumber2, NewName:="Most Likely Weight"CustomFieldRename FieldID:=pjCustomTaskNumber3, NewName:="Pessimistic Weight"CustomFieldRename FieldID:=pjCustomTaskText30, NewName:="PERT State"
If UseOneSetofWeights = True Then Set tskFirst = ActiveProject.Tasks(1) For Each tskT In ActiveProject.Tasks If Not (tskT Is Nothing) Then If tskT.PercentComplete = 0 And tskT.PercentWorkComplete = 0 Then If (tskFirst.Number1 + tskFirst.Number2 + tskFirst.Number3) = 6 Then tskT.Duration = ((((tskT.Duration1) * tskFirst.Number1) _ + ((tskT.Duration2) * tskFirst.Number2) _ + ((tskT.Duration3) * tskFirst.Number3)) / 6) tskT.Text30 = "Duration Calc'd: " & Now() Else tskT.Text30 = "Not Calc'd: Weights <> 6" FoundBadWeights = True End If Else tskT.Text30 = "Not Calc'd: Task In Progress or Complete" End If End If Next tskTElse For Each tskT In ActiveProject.Tasks If Not (tskT Is Nothing) Then If tskT.PercentComplete = 0 And tskT.PercentWorkComplete = 0 Then If (tskT.Number1 + tskT.Number2 + tskT.Number3) = 6 Then tskT.Duration = ((((tskT.Duration1) * tskT.Number1) _ + ((tskT.Duration2) * tskT.Number2) _ + ((tskT.Duration3) * tskT.Number3)) / 6) tskT.Text30 = "Duration Calc'd: " & Now() Else tskT.Text30 = "Not Calc'd: Weights <> 6" FoundBadWeights = True End If Else tskT.Text30 = "Not Calc'd: Task In Progress or Complete" End If End If Next tskTEnd IfIf FoundBadWeights = True Then MsgBox Prompt:="Some Tasks Weight Values were found to be incorrect." & _ Chr(13) & "Check the Text30 fields for details.", Buttons:=vbCritical, _ Title:="WorkPERT Weights Error"End IfEnd Sub
If you are enough of a Project-nerd to read this blog you likely already know that the Project 2010 public beta is out and ready for you to download. I have been using and testing it several months and I can honestly say that it is the strongest version of Project I have ever seen. I mean that from a feature standpoint (lots of cool new stuff) and from a product quality standpoint. I have been looking at beta versions of Project since Project 98 and I have never seen a set of pre-beta builds with the quality and stability I have been seeing with 2010. Just amazing work by the product team. Everyone, testers, developers and program managers, really kicked it up a notch with this version. Great work to all of them. NOW…on with the nerdiness!
I am hosting a Thanksgiving dinner party for my family (sorry, not enough room for everyone) and my wife and I were thinking about the timing of all the food and preparations and we were wondering if we could do it all. Last year we just went for it and found out that our dishes all needed different oven temps and it was a huge, and very late mess. This year my wife asked "Hey, software bigshot, doesn't Microsoft make some kind of tool for planning and scheduling things?". "Well yes, I suppose they do", I said sheepishly. :-)
So I broke out my trusty copy of Project 2010 and started lining out my WBS. I started with the prep work and even had tasks for my kids to cleaning up the yard and such but I abandoned that idea and started concentrating on the food part of the event. I looked at all the recipes and broke them down into sets of tasks with proper durations. Then I figured out that to solve my oven problem I would need some Oven resources. So I entered a resource for each oven temp my dishes required. Oven - 350, Oven - 375, Oven - 400. I assigned the cooking tasks for each dish to the proper resource and then I went to the Team Planner and found that the only way I would be able to do all those dishes is if I had 3 ovens or I cooked them serially and had several of them sitting out cooling off while the others cooked. Obviously this was not good. So I moved some things to the day before and then planned to just heat them up just before the service. Then my wife and I went through and found some great dishes that all required the same oven temp! I reworked the plan and and now things are much better. The end result is a great dinner (I predict!) that is doable from a schedule standpoint and now I’m even more in love with the Team Planner than I was before! Here is how my Oven – 275 resource looks in the Team Planner, now that I reworked it:
You can see that the Oven is overallocated but I did check and all three of the overlapping items will fit at the same time. :-)
So bottom line? Project 2010 saved my Thanksgiving! :-)
I have attached the mpp file to this post. Feel free to download the beta (link above) and play around with it, use it for your party planning, make fun of it or point out where my schedule is flawed. Hopefully, all of those things will happen1 LOL
This sample project contains resources for me, my wife and my daughter as well as various oven temps, burner sizes and other appliances I will be using. Most of the tasks started out as manually scheduled tasks while I was moving things around and messing around and then once I wanted full scheduling I moved them to Auto Scheduling. (I was not sure what I thought about manual tasks at first but I really like them now for that early scheduling stage when you are building your WBS and just experimenting with timings before the real scheduling starts!) It has a custom field for aligning tasks to a specific dish (there is also a view that shows the tasks grouped by this field that I used to make sure I did not leave anything out). I used a bunch of Start-to-Finish links (first time I ever used one outside of a training class!) to make sure that if the service time moved that it would “re-flow” my cooking tasks in relation to the new date. I even went with an old-school feature and added a drawing object and pinned it to a specific task so I could have a vertical line on the Gantt chart tied to the “Guests Arrive” milestone to make it more visible. LOL
So download the beta (it pretty much kicks ass!), mess around with this project and have a good, filling and safe Thanksgiving holiday (or for those of you NOT in the US, have a great Thursday the 26th!) :-)
PS, the beta will install a little ‘Send a Smile’ and ‘Send a Frown’ tool for giving feedback and you should certainly make use of it if you find an issue. But if you find something really interesting or something you think is a big problem feel free to send me an email (firstname.lastname@example.org) I would be interested in hearing about it.
The guys at 37 Signals were almost on to a good thing with this post about Planning as Guessing. Sure plans are guesses. Sure they are just a hopeful take on what we think might happen. Nobody that is good at what they do has ever questioned the transient, unsteady nature of plans (and yes, to be perfectly clear, by this I am implying saying out-right that those that think that their plans are cast in stone and not to be wavered from are bad at what they do.) But what their post gets wrong is that by dismissing plans and planning as a waste of time and diminishing the importance of planning they encourage the very thing that we need WAY LESS of in the world of, well the world of EVERYTING: a lack of planning. They seem to think there is too much planning. Well Im going to go the other way and say that there is nowhere near enough (good) planning. Maybe the problem is that it is assumed that the only outcome of planning is a plan. That is often the tangible product that one can hold in their hand or email to the team but it is not the only output of planning. The process of building that plan (the one that SHOULD be assumed will not last through the first week or so of the project) makes us smarter about what we are doing. It makes us think about what might go wrong. It makes us walk through different scenarios and different possibilities. Creating that solid plan that we know will get at least heavily modified if not out-right replaced is the very thing that equips us to make those heavy modifications or to come up with the replacement plan. Without the planning, if we dismiss planning as just the creation of guesses, we leave ourselves exposed to the four winds like so many backpackers huddled around the campfire at basecamp.(Sorry, just kidding. I could not resist. LOL. 37Signals makes some cool stuff for sure. I mean them and their products no disrespect.) But seriously, the planning process is not about coming up with the be-all, end-all, rock-solid path through the project. It is about preparing yourself and your team for what might happen. It is about thinking through what could go wrong, figuring out what will likely go wrong and figuring out what you will do when it DOES go wrong. My fear when I read posts like the one at 37Signals is that they seem to minimize the importance of planning (and even, if just a little and very subtly, ridicule those that think planning is important.) If this leads to even one team doing less than the appropriate amount of planning because a plan is “just a guess” then it has done a disservice.
Glenn Alleman has a great post here asking the question “If I'm Doing Project Management Right am I Agile?” and my answer is a resounding PROBABLY!!! :-)
I have been thinking this same thing since way back in 2004 when I posted about an article I saw about agile methods. My post was called “Agile Methods: Based on False Assumptions?” In it I talked about how many of the points the author was making about what it called “Traditional Management” was really just bad management. This was at a time when I was on some email lists that talked about PM methods and I was getting the feeling that Agile had been created by a group of people that had worked for the WORST PMS EVER. The stories they told and the processes they talked about were not the PM I understood and practiced. It was some horrible torture method designed by people that did not like software developers. I started to feel like the Agile community was a support group for abused software developers. The hard part was that they were talking about “Project Managers” as if they were an interchangeable set of identical parts” (IRONIC since that was one of the main accusations the agile community was making about how PMs saw software developers.)
That said I don’t think that good project management and Agile methods are a 100% overlap I do think that if you are doing project management correctly and the methods you are using in the management of your project are well fit to the particular project you are managing then what you are doing will NOT be the kind of PM that the agile community rails against. So for the most part the answer to Glenn’s question is YES. :-)
In the past few weeks I have seen a ton of questions floating around about users of project management systems wanting to see reporting showing resource capacity vs. demand. Now you might be saying “But Brian, that is pretty common. Doesn’t EVERYONE want this kind of data from their PM system?” to which I would reply “Certainly, but these requests were different in that they all wanted to see it for time periods going out as far as 2 years into the future.” My question is what is someone going to do with a comparison between demand (scheduled work) and availability that far into the future? The instant answer I always get is that they want to see how the current load of projects scheduled is placing demand on their resources and that is a good answer. But in my opinion most organizations are just not good enough at scheduling and estimating and forecasting to make schedule data that far into the future of a quality that would support any real decision making around demand\capacity problems. Schedules are hard enough to get accurate for the next 2 months let alone the next 2 years.
There are industries or environments\situations where the type of projects being done are easy to estimate because they have a high similarity with projects that have already been done but for the most part capacity\demand data derived from project schedules should be looked at as ‘fuzzy’ if the time period of the data is farther out than a few months and even fuzzier if it is more than a year out.
There are decisions that can be made based on this data but they should be made with the knowledge that those numbers could swing wildly in some cases depending on changes to the project as it moves forward. The adage that some data is better than no data holds true for the most part but ‘some data’ that is highly suspect but still used in the decision making process as if it was certain is worse than no data.
When you are looking at data that depends on the quality of your schedule estimates and project WBS you need to think about that quality when you make decisions based on that data. Where are those estimates coming from? Are they top-down estimates (like many that are that far out into the future) or are they bottoms-up estimates coming from the resources that will do the work (hard to do when the tasks in question are months or even over a year in the future?
Clearly a single strategy can be served by many projects and a single project can serve many strategies. The discussions I have had both in the comments of my previous strategy breakdown structure posts and in the emails I have received have brought up some very interesting points. I have gone from liking the idea of linking strategy directly to "elements" within a single project to thinking it was unnecessary and cumbersome and now back to liking the idea again!
I think there could be some really cool outcomes not only for the Organizational Strategy side of the house or the Portfolio Alignment side of house but also for the "PM or team member that just wants to have a better picture of where their hard work fits into the big picture" side of the house as well.
Strategy "Down" to Project Visualization
Linkages from Strategy "Down"
This would provide the organization with a more detailed picture of how strategies are being made to come true via projects and the deliverables of those projects. Linking specific deliverables to the strategy instead of the traditional method of linking whole projects requires a more detailed thought process to be involved. Whole projects would not be just dropped in the "Strategy A" bucket. Instead finite parts of the project would need to be analyzed as to how they support a strategy.
Project "Up" to Strategy
Linkages from the Project "UP"
This way of looking at the relationships offers a different perspective. This diagram would be useful for PMs and team members to more easily visualize how their project and even their particular part of a project supports the overall organizational strategy.
The other thing it would do would be to provide an interesting 'scope check' early in the project. Notice that the deliverables are not only numbered but they are numbered within a set of 4. Where is Deliverable 2? The question would be..."If Deliverable 2 does not directly support a strategy why is it there?" Certainly there are valid answers to this question. This is not to say that just because it does not have a direct strategy link that it should be removed but there is value in the question and value in the process required to adequately answer the question. Answering these kinds of questions and making these kinds of links might force us and managers and planners to think about individual parts of our project in a different way. It might make us examine our scope and our deliverables and the usage of our teams in a different ways. On the 'other side' of this same coin it might make us think about our strategies in different ways as well.
I very much want your thoughts on this. Please email me with your thoughts. I will NEVER share your name or contact info with anyone without first getting your specific approval.No details about your company, your name or your clients will ever be posted here without your specific approval.
Possible problems with the approach that need to be addressed
Nothing is perfect. There are issues with this approach
So I have a PSI application that pulls data from Oracle Financials and correlates it to specific projects in Project Server. using a key field it brings over 6 fields and writes it to 6 Project level Enterprise Number fields. It updates the fields and then calls QueueUpdateProject which should trigger a recalculation of custom field formulas. I also have several custom fields that use the original 6 fields in their formulas.
My problem is that the fields with formulas were not getting updated. If I opened the project into Project Professional then they calculated just fine.
It turns out that there is a problem with the calculation ‘engine’ in Project Server that causes it to stop recalculating these formulas if any one of them returns an error. In my case the error was caused by this formula: [Capital Actuals]/[Capital Plan] because for some of the projects the Capital Plan field was 0.
The solution is to make sure your formulas cannot return such an error. In my case it was changing the formula to this: IIF([Capital Plan]>0, [Capital Actuals]/[Capital Plan], 0)
Similar issues can possibly be caused by a formula like [Field A]+[Field B] if either A or B have been deleted.
So if any of you are having issues where your field formulas are not refreshing properly go and check all your formulas and see if any of them are returning errors.
Merry Christmas\Happy Holidays\Have a Happy Next Two Weeks :-)
This post is for the person named Santhiya that commented on my “Server-side Calculation of Custom field formulas” post. I accidentally deleted it instead of approving it. I have it in my notification email so here is what they asked:
How do we use to check whether the Date fields contains values or not. IN Project professional they are using " Actual Finish = NA". how can we use in PWA site while creating view with Filtering option. Thanks!
How do we use to check whether the Date fields contains values or not.
IN Project professional they are using
" Actual Finish = NA".
how can we use in PWA site while creating view with Filtering option.
Here is the answer:
As you found you cannot filter for “equals NA”. You also cannot filter for '”contains /”. Both of these give you an error when you try to save your filter.
What you can do is test to see if the value in the date field is greater than 1/1/1984. If it is greater than 1/1/1984 then the field contains a valid date.
So “is greater than 1/1/1984” will return only rows where the date value is NOT “NA”. The hard part is that you cannot use this idea to have a filter only show rows there there is NOT a date. The filtering mechanism does not seem to understand the idea of NA.
So the workaround for this is to do a ‘does not contain’ filter for a character that you know will always be in your dates but NOT the forward slash character (which throws an error.) If your dates for this field will always be in this century and you always use regional settings that show four digit dates then you can use this filter:
“does not contain 2”
This filter will return all rows that do not have a date in them if you use 4 digit years and your dates are always greater than 12/31/1999.
I hope this helps. Sorry I deleted your comment Santhiya. :-)
You can have Project Portfolio Server 2007 auto-generate a ProjectID for you. To do so:
For example, the entry below will generate a code that has the 4 digit year and then a sequential number (2009-1, 2009-2, 2009-500, etc)
But that is not quite it. At this point the system will auto-generate your ProjectID but the field will still be editable so users could overwrite the auto-generated number. A quick change to the Project.aspx will fix that right up.
Now the system will auto-generate your ProjectID but the user will not be able to overwrite it.
Here is a sample of some VBA code that will populate the Task Text30 field with the numbers of the baselines for which each task has values saved. This is useful if you are using lots of the baselines but not all your tasks have had all the baselines saved.
“Task” has values in Baseline, Baseline2, Baseline4 and Baseline9 while “Other Task” only has values in Baseline2.
1: Sub WhichBaselinesSaved()
2: Dim t As Task
3: Dim i As Long
5: For Each t In ActiveProject.Tasks
6: If Not (t Is Nothing) Then
7: t.Text30 = ""
8: For i = 0 To 10
9: If i = 0 Then
10: If t.BaselineStart < 50000 Then
11: t.Text30 = t.Text30 & i & ", "
12: End If
13: ElseIf Not t.GetField(Application.FieldNameToFieldConstant("Baseline" _
14: & i & "Start", pjTask)) = "NA" Then
15: t.Text30 = t.Text30 & i & ", "
16: End If
17: Next i
18: t.Text30 = Left$(t.Text30, Len(t.Text30) - 2)
19: End If
21: Next t
22: End Sub
Late next week I will be in Phoenix for the pre-events and meetings for the Project Conference. If you are going to be there let me know.
I will be trying to update here with the big stuff and will be updating http://www.twitter.com/briankennemer with the small things.
I hope to see everyone there.
Just in case mine is the only Project blog you read, in which case you should really expand your blogroll by the way, here is an invitation to join the Technical Preview for the next version of Project and Project Server. :-)
Final call to those wishing to have access to the Microsoft Project 2010 client and Microsoft Project Server 2010 Technical Preview.
We have issued an invitation asking to show and expression of interest in gaining access to the Technical Preview of Project/Project Server 2010. The invitation was issued to all known EPM Specialized partners; Independent Software Vendors (ISV’s) that build on Project/Project Server; Project Most Valued Professionals (MVP’s) and Project/Project Server courseware builders (books, Computer Based Training (CBT) DVD’s, instructor lead, on-demand).
There is only one invitation per company and it was sent to the company’s primary contact as registered in the Microsoft Partner Portal or through the Microsoft field providing contact details. Be aware as part of the process the person accepting the invitation must also sign a Non-Disclosure Agreement which applies to the individual and their company.
This is a final call to express and interest in receiving an invitation. If you fell that you company has not received this invitation (and should have based on the criteria given) please email email@example.com with your contact name, company name and email address.
For all other partners who are reading this and wish to participate in the Project/Project Server 2010 please email firstname.lastname@example.org with your name, company, email address, city, country and three sentence explanation why you should participate in the Technical Preview. Your name will be added to a wait list, there is not a guarantee that you will receive an invitation.
It is also worth noting that as an added value to the Microsoft Project Conference registration at no additional cost to the conference ticket, you and your technical colleagues have been invited to attend the Microsoft Project 2010 Ignite Airlift which will be held on September 13-14, 2009 at the Phoenix Sheraton in Phoenix, Arizona, USA . This is a training workshop for EPM specialized partners and ISV’s who are looking for in-depth technical training on setting up the next EPM version: Project 2010.
OK. I’m learning how to use encoder to manipulate things like viewer size and whatnot. Sadly, it does not fix how freaked out I am when I know I’m being recorded. So you will have to put up with some “UMs and ERRs” in this one (and likely for a while until I become used to this recording thing.) :-)
I think this size will allow decent viewing with the embedded player without having to go full screen. Let me know.
<This is a reposting of content from the Official Project Blog but since it is a pretty important item I am reposting completely.>
On July 15th, 2008 Microsoft announced the availability of the Infrastructure Update for Office Servers. The Infrastructure Update for Office Servers is a set of updates to improve platform performance and contain several customer driven fixes. The updates are applicable to Microsoft Office SharePoint Server 2007, Windows SharePoint Services 3.0, Microsoft Search Server 2008 & Microsoft Search Server 2008 Express, Microsoft Office Project Server 2007 and Microsoft Office Project 2007.
There are several noteworthy new features and fixes shipped in these updates for Project Server 2007 and Project 2007; specifically:
Please read Project 2007 Infrastructure Update Release for Server and Client to learn about its content in detail.
The Infrastructure Updates are available as free downloads to customers via the download center on http://www.microsoft.com/download.
Before you install the Infrastructure Update there are some very important things to understand. In this post we'll try to provide you with the resources you need to be successful in your updates. It is essential that you understand the appropriate links, and thoroughly read the guidance and test out the patch in a separate environment prior to a production rollout.
Full installation instructions and guidance is provided in the Knowledge Base articles linked from the download pages for each update along with existing TechNet guidance for patching Office Servers. The links are also included further on in this Q&A, but for reference, the following products require the following updates to be applied.
Read more about the new SharePoint features here
Read more about the new Search features here
Read more about the Content Deployment updates here
Knowledge Base Articles
Infrastructure Update for Windows SharePoint Services 3.0
Infrastructure Update for Microsoft Office Servers
Infrastructure Update for Microsoft Office Project 2007
List of Fixes
It is strongly recommended that you install Windows SharePoint Services 3.0 Service Pack 1 and Office Servers Service Pack 1 before installing the Infrastructure Update for Microsoft Office Servers (KB951297) and the Infrastructure Update for Windows SharePoint Services 3.0 (KB951695).
The installation process will incur server and farm downtime that you will need to plan for – the updates should be installed on all servers in a farm.
Frequently Asked Questions
Q: Is Office Servers Service Pack 1 (SP1) a prerequisite or installed as part of this fix? A: No. Our supportability commitments to customers include providing the ability to install hotfixes on the two most recent versions of a product, in this case RTM and SP1. So installing these updates directly onto an RTM server is not blocked and will install some of the fixes shipped in Office Servers Service Pack 1, but only those that are contained in files that are changed by the Infrastructure updates.
Q: Can I uninstall the server updates? A: No. The Infrastructure Update for Microsoft Office Servers (KB951297) and the Infrastructure Update for Windows SharePoint Services 3.0 (KB951695) cannot be uninstalled. Both updates make database schema changes.
Q: Can I install the “Infrastructure Update for Microsoft Office Project 2007 (KB951547)” Project 2007 client update without installing the “Infrastructure Update for Microsoft Office Servers (KB951297)” on the server? A: Yes, the “Infrastructure Update for Microsoft Office Project 2007 (KB951547)” includes fixes for both client/server communication and local client features, so if you don’t have Office Project Server 2007 but use Office Project 2007 client this update can be safely installed and you will be able to take advantage of all the client updates.
Q: Where can I find information on Service Pack 1 for Project Server and Project Professional 2007?
A: Please check the following: http://blogs.msdn.com/chrisfie/archive/2007/12/12/announcing-the-release-of-epm-2007-service-pack-1.aspx
Q: What if I have an issue that isn’t addressed by this update? A: If your customer has a specific issue that these updates do not address you should follow the Microsoft Support process to log the issue and request a hotfix.
I know what you are saying “No way, how could they do it?” But it is all right there. It slices, it dices it makes thousands of julienne fries. But it also lets you have every technical document on Project Server 2007 in one place that you can search. It is amazing. NOW how much would you pay. OK anyway… this is pretty cool and you should download it right now. Tech Docs in a Single File
Now when I downloaded it I got a small issue where it would not show me any of the content. I’m not sure if this is an issue based on my OS (I’m running Windows Server 2008 on my laptop) but here is the fix. If you right click on the .chm file and then hit Properties you may see a button that says “Unblock” if you see it then click it and then you will be able to see the content of the file.
Given the season I have started thinking about what I’m thankful for. Here is my list of a few things I am thankful for this year:
Christophe blogged about the new Technet web cast series being done by Michael Jordan. For those that do not know who Mike is, he pretty much holds rock star status in the Project Server world. When he talks about Project Server people stop what the are doing and start taking notes. :-)
The series includes the following topics:
Microsoft Office Project Server 2007 - Solution Overview and System Elements
Microsoft Office Project Server 2007 - Solution Elements and Data Flow
Microsoft Office Project Server 2007 - Workload Scenarios and Reference Architecture
Microsoft Office Project Server 2007 - Network Communication
Microsoft Office Project Server 2007 - Server Administration
Microsoft Office Project Server 2007 - Maintenance and Monitoring
Microsoft Office Project Server 2007 - Deployment into a SharePoint Server Intranet Farm
Microsoft Office Project Server 2007 - Disaster Recovery
Microsoft Office Project Server 2007 – Virtualization
Visit Christophe’s blog for the details and then mark your calendar.
So the problem was that a customer wanted to be able to move a task that was at ID 7 and move it so that it was at ID 2. Sadly, VBA for Project does not contain a Task.Move method. But with a little bit of code around them you can use a Cut and Paste methods for Rows.
The example below assumes that you know the name of the task you want to move and the name of the task that currently occupies the row where you want to move the first task.
Here is a sample task list. This sample is a good test because the tasks are out of ID order. The task I want to move (name = 7) is in ID position 3 and I want to move it to where Task 2 is now (currently in ID position 9.)
Sub TaskMover() Dim t As Task Dim NewID As Integer
For Each t In ActiveProject.Tasks If Not (t Is Nothing) Then If t.Name = 2 Then NewID = t.ID End If If t.Name = 7 Then SelectRow Row:=t.ID, Rowrelative:=False EditCut End If End If Next t
SelectRow Row:=NewID, Rowrelative:=False EditPaste
This code is not very elegant in that it requires us to select a row and then cut it and then select another row and then paste it. It also requires that the view in the activewindow is a Task view. There is some code we can use to test to make sure the view is the right type. “ActiveWindow.TopPane.View.Type” should be “0” or “pjTaskItem”. So it is not perfect but it gets the job done. You can use this as a starting point for your own needs.
So the new code with this view type test would look like this:
Sub TaskMover() Dim t As Task Dim NewID As Integer If ActiveWindow.TopPane.View.Type = pjTaskItem Then For Each t In ActiveProject.Tasks If Not (t Is Nothing) Then If t.Name = 2 Then NewID = t.ID End If If t.Name = 7 Then SelectRow Row:=t.ID, Rowrelative:=False EditCut End If End If Next t SelectRow Row:=NewID, Rowrelative:=False EditPaste End If End Sub
Here is some starter code for doing quick checks of the tasks in a project. This code will create a ‘report’ that shows the tasks that have estimated durations, tasks that are not fixed work and tasks that do not have any resources assigned. It also collects the names of resources that are not assigned to any tasks.
It should be noted that there are real products out there like QuantumPMs Quantum Schedule Auditor that does this in a much more sophisticated way (you should check out that product if you need to do more systematic and regular auditing.)
But that said if you need to do quick checks here is some code that shows some sample checks and a way to put the results into the clipboard so you can paste it into Word or Excel.
It is possible to have all the report building stuff on one big line but I like to break this kind of thing out on several lines. It makes it easier to add new stuff into the middle of the report.
Sub ProjectChecker() Dim t As Task Dim r As Resource
Dim EstimatedDurCount As Integer Dim EstimatedDurTask As String
Dim NotFixedWorkCount As Integer Dim NotFixedWorkTask As String
Dim NoResourceAssignedCount As Integer Dim NoResourceAssignedTask As String
Dim ResWithNoAssignCount As Integer Dim ResWithNoAssignResource As String
Dim Report As String Dim MyData As DataObject Set MyData = New DataObject
For Each t In ActiveProject.Tasks If Not (t Is Nothing) Then If t.Estimated = True And t.Summary = False Then EstimatedDurCount = EstimatedDurCount + 1 EstimatedDurTask = EstimatedDurTask + t.Name & Chr(13) End If If t.Type <> pjFixedWork And t.Summary = False Then NotFixedWorkCount = NotFixedWorkCount + 1 NotFixedWorkTask = NotFixedWorkTask + t.Name & Chr(13) End If If t.Milestone = False And t.Summary = False And t.Resources.Count = 0 Then NoResourceAssignedCount = NoResourceAssignedCount + 1 NoResourceAssignedTask = NoResourceAssignedTask + t.Name & Chr(13) End If End If Next t
For Each r In ActiveProject.Resources If Not (r Is Nothing) Then If r.Assignments.Count = 0 Then ResWithNoAssignCount = ResWithNoAssignCount + 1 ResWithNoAssignResource = ResWithNoAssignResource + r.Name + Chr(13) End If End If Next r
'Building Report Report = "Project Name: " & ActiveProject.Name & Chr(13) & Chr(13) Report = Report & "**** Tasks Section ****" & Chr(13) Report = Report & "Count of tasks with Estimated Durations: " & EstimatedDurCount & Chr(13) Report = Report & EstimatedDurTask & Chr(13) Report = Report & "Count of tasks that are NOT Fixed Work: " & NotFixedWorkCount & Chr(13) Report = Report & NotFixedWorkTask & Chr(13) Report = Report & "Count of tasks without a resource assignment: " & NoResourceAssignedCount & Chr(13) Report = Report & NoResourceAssignedTask & Chr(13) Report = Report & Chr(13) & "****Resource Section****" & Chr(13) Report = Report & "Count Resources with No Assignments: " & ResWithNoAssignCount & Chr(13) Report = Report & ResWithNoAssignResource & Chr(13)
MyData.SetText Text:=Report MyData.PutInClipboard
There can be confusion among those deploying Project Server about if they need to define and use an RBS as part of their security structure. There is lots of information and a lot of opinions. Here is more information and one more opinion. Hopefully one that rings true in your experience.
In my experience the use of an RBS is only needed if you need to limit access to project or resource data based on some kind of structure. This structure is almost always an organizational structure.
For example if you need to make sure that a Project Server user who sits at 1.2 on the org structure can ONLY see Projects that are managed by or worked on by users at or below 1.2 or a user who sits at Organization 2 cannot see Projects inside Organization 1 then you need to have an RBS in place.
If your security needs are based on role rather than on organization then your don’t need RBS. An example of this is when Project Managers need Write access to their own projects and read access to all other projects and other roles such as managers need read access to all projects. So if the organization a user is in does not have a direct impact on the projects or resources they can see then you don’t need an RBS.
For sure there are shades of several colors here but this is the gist. I look forward to your comments.
The same FeedBurner RSS feed (http://feeds.feedburner.com/Projectified) still works as I changed its settings to point to the TechNet blog.
The existing www.projectified.com site will stay up for a long time or until I can figure out how to bulk export the posts from here and import them into the TechNet blog.
This is a repost of an old post from the original Projectified site. Hoping it can bring about some new discussion
I was reading Demian's blog over on the ITToolbox family of blogs and he was talking about what he called WBS 2.0 and it's interplay with project portfolio management. It got me thinking last night about how strategy is (should be) connected to a new, broader idea of Work Breakdown Structure. Since the top level of a work breakdown structure (within it's currently held definition) is the project I was thinking about how the broader definition would necessarily change the W in WBS to something else. SBS came to mine initially for Strategy Breakdown Structure. If we start with organizational strategy as the driving force behind the management and alignment of the portfolio of projects then it makes sense that to get a decomposition of all the work that feeds up to those strategic goals that we would start with the strategy and work down.
So we start with the Strategy as "Level 0" in the SBS. What is the next level? Do we jump right to individual projects? Is there one or two intermediate levels between the strategy and the project level? What would those look like? What would we call them?
The more I think about this the more I like it as a way to help organizations do a better job of aligning projects to specific strategic initiatives particularly if there is one or two intermediate levels between the strategy itself and the project. I have found in many cases that the very broad nature of the strategy level being the buckets into which projects are placed that it is overly easy to put a project into a bucket without much analysis of why that project belongs in that bucket. It seems as if the strategy was broken down into smaller parts it would require some more thought about which one of the sub areas of that strategy the project supports.
So help me out with your thoughts on this. Email me at email@example.com with your ideas on this subject. I will compile them and share the findings here.
OK so I will take a first shot at what the levels of the SBS would look like.
Strategic Initiative Objective Program Project WBS
Just a shot into the thin air. How do you all (all 18 of you LOL) see this working? How would you like to see these levels broken down?
Do you see this kind of expansion of the strategic alignment idea as being useful? Is there value in breaking a strategic initiative down into chunks smaller than the initiative itself but yet still larger than the projects that support that initiative?
If you are in Project Server 2007 you can have an Enterprise Text using a lookup table that can contain more than one value. If you then need to work with that field data in code (VBA or VSTO) you can use the GetField function to get the value of that field. The catch is that it is returned as a comma delimited string with all the values in it. So if your field had three values selected (Value1, Value19 and Value26) it gets returned as “Value1, Value19, Value26”.
The code below shows how to parse this into an array where it will be easier to work with in code.
As always, take this code and make it your own. This includes doing testing to make sure it does what it is supposed to do. It worked for me on a very limited set of test data. Don’t just throw this into production. ;-)
Sub Parse_Comma_Delimited_Field_Into_Array() Dim Char As Integer 'Char is used to hold each character in the string to see if it is a comma Dim WholeField As String 'Wholefield is a string that holds the entire value of the field to be parsed Dim Values() As String 'Values is the string array that will contain the parsed values Dim NumberofValues As Integer 'NumberofValues holds the number of values in the 'wholefield' 'so that the 'Values' array can be redim'd Dim StartofLastValue As Integer 'holds the number of characters from the left of the string where the last 'word started so the value can be pulled from the wholefield string and 'placed into the array StartofLastValue = 1 NumberofValues = 0 '---Setting value of WholeField to be parsed WholeField = ActiveProject.Tasks(1).Text1 '--- If Len(WholeField) > 0 Then For Char = 1 To Len(WholeField) If Mid$(String:=WholeField, Start:=Char, Length:=1) = "," _ Or Char = Len(WholeField) Then NumberofValues = NumberofValues + 1 ReDim Preserve Values(1, NumberofValues) If Char < Len(WholeField) Then Values(1, NumberofValues) = Trim(Mid$(String:=WholeField, _ Start:=StartofLastValue, Length:=Char - StartofLastValue)) Else Values(1, NumberofValues) = Trim(Mid$(String:=WholeField, _ Start:=StartofLastValue, Length:=Char - (StartofLastValue - 1))) End If StartofLastValue = Char + 1 End If Next Char '------------------------- 'this section just loops through and shows that the array 'contains the correct data. 'Remove after you are finished testing Dim count As Integer For count = 1 To NumberofValues Debug.Print Values(1, count) Next count '------------------------- End If End Sub
Dim Char As Integer 'Char is used to hold each character in the string to see if it is a comma
Dim WholeField As String 'Wholefield is a string that holds the entire value of the field to be parsed
Dim Values() As String 'Values is the string array that will contain the parsed values
Dim NumberofValues As Integer 'NumberofValues holds the number of values in the 'wholefield' 'so that the 'Values' array can be redim'd
Dim StartofLastValue As Integer 'holds the number of characters from the left of the string where the last 'word started so the value can be pulled from the wholefield string and 'placed into the array
StartofLastValue = 1 NumberofValues = 0
'---Setting value of WholeField to be parsed WholeField = ActiveProject.Tasks(1).Text1 '--- If Len(WholeField) > 0 Then For Char = 1 To Len(WholeField) If Mid$(String:=WholeField, Start:=Char, Length:=1) = "," _ Or Char = Len(WholeField) Then NumberofValues = NumberofValues + 1 ReDim Preserve Values(1, NumberofValues) If Char < Len(WholeField) Then Values(1, NumberofValues) = Trim(Mid$(String:=WholeField, _ Start:=StartofLastValue, Length:=Char - StartofLastValue)) Else Values(1, NumberofValues) = Trim(Mid$(String:=WholeField, _ Start:=StartofLastValue, Length:=Char - (StartofLastValue - 1))) End If StartofLastValue = Char + 1 End If Next Char '------------------------- 'this section just loops through and shows that the array 'contains the correct data. 'Remove after you are finished testing Dim count As Integer For count = 1 To NumberofValues Debug.Print Values(1, count) Next count '-------------------------
End If End Sub