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

September, 2007

  • Brian Smith's Microsoft Project Support Blog

    PSI: Filter constraints and escaping the recursive event handler

    • 3 Comments

    A couple of topics that have come up through support incidents and comments posted here.  The first on the use of the filter or xmlFilter parameters available in a few of the web services, and the second talking about event handlers and what happens if you fire an event based on Check-In that then issues a check-in - how do you break the loop?

    Filters

    The SDK details how the xmlFilter parameter can be used to filter the returned dataset and the sample code covers the CustomFields dataset.  However there are a couple of limitations that you should be aware of.  You can use the PSLibrary.Filter.Fields.Add to control the columns returned in the dataset and PSLibrary.Filter.Criteria to control the rows.  The criteria can only be used against the main tables of the dataset and cannot be used to filter rows in the secondary datasets.  For example the Resource web service has the ResourceDataSet which contains the ResourcesDataTable as the main datatable and also several others including the ResourceAvailabilityDataTable.  Only rows in the ResourcesDataTable can be filtered using criteria. You will get a ResourceFilterInvalid Exception (or CalendarFilterInvalid exception if you try to use criteria on CalendarExceptionsDataTable of the Calendar web service).  This should be fairly obvious as the construction for the criteria does not allow for a specific DataTable to be referenced.  The other limitation is less obvious and will be corrected in our documentation shortly.  The ResourceCustomFieldsDataTable cannot be filtered at all using the filter parameter - you will get a ResourceFilterInvalid exception.  In both cases you can of course use filter on the client once you have the full dataset returned.  Another option would be to create your own PSIExtension that does the extra filter and keep everything server side.

    Recursive Event Handlers

    I addressed this question from a comment but might be useful for a full posting.  So if as part of your workflow you have an event handler for check-in, and when it fires you need to update something in the project then you will also need to check-in when you have finished, which will then fire the event handler and so on.  The best way I could think of to break the circle is to set a specific string as the session description when you use the check-in in your event handler.  Then you can check in your code before checking out if the sessions description in the project dataset is the one for your event handler - or a user session description which will be of the format machinename\pwa_account.  If it is your setting then no need to continue.  If anyone has a better way then please share.

    Technorati Tags: Project Server 2007

  • Brian Smith's Microsoft Project Support Blog

    Joining the translation bandwagon

    • 1 Comments

    I just saw Treb's posting on the new Windows Live Translator service that was rolled out this week - so I too have added a link in my News column on the left hand side.  I hope this helps my readers who prefer to read their own language.  I'm guessing it will not make much sense for real error messages - please let me know how it works for you.

  • Brian Smith's Microsoft Project Support Blog

    So where did all these GUIDs come from?

    • 0 Comments

    Project Server 2007 makes much more use of GUIDs to identify different entities than the previous version so I thought I'd do a quick post to explain what they are, why we use them and how you should use them.  GUIDs were originally a priestly class in ancient Celtic societies.  No sorry, that was Druids.  GUIDs are Globally Unique Identifiers and are 128 bit numbers usually represented in the database and ULS logs as a sequence of hexadecimal digits.  They are not guaranteed to be unique - but with 2122 or 5.3×1036 to choose from you shouldn't see duplicates (or if you do it might be the right day to buy that lottery ticket!).

    One future benefit the move to GUIDs could give us is the potential for consolidation of servers - or the use of replication between servers - where we can be sure that all the entities are unique.  With Project Server 2003 there would always be a project 101 in every server, so difficult to combine data from two servers.  GUIDs lead the way to federated servers.

    One place where you may need to use GUIDs is as an identifier for new users you add through the FormsAuthUpgrade tool.  A recent support case had a customer sure that his GUIDs in his users.xml file were correct but still got an error:

    Error: An error occurred creating user janedoe in membership provider. Error: Guid should contain 32 digits with 4 dashes

    Closer examination showed the GUIDs had the character "g" and they should only contain hexadecimal digits (So 0-9 and a-f).  In my testing I have been known to start with one GUID and just change the last numbers for other users so I can see how this can happen (pseudo GUIDs - as my colleagues call them).  Better to use a tool to give you a new unique one.  Visual Studio can do this through Tools, Create GUID - or you can do it in code. 

    If you have ever had to search logs or the database looking for a particular GUID then you will also appreciate that you don't want too many that look the same - and better still to have the first few characters different.  In most cases if you look at the first 4 or 5 digits you would be unlucky to find duplicates in even a large dataset.  To find out even more see the entry on Wikipedia http://en.wikipedia.org/wiki/GUID.

    One useful relationship you should be aware of is that the Correlation Id you see in the queue and in the logs will actually be the Project GUID for any project-related queue job.

    Technorati Tags: Project Server 2007

  • Brian Smith's Microsoft Project Support Blog

    In case you missed it - Improving cube build performance

    • 1 Comments

    I know a lot of you already read Chris's Project Programmability blog - but in case you haven't seen this posting from last week it has a great tip for using the SQL Server 2005 capability of guiding a query to be executed in a specific way without touching the query itself.  This uses sp_create_plan_guide.  See http://blogs.msdn.com/project_programmability/archive/2007/09/07/improve-the-performance-of-building-the-project-server-data-analysis-cube.aspx for full details.  For this particular customer scenario this made the difference between the query taking 17 hours and just minutes!

    Technorati Tags: Project Server 2007

  • Brian Smith's Microsoft Project Support Blog

    What do the Language Packs give you? Part 2: Office Clients

    • 3 Comments

    So we have seen in my previous post what server language packs do for Project Web Access, so now what happens on the client?  The language packs and language settings work for all of Office, but I will be concentrating on Project.  To change the settings once a language pack has been added you go to Microsoft Office Language Settings 2007, which is under the Microsoft Office, Microsoft Office Tools start menu.  If you have not added any client language packs then you will see just two tabs - the right hand two in this first screen shot.  Once you have another language available then you will also see the Display Options tab.

    image

    In this example I have a US English initial installation and have added Korean, Japanese and French language packs.  So I can choose my display language and help language to be any from the set.  It is possible to have some languages appear in the list that have not been loaded for all products - hence the option for preferences.  SO if I have French as my preference but have only loaded it for Project then I will see the next available language when I use Excel or any other Office product.

    So if I select Office menus as French and Help as Japanese I see the following when opening Project and viewing Help.  The dual language can be helpful when a corporation has a common language they wish to work in - but individuals may find help in their native language to be more useful.

    image

    To show the full support for extended characters I can open a project saved from a Greek language version of Project, which also has some Japanese and Korean characters in the task names.  The date format follows your Windows settings - so if you want a format such as Day/Month/Year you will need to set this as well as the language for Office.

    image

    So for both client and server the language support for Project goes beyond what was offered for 2003 - no more issues with codepages!

    Technorati Tags: Project Server 2007

Page 1 of 2 (6 items) 12