Project Server 2010: Timesheets – Where do Personal Tasks come from?

If you have the setting to allow personal tasks to be added to the timesheet then they of course could come from the user.  But what about the ones that haven’t been entered by the user and appear to have the same name as tasks that were in projects that they had already started work on?  We have had a few questions on this behavior so thought it worth a blog posting. So here is my timesheet – and I have 5 tasks in the “Project BriSmith TS Blog” project, and I’ve spent an hour on each – so I’ve entered the time and saved my timesheet. (Status is “In Progress”) Later on I go back to my timesheet and things have changed! So what happened?  The task names give you the clue, and the Project Manager (me) has followed through on his action for each of the tasks.  Basically if a task gets deleted while a timesheet is in progress then we do not delete the time that is already entered but instead the task gets changed to a Personal Task.  A couple of interesting things to note though – the task name is actually cached as part of the timesheet (in case it gets deleted!) so the spelling mistake was actually corrected in the plan for the “Correcttting the spellling” task – but the cached version is still shown.  This would be the case for any re-named task – as long as the resource was still assigned.  If I click through to the task I see the current name published from the plan – correcting the spelling:   The next thing to note is that if I delete and re-create a task then as far as project is concerned this is a new task (with a new unique GUID) so it shows up as a Personal Task (keeping the original entered time) and also as the new task. The 4th task is interesting – I unassigned myself from this task and then re-assigned – so this is actually a new assignment – but as far as the timesheet is concerned it still shows it related to the project.  Also if I had published after de-assigning I would have seen a Personal Task and then after re-assigning and publishing this personal task would be gone and the project task back again (along with the entered time).   This surprised me a little – so I had to take a look behind the scenes.  It appears that as long as you don’t assign this task to anyone else, then you will get the same GUID for the re-assignment – but if you re-assigned to someone else, and then added back the original resource then the GUID would change and the timesheet would show the same behavior as the deleted and re-created task – both a Personal Task with the already entered time and the ‘new’ project task. The 5th task just got deleted so no longer exists so my recorded time now shows against Personal Tasks.  And finally the untouched task is still there as expected. So if the Personal Task does really relate to a task that has been re-created in some way then the resource should copy the time entered across the the project task and delete the personal task (Remove Task in the ribbon).  If it has been removed for good then the personal task is a record of the time spent – and should remain (depending on your time recording processes). This is the behavior when the timesheet is “In Progress”. If it is approved then the Project name and Task name are persisted even if the task is deleted. Other actions can lead to this behavior – if the project is saved back to the server (save as) over the top of an existing plan then all tasks and assignments will be replaced by identical ones – and any tasks in progress will change to Personal Tasks in the timesheets.  Also before we fixed the bug with Save for Sharing in the June CU this would change the GUIDs too – and have the same effect. All the above behavior assumes that Single Entry Mode is turned off.  With Single Entry Mode turned on then the Personal Tasks do not appear – the tasks just go (along with the time entered into them) – and also any task name changes reflect immediately in the timesheet (it is a direct link to the task, rather than a placeholder in the timesheet).  The re-assignment to the same task, even though it maintains the same GUID does not keep the entered time.  Single Entry Mode keeps the My Tasks and Timesheet view in Sync and Personal Tasks are never seen on the My Tasks view.

Project Server 2010: SharePoint Permissions in upgraded PWA instances

I was reviewing a case yesterday and just checking the behavior of SharePoint permissions in Project Web App after an upgrade from 2007 to 2010 – either in place or a 5 database  – thought this might be useful information to blog about.  In 2007 in the Project Web Access site the users would be added directly to the site with SharePoint permissions based on their roles.  These permission levels were identifiable by their names which would be like Project Managers (Microsoft Office Project Server).  In the Project workspaces these same permission levels would be used, and the users again added directly based on their roles within the project.  So this generally be a small subset of the overall user population – just those added as resources on the plan, and potentially others depending on the use of the View Project Workspace permission within categories. Here is the start of the list of permissions on the PWA site – Project workspaces will be similar although the permission levels may be different. In 2010 in Project Web App we now use groups within the /PWA site and the users are added in to these groups rather than directly to the site.  The groups are named Project Managers Group (Microsoft Project Server), Team members group (Microsoft Project Server) etc.   Some individual user accounts will be present in PWA as shown below (blanked out) – these will be site collection administrators and other farm admins. For the Project sites (formerly called workspaces) we still add the users directly, but we have new SharePoint permission levels which are named similarly to 2007, but we have dropped ‘Office’ from the product name – so they are now like Readers (Microsoft Project Server), Web Administrators (Microsoft Project Server). If you upgraded from 2007 to 2010, either in place or 5 DB then you will retain the old permission structure – but also get the new ones too.  So for example you would see all your users individually in the Project Web App permissions, as well as them belonging to the respective groups.  At the Project Site level you would see the users but with both Permission Levels applied – so they might have Web Administrators )Microsoft Office Project Server), Web Administrators (Microsoft Project Server). All of this is the expected behavior and none of this will break anything, although I admit it may look unusual having the two sets of permission levels.  Also it does not leave any security issues as in 2010 if I remove someone from a Project plan then they get taken off the site with both sets of permission levels – and if I inactivate a user they are removed both at the individual level from PWA and also removed from the group that 2010 would have put them in – so all is good.  If you really wanted to then you could delete the permission levels with (Microsoft Office Project Server) in the names, and also remove the individual user permissions on PWA (apart from the site collection admins of course).  Worth checking that the groups contain the members you expect first just in case for some reason the sync hasn’t populated the groups yet.

