Cascade Skyline - with Microsoft Logo and Project Support header - author Brian Smith

  • Brian Smith's Microsoft Project Support Blog

    Project 2007 SP1 - The gift that keeps on giving


    So with the Holiday season in full swing - what to give that difficult person who has everything.  How about Project 2007 SP1?  Yes, the links should soon be live, and until then you can prepare by reading the TechNet article at 

    Please read all of the article - and also note that there is just one Microsoft Office Server 2007 SP1 which fits the whole family.  So don't go looking for a file that just says "projectserver" as you won't find it.  The file will be called officeserver2007sp1-kb936984... with the last piece of the file name referencing wither the 32 or 64 bit version.

    If you do have Microsoft Office SharePoint Server 2007 then the SP1 file is the same - but the document you should read as well as the one above is

    And for any version of Office Server you also need to load the Windows SharePoint Services 3.0 SP1 first (it won't work if you don't, and it will tell you why), and both Service Packs need loading on all servers in the farm (except your database server if it isn't doing anything else).  See the related links section of the article for more details on planning for the WSS 3.0 SP1.

    For the client there is a separate SP1.  It is not imperative that you load at the same time as the server - it will work if you load client first and do the server later - or the other way around.  I will update with the links when they are all available - but planning is important - so get reading!

    Links (But please READ the above documents FIRST!):-

    Office 2007 suite SP1 -

    Office Project 2007 SP1 -

    Office Project Language Pack 2007 SP1 -

    Office Servers 2007 SP1 -

    Office Server Language Pack 2007 SP1 -

    Windows SharePoint Services 3.0 SP1 -

    Technorati Tags: Project Server 2007

  • Brian Smith's Microsoft Project Support Blog

    Setting custom field values using the PSI


    We don't seem to have done a good job in educating our customers on this topic, so thought I'd put this out there at least as a starting point and I'm sure we can also try and get better samples in the SDK. 

    One of the tricky things with setting custom fields for any entity (Project, Resource or Task - but also assignment or timesheet) is that you cannot always just call up the dataset, navigate to the custom field row and set the value.  In many cases the row may not yet exist, so you need to add it, then set all the required properties and then update back through the PSI.

    As an example if you create a project through the PSI it will have no project level custom field rows created by default, (except ones based on Lookup Tables with a default value forced) and any tasks will only have the "Health" special custom field set, and again- any with Lookup Table defaults. If you then open in Project Professional and just save again, you will then have added any calculated fields at the project level, along with any calculated fields at the task level.  Also at this stage the project summary task (Task 0) is populated with any task level fields with roll up to summary level set.

    As my server does not have all the possible combinations of fields I may be missing something here - but ProjTool is a great way to see just what is in the dataset at any time.

    So whenever you are setting custom fields first see if the row already exists - and if not you will need to add a customfieldrow to whatever dataset you are working with.  Then the next step is to set the appropriate properties - which will depend on the type of field you are setting (defined by FIELD_TYPE_ENUM), and the dataset you are adding it to.  For instance a ProjectCustomFieldsRow will need the PROJ_UID.  A TaskCustomFieldsRow will need the PROJ_UID and the TASK_UID.  A Timesheet CustomFieldsRow will need the TS_UID to identify the timesheet and a TS_LINE_UID to identify the specific line.  Then for any row you need to set a new GUID for the CUSTOM_FIELD_UID, the MD_PROP_UID and/or the MD_PROP_ID to identify the specific custom field and the actual value you want to set in the appropriate property as detailed in the following table.

    Field Type ENUM Value Description Set field value in:
    COST 9 Value in 1/COST_MULTIPLIER dollars NUM_VALUE
    DATE 4 A date value. HIWORD contains days off set from 1/1/84. LOWORD contains minute off-set, ranging from 0 to 1440, from 12:00 A.M. (midnight) DATE_VALUE
    6 Value in 1/DUR_MULTIPLIER minutes DUR_VALUE and DUR_FMT
    TEXT 21 A string value TEXT_VALUE
    FLAG 17 Index into yes/no string table FLAG_VALUE
    NUMBER 15 A number value NUM_VALUE
    (Lookup Table)   GUID CODE_VALUE

    FINISHDATE is also listed in the SDK but is not applicable to these custom fields.  Lookup Table isn't specifically a custom field type - but I added it for completeness.  If the custom field is based on a Lookup Table then the LT_STRUCT_UID of the specific entry in the Lookup Table is entered in the CODE_VALUE property.  For those that accept multiple values there will be a row with each CODE_VALUE - not a single row with multiple CODE_VALUES.

    Another property you will come across in the datasets is the INDICATOR_VALUE - which will hold the enumeration value for the indicator to be displayed based on the custom field settings. 

    No code sample just yet on this - but I will try and come up with some shortly.  I am looking into a support incident where values are being set for summary tasks (or rather they are not) - these are likely to be read-only if "roll-up" is set, so be aware of that.

    *** Update *** Finally got a sample together - hope it is worth the wait - 

    The ProjCFDlg.cs sample in ProjTool and the Add Project Custom Field option on the Project Details pane of ProjTool is a great place to look for an example that covers this well.

    Other things to be aware of are that constraints applied to the custom fields will need to be adhered to.  If the custom field only allows selection of codes with no subordinate value (leaf nodes) then the PSI cannot over-ride this. 

  • Brian Smith's Microsoft Project Support Blog

    Project Server 2007 Users: Beware the Fabulous 40!


    No, this isn't some new group of super heroes or villains - but a set of templates you can load on SharePoint 3.0. See for full details.  But you should not load one of these templates if you already have Project Server 2007, as the Project Tracking Workspace solution included in the Fabulous 40 will overwrite the good Project Workspace template from Project Server.  When this happens the special features that don't exist in the WSS version, like linking risks, issues, documents and deliverables to project tasks, get broken.  So if you have already done this then your new link page looks like this:-


    when really it should look like this:-


    Notice the missing Link Items option.  Your server may not have the Spelling option - this server also has Office SharePoint Server.  I would expect bad things to happen in plenty of other places too.

    So how to fix it?  You can retract and delete the solution either using the UI of Central Administration or the stsadm command (see the readme that comes with the templates for removal instructions), and then you will need to run a repair of Project Server 2007 either from the setup.exe - or from the Change option in add/remove programs.  You will need to do this on all servers in your farm - and it may require a reboot, and you will need to run the configuration wizard to complete the process.

    So for Project Server 2007 users it should be renamed "The Fabulous 39"!  Thanks to Noel and Shazeb for their work on this topic.  We also plan to get some sort of warning on the download page.

    Technorati Tags: Project Server 2007

  • Brian Smith's Microsoft Project Support Blog

    EPM 2007 Test Data Population Tool


    The EPM 2007 Test Data Population Tool solution starter was published on CodePlex today:


    So if you need to get some sample data loaded up for testing purposes - this is the tool for you!  Documentation and source code is also posted  so this will also be a good tool for learning how the PSI is used for getting data into the server.


    Q & A is posted in the discussion area - but I'll repeat this one here...


    Q: Is the tool supported?

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




  • Brian Smith's Microsoft Project Support Blog

    How to check a project in through the database


    OK, so that was a mean trick.  Using a title like that to get you and your search engine to read about why you shouldn't check a project in through the database.  In the words of Douglas Adams "It doesn't necessarily get you where you wanted to go, but it turns out to be where you needed to be."

    With each successive version of Project Server we try to discourage direct database access more and more - and with 2007 we don't even document the ones we want you to stay away from.  There may be times when you do need to get to these databases to read stuff if it isn't available through the PSI or reporting database - and some very rare cases where bugs may lead to some database update being needed to resolve some data issue.  But in almost all cases a checked out project can be checked in without resorting to SQL.  The following steps are similar to how you would troubleshoot other queue problems - but are presented here specifically to work with checked out projects.

    1. The best first step if a project that you have closed and checked in says it is still checked out is to open read-only, then close - and then leave a short while and try and re-open.  This should flush through any pending check-in that gets caused by the closing bug in Project Professional 2007.  As mentioned before - if it is a large project or your server is VERY busy the save can take a little while - so patience may also be required.

    2. Assuming step 1 didn't help then time to look at the queue.  First we need to confirm it is still working.  A couple of options here - first in Manage Queue add the Job Completion State of "Success" to the view.  This should then show you what has been working.  A successful job in the recent past - or a job that says "Processing" and the % complete is still increasing are a good indication that things are working (just not for you).  A second check if this doesn't make things clear is to look at Task Manager on the Application Server (Right click the task bar and select Task Manager is a quick way to get this running) and check that you see multiple instances of Microsoft.Office.Project.Server.Queuing.exe on the Processes tab.  There should be (Number of Shared Services Providers with provisioned PWA site) + 1 instances.  So in most cases 2 - but possibly more.  Just seeing 1 is an indication that when the service started the database was inaccessible to the service so it could start the SSP specific instances.  Re-starting the service should resolve this.  just because in Administrative Tools, Services it says "Started" next to the service does not mean it is working!

    3. So we know the queue is working and I am guessing at this point that you have a "Waiting to be processed" against a Project check-in job.  And you may have selected a "Force check-in" several times too.  The word "Force" here is a misnomer - and should really be worded "Please check-in when you are ready".  If the job is waiting then it is waiting for something, and no amount of reboots, queue stop/starts will shift it.  We need to look deeper to find out what's holding things up.  In Manage Queue set the Job History to go back far enough to see any activity for the problem project, set the Filter Type to By Project and then just select the project you are interested in.  This should then show your pending check-in job as well as what is blocking it.


    4. So now you should see what is blocking the check-in, and the owner will show who was the last person doing something.  In my case it was a save from Project Professional that hadn't complete (still "getting queued" - which means data is coming from the client cache to the message queue). 

    5. If you are not the owner of the blocking job then get that person to repeat step 1.  This should allow the job to complete; although in the queue it may show as a cancel and re-save.  In this case the cancellation is done by the server as the save was in the very early stage.  If this worked then all is now well and you can get at the project.  This is the best resolution because NO DATA IS LOST!

    6. If you can't find the owner, or they have since deleted their local cache then step 5 will not be possible and the only option then is to cancel the job (after also checking the Advanced Option, Cancel jobs getting enqueued and optionally un-checking Cancel subsequent jobs in the correlation.)  Once the job is canceled then any subsequent jobs should complete OK and you are back in business.  Any changes made by the user who was saving WILL BE LOST!

    And if this doesn't work for you and you really do need to check-in through the database - let me know!

    Technorati Tags: Project Server 2007

Page 78 of 92 (458 items) «7677787980»