Project Server 2010: Can I delay running the SharePoint Configuration Wizard?

In SharePoint 2010 when you upgrade to a new Cumulative Update or Service Pack this involves two main steps – first is loading the binaries, and the second is running the SharePoint Server 2010 configuration wizard (psconfig or psconfigui).  SharePoint supports delaying the running of the configuration wizard or even detaching content databases while running the wizard, so that these perhaps slow parts of the process can be managed in a more timely fashion.  If you look at a SharePoint farm that is in this condition you will see in Central Administration, Upgrade and Migration, Review database status, that it says against many of the databases (Content, Config, and Admin Content) – Database is in compatibility range and upgrade is recommended .  However, if you have Project Server installed then you will see against all of its databases (certainly for SP1/June CU) – Database is too old and upgrade is required .  Some other databases such as BDC or PPS ones may just say No action is required if there were no updates for schema in the particular release.  For some CUs you might see this for Project and the SharePoint content databases too. If you ignore this message and try and go to PWA then you will get an error message: Error, Project Web App cannot connect to Project Server. For more information, contact your system administrator. – along with a GUID for tracking the full error in the logs. Looking in the logs you will find the following exception and unexpected level records – which are pretty self explanatory. 08/23/2011 09:46:41.85    w3wp.exe (0x1724)    0x0FC0    Project Server    General    g7ls    Exception    System.ServiceModel.FaultException`1[Microsoft.Office.Project.Server.Interfaces.DefaultServerFault]: The databases are out of the range of compatibility, upgrade your databases. (Fault Detail is equal to Microsoft.Office.Project.Server.Interfaces.DefaultServerFault).    fe5f9380-1f54-4021-a6a2-5fe7d3e321e8 08/23/2011 09:46:41.85    w3wp.exe (0x1724)    0x0FC0    SharePoint Foundation    Runtime    tkau    Unexpected    System.ServiceModel.FaultException`1[[Microsoft.Office.Project.Server.Interfaces.DefaultServerFault, Microsoft.Office.Project.Server.Communications, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c]]: The databases are out of the range of compatibility, upgrade your databases.   Server stack trace:      at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc) … So to answer the question in the title – No, you cannot delay the running of the configuration wizard if you are using Project Server if there are database updates required in the particular patch you have loaded.  Not every CU will require database changes – but rememeber these are cumulative, so the need for the database update will also depend at what level your server is when applying the patch. 

Microsoft Project 2010: Cumulative Update Version Blog Updated

Just for reference – I have added the April and June CU information, and some notes around SP1 versions, to the on-going blog post at https://blogs.msdn.com/b/brismith/archive/2010/09/23/how-to-tell-which-cumulative-update-hotfix-or-service-pack-version-of-project-server-2010-and-project-2010-you-are-running.aspx .

Project Server 2010: Portfolio Analyses–How are equal priority projects chosen for resourcing?

A bit of fun for Friday afternoon.  A question came via the forums on the subject of Portfolio Analysis in Project Server 2010 and how a decision would be made on the allocation of resources if the projects had exactly the same priority.  Firstly there is no real optimization logic in the resourcing part of the analysis – most of the heavy lifting happens in the cost analysis – where other metrics can also be taken into account.  In terms of the resourcing this just happens in order of priority – so the top project gets resourced, then the next, and so on.  For any project where there is insufficient of any type of resource then that gets forced out.  But what if you have equal priority projects?  In truth the Portfolio Manager would probably make the call and force in or out appropriately – but it is still technically interesting to know how it happens (well I wanted to know anyway…) I had a play around with this today. So in my scenario I was also interested in seeing how equal cost choices were differentiated as well as equal priority ones chosen to get resourced. And the interesting result is that each appears to make the choice in the totally opposite way! If I have 4 projects of equal cost and equal priority then the order of selection if the budget is not available to do all of them is carried out in the order of their GUIDs (PROJ_UID from the SQL Server database table MSP_PROJECT) – but not in the strict order that SQL might use – that sorts by the lowest order grouping of the last 6 bytes, but in the more straightforward left to right order of the hexadecimal characters. As an example – SQL Server would put D741FE6E-D426-4A41-8BCC-370FDE23A3E4 before 6EDBF314-BFAE-4838-8CBC-6B95E91EC0C5 based on the last group (37.. before 6B..) but the order the Portfolio Analysis uses would take 6E… before D7… So almost random, unless you happen to know (and care) what your GUIDs are. Now on to the resourcing. This happens in entirely the opposite order. So the ‘highest’ value of GUID (still using the full left to right logic) will get resourced first and the lowest gets resourced last. Again – it is really irrelevant how this happens and I’d guess you’d be forcing things in and out based on other criteria rather than some random 32 character hexadecimal string. If you are keeping up – or slightly ahead of me – this opens up an interesting paradox. If I have 4 projects that have equal cost ($20,000 each) and equal priority – and I have a budget of $80,000 – but they each require a resource that I only have one of – then the project with the highest GUID will get selected for resourcing! However, if my budget is just $79,000 then that very same project would be the one that was rejected at the cost analysis stage – leaving the next highest to get resourced!

The Mystery Behind SharePoint 2010 Patching

I came across this great posting from Jie Li while looking around Stefan Goßner’s blog at https://blogs.technet.com/b/stefan_gossner/ and thought it would make interesting reading for the Project audience too.  One word of caution first – Jie Li mentions the well known SharePoint practice of detaching content databases while applying patches so that you can upgrade them at your leisure later – once you have re-attached them.  Project Server databases (Archive, Draft, Published and Reporting) ARE NOT content databases – please do no detach these while patching or you will get into an inconsistent state that may cause you (and then me and my support colleagues) big problems… On to the article – https://blogs.msdn.com/b/opal/archive/2011/06/30/the-mystery-behind-sharepoint-2010-patching.aspx . Enjoy!

Project Server 2010: How to best manage large numbers of resources

This posting follows on from the one yesterday concerning how Project Server makes use of SharePoint permissions and features – but concentrates on some potential issues you can run into if you have a very large user base and also have projects that have very large teams.  We are also authoring a TechNet article explaining this in more depth – I will add a link once it is published.  This isn’t going in to the usage of the RBS or the other internal feature – but concentrates more on the technical issues of large user populations.  If you fit in this category then read on… As mentioned in the previous post Project Server 2010 uses the normal SharePoint permissions infrastructure to set access control both to the Project Web App (PWA) site and also any Project sites that are created for the individual project plans held in Project Server.  At the PWA site level the users are added to certain groups depending on their permissions levels within Project Server, so you will generally see SharePoint groups for Project Managers, Readers, Team members, Web Administrators and finally Workflow and Project Detail Pages Administrators.  Each of these groups will show the individual PWA users as appropriate.  This is a change from 2007 where individuals were added to the PWA site with specific permission levels.  You may have seen issues in 2007 if you had large numbers of users as whenever changes were needed in the member permissions the users would be removed and then added back – so some users would get “Access Denied” until they were added back after a change.  We had some workarounds for this scenario involving turning off the user synchronization.  In 2010 we made a couple of changes to avoid this problem – firstly the change to using groups at the PWA site level, and secondly we now remove then add back each individual as opposed to removing everyone and then adding back everyone.  So getting an Access Denied in the same scenario in 2010 is very unlikely. At the Project site level however we do not use the group approach and manage the users on an individual basis.  In most scenarios this is not an issue as the number of resources assigned to a project, and hence added to a site, is generally low compared to the total number of users in the system.  However there could be some scenarios where customers wish to have many or all of their users accessing many or all of their project sites.  This could either be achieved by adding many users to a project – or by giving the “View Project Site” permission at the team member level in a category that included many or all projects.  Either way this would then add very many individual users with permissions to the project sites.  And why is this a problem?  If the numbers of users is large then it is possible for the recommended software boundaries and limits of SharePoint Server to be exceeded – and this can lead to performance issues.  Each user added individually to a site would be considered a security scope – and the recommended maximum number of unique security scopes per list is 1,000 (SharePoint Server 2010 capacity management – Software boundaries and limits – https://technet.microsoft.com/en-us/library/cc262787.aspx ).  So each list and library in the site would be inheriting from the parent site permissions – and would exceed this limit if more than 1,000 user had access to the site (as they are individually added). In our experience the performance issues would then relate to any change in the site membership caused by changes in the categories or groups – or following such actions as adding a user or inactivating a user.  For example this last action of inactivating a user will actually remove that user from all sites they have access to – and the reason the limit is imposed is that when it is exceeded the process of removing a user can become very slow – particularly if this same user is also being removed from very many sites each of which is also way over the limit.  In extreme cases with multiple user inactivations it is possible that the server will become unresponsive and unable to authenticate users. I will include some of the error messages you might see, and the corresponding ULS entries at the end of this posting so that this aids finding this potential cause. If you are following along (and I’m sure some of my readers are way ahead of me…) you will realize there is a Catch-22 here.  Your server could become unresponsive whenever you need to manage users because you have too many users with permissions on the sites.  So remove some users… which will then make the server unresponsive…  How to escape from this loop?  There are some quick ways to get this resolved – but before rushing in to that it is better to review what it is you are really trying to achieve.  If the desire is that most people can access most projects then managing the permissions outside of Project Server using groups and inheritance from PWA is the way to go.  If however the fact that many users had access to many sites was really a mistake then you need to correct that issue – and either remove the “View Project Sites” from the offending category or reduce the number of resources assigned to the plans – but first of course you need to stop the synchronization of users to the sites otherwise any action may make your server very slow.  As mentioned in the previous post this can be achieved by us of the UserSyncSettings method – and just repeating that here to save you having to open that post up: The setting can be changed using the PSI and the Admin Web Service and the UserSyncSettings method. The enumeration of values that can be set are detailed at https://msdn.microsoft.com/en-us/library/websvcadmin.usersyncsettings_di_pj14mref.aspx , and the method described at https://msdn.microsoft.com/en-us/library/gg229480.aspx . Turning off the Project Site sync is achieved by the enumeration DisablePWS.   Member name Description Enabled Value=1. Enable all synchronizations. DisablePWA Value=2. Disable synchronization with Project Web App. DisablePWS Value=4. Disable synchronization with project sites for the user. DisableEmailSync Value=8. Disable email synchronization. DisableAll Value=16. Disable all synchronizations. This relates to settings in the MSP_WEB_ADMIN table of the Published database in the WADMIN_USER_SYNC_SETTING column. So for example a query such as: Update [ProjectServer_Published].[dbo].[msp_web_admin] set [WADMIN_USER_SYNC_SETTING] =4 would do the same as using the method to set the enumeration: int syncSettings = (int)SvcAdmin.UserSyncSettings.DisablePWS; We’d certainly prefer you to not touch the DB correctly – but I’m guessing that many of you would find it much easier to execute a SQL query to update the value than to write the code necessary to do the same (I certainly would!). Once that is turned off then you can safely do user management without causing further performance problems – but of course it would still be possible to trigger the same issues if you tried removing the users directly from the project site, using the out of the box SharePoint functionality. One way to remove the users very quickly without triggering the individual deletion that causes the problem is to inherit permissions from the parent.  This can be done via the UI on the Site Actions, Site Permissions page of the individual sites: This will lose any custom permissions.  If your end goal is to give most users access to most sites then this may be how you want to keep things long term – so before taking this action you would probably want to be sure that the PWA site has the right permissions for all the users who need access – as that will be where this site will start inheriting from once you click the button.  Obviously if you have thousands of sites (and you probably have if this is causing you problems) then PowerShell can automate the change for you. Run the following PowerShell command in the SharePoint 2010 Management Shell $site = Get-SPSite “ ” Foreach ($web in $site.AllWebs) {
        $web.Update()         $web.ResetRoleInheritance()         $web.Update()         } $site.Dispose() This (or the UI method) would also need to be run for any new sites created to avoid the problem coming back – but if you had ‘corrected’ your categories and team memberships then all would be ok going forward. If you do decide that leaving everything inheriting is right for most projects then you may also want to have certain projects that are more ‘secret’ and for these you will need to continue to manage the permissions and user on an individual level.  One thought I had was to set a property on these ‘special’ sites via PowerShell and then you could use this property to filter out in a modified version of the above PowerShell command and ensure you didn’t reset the role inheritance accidentally.  I should also point out that if you use the Synchronize option on the Project Sites page then this would re-break the inheritance – so should be avoided. As a guide we have seen the issue with a customer with around 3000 users where they are nearly all added to each of their 1500 sites.  And as promised, here are the error messages and ULS entries.  Different users may see different symptoms – but the user who initiates the issue, perhaps by inactivating a couple of resources, will see the ‘Save’ button on the page apparently stick on the ‘clicked’ position and eventually get a “An unexpected error has occurred.” message.  The correlation ID will be found in the ULS logs and will have several rows all relating to a SQL deadlock and the Critical level one will look like: 08/10/2011 12:17:02.85    w3wp.exe (0x2178)    0x314C    SharePoint Foundation    Database    5586    Critical    Unknown SQL Exception 1205 occurred. Additional error information from SQL Server is included below.  Transaction (Process ID 80) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.    886d9cdd-5c0c-4f3a-8f89-f4e8c92acde3 Another High level one that gives more information on the query causing the issue will be something like: 08/10/2011 12:17:06.97    w3wp.exe (0x2178)    0x314C    SharePoint Foundation    Database    tzkv    High    SqlCommand: ‘SET NOCOUNT ON; DECLARE @DN nvarchar(256),@LN nvarchar(128),@@DocUIVersion int,@@S uniqueidentifier,@@Level tinyint; DECLARE @ItemId int; DECLARE @@iRet int; DECLARE @ExtraItemSize int; SET @@Level = 1; SET @@S=@wssp0;  EXEC @@iRet = proc_SecRemoveUserFromSite @@S, @wssp1, @wssp2  SELECT @ItemId = @wssp3  IF @@iRet 0 BEGIN  GOTO DONE; END  ;BEGIN TRAN IF NOT EXISTS( SELECT tp_ID FROM UserData WHERE tp_ListId = ’06C8C9BB-B10B-4042-8859-9F9985E73E76’ AND tp_ID = @ItemId  AND tp_Level = 1 AND tp_RowOrdinal =0) BEGIN  SELECT @ExtraItemSize = 0  EXEC @@iRet = proc_AddListItem @SiteId…. I have shortened it considerably – but the key piece is the proc_SecRemoveUserFromSite.  Finally the ‘Unexpected’ one: 08/10/2011 12:17:06.97    w3wp.exe (0x2178)    0x314C    SharePoint Foundation    Runtime    tkau    Unexpected    System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x80131904    at Microsoft.SharePoint.Library.SPRequestInternalClass.UpdateMembers(String bstrUrl, UInt32 dwObjectType, String bstrObjId, Guid& pguidScopeId, Int32 lGroupID, Int32 lGroupOwnerId, Object& pvarArrayAdd, Object& pvarArrayAddIds, Object& pvarArrayLoginsRemove, Object& pvarArrayIdsRemove, Boolean bRemoveFromCurrentScopeOnly, Boolean bSendEmail)     at Microsoft.SharePoint.Library.SPRequest.UpdateMembers(String bstrUrl, UInt32 dwObjectType, String bstrObjId, Guid& pguidScopeId, Int32 lGroupID, Int32 lGroupOwnerId, Object& pvarArrayAdd, Object& pvarArrayAddIds, Object& pvarArrayLoginsRemove, Object& pvarArrayIdsRemove, Boolean bRemoveFromCurrentScopeOnly, Boolean bSendEmail)    886d9cdd-5c0c-4f3a-8f89-f4e8c92acde3 Once the sever is in the condition – which could last 15-30 minutes, then other users will get timeouts on their pages and the ULS logs may show the following: 08/10/2011 12:20:22.30    w3wp.exe (0x1228)    0x1454    SharePoint Foundation    Monitoring    b4ly    High    Leaving Monitored Scope (ExecuteStoredProcedureDataReader — MSP_AUTH_GETUSERBYNAME). Execution Time=120002.728838442    2be0491a-a64b-4237-8cfc-40342a374d49 08/10/2011 12:20:22.30    w3wp.exe (0x1228)    0x1454    Project Server    General    8ym5    Monitorable    PWA:https:// /PWA, ServiceApp:Project Web App Service Application, User:, PSI: SqlException occurred in DAL:  0 0 -2     System.Data.SqlClient.SqlError: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.         at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)     at … I should also point out that use of the Project Site Provisioning Settings page option to not automatically synchronize users may avoid you getting in to this situation – but you still need some process to control access – and if most sites are unrestricted then the inheritance option from PWA may be worth a try.  Just as a reminder – the option on the Project Site Provisioning Settings page looks like this: and un-checking will stop the automatic addition of Project Server users to sites (but will not remove ones who are already there). Hopefully the workarounds given will assist in avoiding these types of issues if you really need to have very large numbers of users accessing each of a large number of project sites. As promised – once we have a TechNet article out in the wild I will link to it.

Project Server 2010: Problems when bulk editing too many resources

I came upon this bug while working on my earlier posting regarding Reporting Database Refresh https://blogs.msdn.com/b/brismith/archive/2011/07/14/project-server-2010-reporting-database-refresh-failing-with-large-resource-pools.aspx – and specifically trying to bulk edit lots of resources at once in the Resource Center.  It appears we throw a very complex and large query over to SQL and it has some issues parsing it.  The failure is pretty silent for the user – who just gets the Resource Center page back and might assume everything worked ok.  However there will be no jobs in the queue, the change will not have been made – and the resources will all be left check-out (as you will find out if you try the process again!).  The answer is to check all the resources back in again (or at least the ones you checked out – someone else may be doing work with other resources) and then reduce the number you have selected and try again.  The size and complexity of the query depends mainly on the number of resources, but also will be affected by the number of custom fields at the resource level – but my finding were that you could edit around 400 resources at once with bulk edit if you had around 24 resource custom fields.  Your mileage may vary! The errors that are seen are interesting – in that it appeared to depend on the severity of the issue.  With just over the triggering number of resources the failure was pretty silent in the USL logs and SQL Server – exceeding by a few more (20+) then gave errors in SQL Server of Error: 208, Severity: 16, State: 0 (which tends to mean object not found, and I’m guessing it was not finding the temporary table it wanted to use in part of the query) – but still nothing much in the ULS logs – and it was only when increasing the number of resources close to 500 did I see the following in SQL Server Exception – Error: 191, Severity: 15, State: 1 User Error Message – Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries. and then the ULS logs gave me an exception too: 07/15/2011 15:49:02.07 w3wp.exe (0x19B8) 0x220C Project Server General 0000 Exception Exception occurred in method Microsoft.Office.Project.Server.BusinessLayer.Resource.ReadResources Microsoft.Office.Project.Server.DataAccessLayer.FilterDal+FilterException: Error during filter query execution. Query: declare @ResUid UniqueIdentifier; set @ResUid = eb736432-cd8d-4db2-8d9b-ad57bb3f0085; declare @EntUids NVarChar; set @EntUids = e162554e-45f0-496a-a86e-0010ef91ae13,bb57a927-1b4b-42e9-b29b-001c63e0b53c,… followed by hundreds more GUIDs I’ll be logging this bug internally too so we can consider a fix for it – or at least a limit on the resource selection so you don’t run in to this one.

Some blog updates to my site to make the most of IE 9

Some of you may have noticed that my blog now prompts if you want to pin it to your Task Bar and then it will also give you some Jump List items to go to the recent posts directly, or over to the Project Administration blog.  I hope you find this useful.  If you haven’t seen these features or the prompt then perhaps you are not running IE 9?  Or have IE 9 running in compatibility mode?  Now is the time to take a look! You can either use the prompt in the floating bar or just drag the tab down to your task bar in Windows 7 (Server 2008 R2 with the Desktop Experience feature – as I am using in the first screen shot) and it will look something like this: and if you ‘right-click’ then the jump list looks like this (this time from Windows 7) Let me know if you think there are other useful Tasks to add to the jump list.  If you want more details on IE 9 then the Beauty of the Web site is a good starting place – and if you want to do something similar then take a look at https://www.pinmywebsite.com/ .  Thanks also to Stephanus Schulte who shared some of the details on doing this for our MSDN/TechNet blogs – as he has done at https://blogs.technet.com/b/sieben/ Enjoy!

Project Server 2010: Reporting Database Refresh failing with large resource pools

If you have a large(ish) resource pool, with over about 1500 resources then you may run in to an issue with the Reporting Database Refresh not completing correctly – with the initial symptom that many of the Reporting (Resource Sync) and all of the Reporting (Project Sync) jobs may just say Cancelled and if you click through to the errors from the queue you will see: Reporting message processor failed: ReportingResourceChangeMessageFailed (24008) – A RDS message that was spawned during a RDB refresh operation attempted to execute outside of the time range in which the refresh operation run.. Details: id=’24008′ name=’ReportingResourceChangeMessageFailed’ uid=’e3caf6d3-cc85-4078-90d3-1ce1ad929776′ QueueMessageBody=’Resource UID: ‘7d536aef-9be1-46c7-971a-286e384918c8′. ChangeType=’Add’. ResourceChangeType=’All” Error=’A RDS message that was spawned during a RDB refresh operation attempted to execute outside of the time range in which the refresh operation run.’. Or Reporting message processor failed: ReportingProjectChangeMessageFailed (24006) – A RDS message that was spawned during a RDB refresh operation attempted to execute outside of the time range in which the refresh operation run.. Details: id=’24006′ name=’ReportingProjectChangeMessageFailed’ uid=’bfd6372f-b545-4368-8b8e-00807de566f0′ QueueMessageBody=’Project UID=’65cae55a-48e3-44fe-826e-f4f7fa478cc8′. PublishType=’All” Error=’A RDS message that was spawned during a RDB refresh operation attempted to execute outside of the time range in which the refresh operation run.’. and if you look in the ULS logs then you will see something like: 07/14/2011 12:19:04.56    Microsoft.Office.Project.Server (0x2084)    0x2538    Project Server    Reporting    auhd    High    PWA:https://Server/PWA, ServiceApp:Project Server Service Application, User:DOMAINUser, PSI: [RDS] ULS Event: ReportingResourceChangeMessageFailed was associated with exception: Microsoft.Office.Project.Reporting.ProjectReportingPublic.ReportException: A RDS message that was spawned during a RDB refresh operation attempted to execute outside of the time range in which the refresh operation run.     at Microsoft.Office.Project.Server.BusinessLayer.ReportingLayer.RDSBaseMessageProcessor.CheckIfAllowedToProceed(ReportingBaseMessage msg, MessageContext msgContext, Group messageGroup, JobTicket jobTicket)     at Microsoft.Office.Project.Server.BusinessLayer.ReportingLayer.ResourcesChangedMessageProcessor.HandleMessage(Message msg, Group messageGroup, JobTicket jobTicket, MessageContext mContext)    ae4c9ca3-2a2c-44d1-b7d3-3d54589fcc8a 07/14/2011 12:29:16.10    Microsoft.Office.Project.Server (0x2084)    0x3868    Project Server    Reporting    atwr    High    PWA:https://Server/PWA, ServiceApp:Project Server Service Application, User:DOMAINUser, PSI: [RDS] ULS Event: ReportingProjectChangeMessageFailed was associated with exception: Microsoft.Office.Project.Reporting.ProjectReportingPublic.ReportException: A RDS message that was spawned during a RDB refresh operation attempted to execute outside of the time range in which the refresh operation run.     at Microsoft.Office.Project.Server.BusinessLayer.ReportingLayer.RDSBaseMessageProcessor.CheckIfAllowedToProceed(ReportingBaseMessage msg, MessageContext msgContext, Group messageGroup, JobTicket jobTicket)     at Microsoft.Office.Project.Server.BusinessLayer.ReportingLayer.ProjectPublishMessageProcessor.HandleMessage(Message msg, Group messageGroup, JobTicket jobTicket, MessageContext mContext)    ae4c9ca3-2a2c-44d1-b7d3-3d54589fcc8a The first message will appear for cancelled resource sync jobs, and the second for projects.  If you don’t happen to notice this issue, then the next thing you might see are failed reporting publish jobs such as the resources that assignments belong to may not exist in the reporting database (if they were among the cancelled ones.  These errors will look something like this: Reporting message processor failed: ReportingProjectChangeMessageFailed (24006) – The INSERT statement conflicted with the FOREIGN KEY constraint “FK_MSP_EpmAssignment_ResourceOwnerUID”. The conflict occurred in database “ProjectServer_Reporting”, table “dbo.MSP_EpmResource”, column ‘ResourceUID’. The statement has been terminated.. Details: id=’24006′ name=’ReportingProjectChangeMessageFailed’ uid=’6b806909-7a24-4409-8b80-b898f4a904a9′ QueueMessageBody=’Project UID=’79bf1075-a46a-467c-828a-24a1dc00ebbb’. PublishType=’ProjectPublish” Error=’The INSERT statement conflicted with the FOREIGN KEY constraint “FK_MSP_EpmAssignment_ResourceOwnerUID”. The conflict occurred in database “ProjectServer_Reporting”, table “dbo.MSP_EpmResource”, column ‘ResourceUID’. The statement has been terminated.’. Queue: GeneralQueueJobFailed (26000) – ReportingProjectPublish.ReportProjectPublishMessageEx. Details: id=’26000′ name=’GeneralQueueJobFailed’ uid=’29aca4ff-eb33-46ac-b6e6-1126f8532dae’ JobUID=’8ed284d5-7015-4e6e-a344-6380aae4b0d1′ ComputerName=’ServerName’ GroupType=’ReportingProjectPublish’ MessageType=’ReportProjectPublishMessageEx’ MessageId=’1′ Stage=”. For more details, check the ULS logs on machine ServerName for entries with JobUID 8ed284d5-7015-4e6e-a344-6380aae4b0d1. To better understand the reason for the failure it may help to understand more about the reporting database refresh process.  It is a process that gets automatically started based on certain conditions that would mean the data in the reporting database would not be consistent – and the most common of these is that some metadata such as the custom fields have been restored from archive.  Once this happens then the reporting data may be incorrect – as it may have custom field data that no longer makes sense – for CFs that were not in the archive so they no longer exist.  If you monitor the queue you will see an initial job that says Reporting Database Refresh and this will soon change to Reporting Database Refresh(Sleeping) – which is ok.  You will then see several sets of jobs getting added at intervals.  It will look something like this: Reporting (Fiscal Period Sync) – Immediate Reporting (Resource Capacity Range Sync) – Immediate Reporting (Lookup Table Sync) for each lookup table, and added to the queue 5 minutes after the Reporting (Resource Capacity Range Sync) Reporting (Custom Field Metadata Sync) for each custom field, and added to the queue 5 minutes after the Reporting (Lookup Table Sync) Reporting (Entity User View Refresh) for each view and added at the same time as the Reporting (Custom Field Metadata Sync) Reporting (Resource Sync) for each resource and added to the queue 5 minutes after the Reporting (Entity User View Refresh) Reporting (Workflow Metadata Sync) for stage, phase etc. – added 5 minutes after Reporting (Resource Sync)’s finish Reporting (Enterprise Project Type Sync) for the EPT’s – added at the same time as the Reporting (Workflow Metadata Sync) Reporting (Project Publish) for each project and added 5 minutes after the Reporting (Enterprise Project Type Sync) Reporting (Timesheet Assignments Refresh) – added 10 minutes after the Reporting (Project Publish) Reporting (Timesheet Project Aggregation) one for each timesheet period – added at the same time as the Reporting (Timesheet Assignments Refresh) While all this is going on the initial job will wake every few minutes to make sure things are still going along OK – and it is at this point that the bug this blog is about can break things.  It is a timing issue and it is possible that when the waking job checks to see if all is OK it gets a response it is not expecting so it thinks things have failed – writes a failure message to one of our database tables along with a failure time.  Subsequent jobs are checking this table too and will see that things have apparently failed so they will just cancel (or some of the jobs may show “Failed but not blocking correlation”).  This is the reason for the error message saying “A RDS message that was spawned during a RDB refresh operation attempted to execute outsid
e of the time range in which the refresh operation run” – as the current time does not fit between the apparent start and end time of the reporting database refresh. So how to recover?  There will be a fix coming along – and my hope is that it will make the August 2011 Cumulative Update – but there is a workaround if you should find yourself in this situation.  You will need to force a reporting update for all the resources and all the projects.  For the resource you can open them in Resource Center and Save (no change needed), and you will see the Reporting (Resource Sync) and the Reporting (Timesheet Project Aggregation) jobs kicked off for this user.  The reason you need to refresh all resources and not just the ones that failed is this second group of jobs – the Reporting (Timesheet Project Aggregation) – which puts data from the admin lines of the timesheets into the MSP_EpmAssignments and MSP_EpmAssignmentsByDay tables.  You can use the Bulk Edit option to enable you to do multiple resources at once but for this to work you need to make a change (you could add a new CF and just type some text into it)  – and you also need to be sure all your resources are checked in.  You may find the page a little unresponsive when you hit Save (you might want to limit it to a few hundred at once – I did around 200 at a time and that worked for me .  A trick that might help – if you select a group of rows using the shift-click you can then check the select box for all of the selected rows.  I’m still playing around with the options here – I will update the post if I find some new tricks and tips. For projects you will need to re-publish all the plans.  You can do this either using ProjTool from the SDK https://msdn.microsoft.com/en-us/library/gg446880.aspx or use a PowerShell commands made available by the code gallery sample at https://archive.msdn.microsoft.com/pj14PowershellPSI .  The getting started guide on that page has a sample that can do a check-out, publish and check back in.