Project and Project Server June 2012 Cumulative Update

The June CU is out for Project and Project Server – and we have the full details posted at http://blogs.technet.com/b/projectadministration/archive/2012/06/29/microsoft-project-server-and-sharepoint-server-2007-and-2010-june-2012-cu-announcement.aspx .  Thanks Rob for the information. A couple of quick points worth mentioning: We have a delay on the roll-up package for 2010 – so if you usually use the roll-up and need to test Project Server fixes you can do this with the individual package until we get the rebuild – hopefully later this week. On the 2007 side the June CU for Project Server does include the fix for the Reporting Publish issue I wrote about at http://blogs.msdn.com/b/brismith/archive/2012/05/23/project-server-2007-reporting-project-publish-queue-job-fails-to-complete.aspx – so if you have been suffering with that one your wait is over.  Sorry for the inconvenience that I know this issue caused many of our customers. Final point – and a frequently asked question – what is the difference between a hotfix and a cumulative update?  In reality nothing – for Office and SharePoint the Cumulative Update is really just a hotfix released on a defined timetable – every other month, around the last Tuesday of the month.  The KB article will always describe it as a hotfix – and it generally does not mention the term Cumulative Update.  The TechNet Update Center is a great place to go for all information on the updates – http://technet.microsoft.com/en-us/office/ee748587.aspx .  There is an RSS feed too!

Project Server 2007: Reporting (Project Publish) queue job fails to complete

This is an issue that several of my readers raised in response to the posting about the orphan baseline posting a few weeks ago, and we know that this is something that more and more customers are now hitting.  The problem was introduced with the February 2012 Cumulative Update for Project Server 2007, and was also present in the April CU too – so if you have installed either of these and have started seeing Reporting (Project Publish) queue job fails to complete then read on. The symptoms are that a project will successfully save and publish, but the Reporting (Project Publish) job will fail to complete, and the error will look something like this (truncated – but the ReportingProjectChangeMessageFailed piece will be repeated based on your queue setting for the retry limit. Error summary/areas: Reporting message processor failed ReportingProjectChangeMessageFailed Queue GeneralQueueJobFailed Error details:                                 The issue occurs because we are missing a NULL check when accessing the task baseline cost – so if it is NULL we get the “Object reference not set to an instance of an object” message.  We are working on a hotfix to correct this behavior, but we also have a workaround that can provide some immediate relief.  This is a macro that can be run on affected project and will set a zero (non-NULL) assignment baseline fixed cost in place of the NULL we are tripping up on.  Below is the macro code that will need to be added to Project in the macro editor, and executed against the plan.  DISCLAIMER: As with any macro code you should review and understand exactly what this code is doing and that you are comfortable to run this on your own plans (and read the disclaimer) – and should also execute this in a test environment first.  It would also be good practice to take an Administrative Backup in your production system to ensure you have good backup copies of your plans (in addition to any normal SQL Server backup).  Also worth mentioning at this point that you should really have the number of project administrative backups set to give you several versions of your plan (Project Retention Policy (versions) – under Server Settings, Database Administration, Schedule Backup. ‘DISCLAIMER OF WARRANTY ‘ ‘THIS FIX CODE IS PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND. ‘MICROSOFT FURTHER DISCLAIMS ALL IMPLIED WARRANTIES INCLUDING WITHOUT ‘LIMITATION ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR OF FITNESS ‘FOR A PARTICULAR PURPOSE. THE ENTIRE RISK ARISING OUT OF THE USE OR ‘PERFORMANCE OF THE CODE REMAINS WITH YOU. ‘ ‘IN NO EVENT SHALL MICROSOFT OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES ‘WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF ‘BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, ‘OR OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE ‘THIS MACRO, EVEN IF MICROSOFT HAS BEEN ADVISED OF THE POSSIBILITY OF ‘SUCH DAMAGES. BECAUSE SOME STATES DO NOT ALLOW THE EXCLUSION OR ‘LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ‘ABOVE LIMITATION MAY NOT APPLY TO YOU.   ‘This macro attempts to work around the reporting publish failure that occurs when there are tasks ‘with baselines and where the BaselineCost contour is NULL. The symptoms that you see in the queue ‘for the “Reporting (Project Publish)” job has details similar to: ‘ ‘ ‘ ‘This code simply walks through the tasks in the tasks in the project and if there are ‘baseline(s) set, then the code sets a time scaled baseline cost = 0 on the day prior to ‘where the baseline start is scheduled.  This sets the baseline contour so that the ‘”Object reference not set to an instance of an object” problem can be overcome during the ‘reporting publish job. Sub FixPublish() Dim t As Tasks Dim tsv As TimeScaleValues Dim i As Long Dim bCalc As Boolean On Error Resume Next ‘get the current application calculation state bCalc = Application.Calculation ‘set calculation to manual (helps with performance while the code runs) Application.Calculation = pjManual Set t = ActiveProject.Tasks ‘walk through the tasks in the project. If a task as a baseline(s) then set a timescaled baselinecost = 0 For i = 1 To t.Count     If Not t(i) Is Nothing Then         If t(i).BaselineStart “NA” Then             Set tsv = t(i).TimeScaleData(t(i).BaselineStart – 1, t(i).BaselineStart – 1, pjTaskTimescaledBaselineCost, pjTimescaleDays)             If tsv(1).Value = “” Then                 tsv(1).Value = 0             End If         End If         If t(i).Baseline1Start “NA” Then             Set tsv = t(i).TimeScaleData(t(i).Baseline1Start – 1, t(i).Baseline1Start – 1, pjTaskTimescaledBaseline1Cost, pjTimescaleDays)             If tsv(1).Value = “” Then                 tsv(1).Value = 0             End If         End If         If t(i).Baseline2Start “NA” Then             Set tsv = t(i).TimeScaleData(t(i).Baseline2Start – 1, t(i).Baseline2Start – 1, pjTaskTimescaledBaseline2Cost, pjTimescaleDays)             If tsv(1).Value = “” Then                 tsv(1).Value = 0             End If         End If         If t(i).Baseline3Start “NA” Then             Set tsv = t(i).TimeScaleData(t(i).Baseline3Start – 1, t(i).Baseline3Start – 1, pjTaskTimescaledBaseline3Cost, pjTimescaleDays)             If tsv(1).Value = “” Then                 tsv(1).Value = 0             End If         End If         If t(i).Baseline4Start “NA” Then             Set tsv = t(i).TimeScaleData(t(i).Baseline4Start – 1, t(i).Baseline4Start – 1, pjTaskTimescaledBaseline4Cost, pjTimescaleDays)             If tsv(1).Value = “” Then                 tsv(1).Value = 0             End If         End If         If t(i).Baseline5Start “NA” Then             Set tsv = t(i).TimeScaleData(t(i).Baseline5Start – 1, t(i).Baseline5Start – 1, pjTaskTimescaledBaseline5Cost, pjTimescaleDays)             If tsv(1).Value = “” Then                 tsv(1).Value = 0             End If         End If         If t(i).Baseline6Start “NA” Then             Set tsv = t(i).TimeScaleData(t(i).Baseline6Start – 1, t(i).Baseline6Start – 1, pjTaskTimescaledBaseline6Cost, pjTimescaleDays)             If tsv(1).Value = “” Then                 tsv(1).Value = 0             End If         End If         If t(i).Baseline7Start “NA” Then             Set tsv = t(i).TimeScaleData(t(i).Baseline7Start – 1, t(i).Baseline7Start – 1, pjTaskTimescaledBaseline7Cost, pjTimescaleDays)             If tsv(1).Value = “” Then                 tsv(1).Value = 0             End If         End If         If t(i).Baseline8Start “NA” Then             Set tsv = t(i).TimeScaleData(t(i).Baseline8Start – 1, t(i).Baseline8Start – 1, pjTaskTimescaledBaseline8Cost, pjTimescaleDays)             If tsv(1).Value = “” Then                 tsv(1).Value = 0             End If         End If         If t(i).Baseline9Start “NA” Then             Set tsv = t(i).TimeScaleData(t(i).Baseline9Start – 1, t(i).Baseline9Start – 1, pjTaskTimescaledBaseline9Cost, pjTimescaleDays)             If tsv(1).Value = “” Then                 tsv(1).Value = 0             End If         End If         If t(i).Baseline10Start “NA” Then             Set tsv = t(i).TimeScaleData(t(i).Baseline10Start – 1, t(i).Baseline10Start – 1, pjTaskTimescaledBaseline10Cost, pjTimescaleDays)             If tsv(1).Value = “” Then                 tsv(1).Value = 0             End If         End If     End If Next ‘fix the project summary task With Activ
eProject.ProjectSummaryTask     If .BaselineStart “NA” Then         Set tsv = .TimeScaleData(.BaselineStart – 1, .BaselineStart – 1, pjTaskTimescaledBaselineCost, pjTimescaleDays)         If tsv(1).Value = “” Then             tsv(1).Value = 0         End If     End If     If .Baseline1Start “NA” Then         Set tsv = .TimeScaleData(.Baseline1Start – 1, .Baseline1Start – 1, pjTaskTimescaledBaseline1Cost, pjTimescaleDays)         If tsv(1).Value = “” Then             tsv(1).Value = 0         End If     End If     If .Baseline2Start “NA” Then         Set tsv = .TimeScaleData(.Baseline2Start – 1, .Baseline2Start – 1, pjTaskTimescaledBaseline2Cost, pjTimescaleDays)         If tsv(1).Value = “” Then             tsv(1).Value = 0         End If     End If     If .Baseline3Start “NA” Then         Set tsv = .TimeScaleData(.Baseline3Start – 1, .Baseline3Start – 1, pjTaskTimescaledBaseline3Cost, pjTimescaleDays)         If tsv(1).Value = “” Then             tsv(1).Value = 0         End If     End If     If .Baseline4Start “NA” Then         Set tsv = .TimeScaleData(.Baseline4Start – 1, .Baseline4Start – 1, pjTaskTimescaledBaseline4Cost, pjTimescaleDays)         If tsv(1).Value = “” Then             tsv(1).Value = 0         End If     End If     If .Baseline5Start “NA” Then         Set tsv = .TimeScaleData(.Baseline5Start – 1, .Baseline5Start – 1, pjTaskTimescaledBaseline5Cost, pjTimescaleDays)         If tsv(1).Value = “” Then             tsv(1).Value = 0         End If     End If     If .Baseline6Start “NA” Then         Set tsv = .TimeScaleData(.Baseline6Start – 1, .Baseline6Start – 1, pjTaskTimescaledBaseline6Cost, pjTimescaleDays)         If tsv(1).Value = “” Then             tsv(1).Value = 0         End If     End If     If .Baseline7Start “NA” Then         Set tsv = .TimeScaleData(.Baseline7Start – 1, .Baseline7Start – 1, pjTaskTimescaledBaseline7Cost, pjTimescaleDays)         If tsv(1).Value = “” Then             tsv(1).Value = 0         End If     End If     If .Baseline8Start “NA” Then         Set tsv = .TimeScaleData(.Baseline8Start – 1, .Baseline8Start – 1, pjTaskTimescaledBaseline8Cost, pjTimescaleDays)         If tsv(1).Value = “” Then             tsv(1).Value = 0         End If     End If     If .Baseline9Start “NA” Then         Set tsv = .TimeScaleData(.Baseline9Start – 1, .Baseline9Start – 1, pjTaskTimescaledBaseline9Cost, pjTimescaleDays)         If tsv(1).Value = “” Then             tsv(1).Value = 0         End If     End If     If .Baseline10Start “NA” Then         Set tsv = .TimeScaleData(.Baseline10Start – 1, .Baseline10Start – 1, pjTaskTimescaledBaseline10Cost, pjTimescaleDays)         If tsv(1).Value = “” Then             tsv(1).Value = 0         End If     End If End With             ‘set the application calculation state back the way it was Application.Calculation = bCalc             End Sub To use this macro you can follow these steps: 1. Open Project Professional 2007 and connect to your server instance having the problem. 2. Go to Tools > Macro > Security . 3. Note the Security Level . 4. Set Security Level to Low or Medium .  This will allow the macro to run. 5. Go to Tools, Macro, Visual Basic Editor (or alt+F11) 6. Copy the text from the macro above, from the first line of the disclaimer to the End sub line 7. Double click ThisProject in the Visual Basic Editor, and paste in the macro to the window that opens (probably titled Project1 – ThisProject(Code) 8. Save this plan as a file if you need to use again, as FixPublishError.mpp, and return to the normal Microsoft Project view (Alt+F11) 9. Open the plan whose Reporting (Project Publish) job fails. 10. Go to Tools > Macro > Macros… 11. Select the FixPublishError.mpp!FixPublish macro. 12. Click Run . It will take a few seconds to a minute for the macro to run. 13. Save and publish the plan. 14. Monitor the queue by going to PWA > Personal Settings > My queued jobs. 15. Confirm that the jobs related to your plan complete successfully. 16. Reset Security Level to what is was before changing it to Low. There is one condition that currently isn’t resolved by the macro, and that relates to hitting the NULL value for any ghost tasks you might have in your plan (these can exist due to dependencies on tasks from other plans).  It is possible that this will be resolved if the source project has already been fixed up – we are still reviewing this. Thanks to Adrian for the fix up macro, Sriram for helping get this blog post out and for DFS and Christoph for the posts on my blog raising the issue. Sorry for the inconvenience this issue has caused you, and I will update this post as we get more information regarding a more permanent fix. Finally here are some lines from the ULS logs that relate to this problem – just to ensure that the search engines have something to digest and to help those searching on these terms. 05/23/2012 10:38:09.29    Microsoft.Office.Project.Server (0x0AE4)    0x0EE8    Project Server    Project Server Reporting    9e09    High    PWA:http://servername/PWA, SSP:SharedServices1, User: DOMAINUser, PSI:   [RDS] ReportProjectPublishMessage for project 0b9e52ec-6bb6-4ca3-823b-d7561d821d1c failed. Error: System.NullReferenceException: Object reference not set to an instance of an object.     at Microsoft.Office.Project.DataEdit.Reporting.ReportingData.GetTaskBaselineCoreTimephasedDataSet(BaselineEntity[] baselineEntityArray, Int32 nIntervalLengthMinutes)     at Microsoft.Office.Project.Server.DataAccessLayer.ReportingProjectDal.TransferTimephasedData[T](Guid projectUID, TimephasedTransferInfo transferInfo, ReportingData timephasedReportingData, ProcessSourceData`1 processSourceData, GenerateTimephasedDataSet`1 generateTimephasedData, Int32 pageSize, LogStatsMethod logStats)     at Microsoft.Office.Project.Server.DataAccessLayer.ReportingProjectDal.UpdateTasksTimephasedData(Guid projectUID, ReportingProjectData projectData, ReportingData timephasedReportingData, Int32 pageSize, String& transferPhase, LogStatsMethod logProjStats)     at Microsoft.Office.Project.Server.BusinessLayer.ReportingLayer.ProjectPublishMessageProcessor.SaveProjectTimephaseData(String& transferPhase)     at Microsoft.Office.Project.Server.BusinessLayer.ReportingLayer.ProjectPublishMessageProcessor.runRDSTransformation(ReportProjectPublishMessageEx projectChangeMessage). Phase: SetAssignmentBaselineTimephasedFixedCost    3ff34f2c-815e-4f95-9798-7f17dc5737db 05/23/2012 10:38:09.29    Microsoft.Office.Project.Server (0x0AE4)    0x0EE8    Project Server    Project Server Reporting    9e05    Critical    Standard Information:PSI Entry Point:   Project User: DomainUser Correlation Id: 3ff34f2c-815e-4f95-9798-7f17dc5737db  PWA Site URL: http://servername/PWA  SSP Name: SharedServices1  PSError: ReportingProjectChangeMessageFailed (24006) RDS: The request to synchronize change(s) to project Project UID=’0b9e52ec-6bb6-4ca3-823b-d7561d821d1c’. PublishType=’ProjectPublish’ failed.  Message: ‘ReportingProjectChangeMessageFailed’  Error:Object reference not set to an instance of an object.    3ff34f2c-815e-4f95-9798-7f17dc5737db 05/23/2012 10:38:10.30    Microsoft.Office.Project.Server (0x0AE4)    0x0D18    Project Server    Project Server Queue    7h5x    Medium    PWA:http://servername/PWA, SSP:SharedServices1, User: DOMAINSSPAdmin, PSI:   [QUEUE] ProjectQ: Group  d4364343-3402-45ef-afd0-f84c8834e5d3 type = ReportingProjectPublish aborted at Message 1    e45e8c63-38fa-49d8-9555-710851b22c90

If you didn’t get to Phoenix…

Brian Ru just published a blog post over on the main Project blog announcing the release of all the recorded content from the Project Conference 2012 – on the Project Channel of Microsoft Showcase .  So if you didn’t get to Project Conference 2012 this is a great chance to catch up with all the great content.  For good support topics see PC319 and PC349 – as recently “leaked” on this very blog… Enjoy!

Troubleshooting sessions from the Project Conference 2012

Just noticed that the Microsoft Project channel on Microsoft Showcase is hosting the sessions that Adrian and I did at this year’s Project Conference.  We covered a few different scenarios and tools that we use in our day to day jobs. We presented in two parts – part one was called PC319 and can be found at http://aka.ms/uhuix1 and part two was PC349 and can be found at http://aka.ms/frd1nl .  Other sessions are available too. I might also try and embed these – so they may appear below soon… (success!) PC319 PC349

Troubleshooting sessions from the Project Conference 2012

Just noticed that the Microsoft Project channel on Microsoft Showcase is hosting the sessions that Adrian and I did at this year’s Project Conference.  We covered a few different scenarios and tools that we use in our day to day jobs. We presented in two parts – part one was called PC319 and can be found at http://aka.ms/uhuix1 and part two was PC349 and can be found at http://aka.ms/frd1nl .  Other sessions are available too. I might also try and embed these – so they may appear below soon… (success!) PC319 PC349

Project Server 2010: Orphan baselines breaking the reporting publish

This problem has been around for a while and I know some customers were running into it very soon after the release, but we had been struggling to get a repro and understand exactly what was causing it.  We now understand the root cause and have a fix coming hopefully in the June 2012 Cumulative Update for Project Professional 2010 (no promises – but that is the current target) and there are some ways of working that can limit your chances of running into this – so decided we should share this to avoid continued inconvenience until we get the fix out there. First lets take a look at the symptoms.  The most usual indication of the problem, as the title suggests, is orphan baseline values leading to the error when publishing – a Failed But Not Blocking Correlation problem on a Reporting (Project Publish) job that will show several of the following errors if you click through for the error details: ReportingProjectChangeMessageFailed (24006) – The INSERT statement conflicted with the FOREIGN KEY constraint “FK_MSP_EpmTaskBaseline_ProjectUID_TaskUID”. The conflict occurred in database “ProjectServer_Reporting”, table “dbo.MSP_EpmTask”. The statement has been terminated.. GeneralQueueJobFailed (26000) – ReportingProjectPublish.ReportProjectPublishMessageEx These failures are for the reporting job – so will mean that reports based on the reporting database, and any fresh OLAP cube builds could be missing data. Sometimes there may also be a crash on saving, either with a fairly generic MSSOAP 16 Send Incomplete error from Project Professional 2010 (though a subsequent save will work fine), or from PWA a queue error – GeneralQueueException (9131) A Project Operation failed due to a Queue Exception. Sub Job ID is: . Exception details are: System.NullReferenceException: …at Microsoft.Office.Project.DataEdit.Assignments.AssignmentCalendarUpdateHelper.ConvertActualContourToElapsed(,,, There may then be issues with users accessing timesheets – The view failed to load.  Press OK to reload this view… (and OK will not help). The error that will be found in the ULS logs will refer to a Calendar whose UID cannot be found… Exception occurred in method Microsoft.Office.Project.Server.BusinessLayer.Statusing.StatusingGetMyWorkForGridJson System.InvalidOperationException: CacheProjectBaseCalendars could not find project calendar for project. CalUid=0c13de33-2a07-4310-b091-c77990d9dd6a    The root of all these issues is that when you use any of the Save & Send options (XML, CSV, Excel etc.) that we are incorrectly changing some of the GUIDs associated with entities such as the tasks and calendars.  Now this isn’t affecting the main tasks and assignment GUIDs as these bad values are not persisted back to the database – but we do however create a new baseline for these non-existent new task GUIDs, and can also save a bad calendar GUID – which leads to the Timesheet problem. First the best way to avoid this issue, and then on to the detection and clean up at the database level. If you do need to use Save & Send then the best practice until we release the fix for this is to first save the plan to the server, and publish if you need to.  Then do whatever you need to with Save & Send, and then immediately after this – close and check in the plan – but do not re-save to the server.  Discard changes if it asks – but of course you will have needed to save BEFORE you did the Save & Send (just making sure you are paying attention) to avoid losing any changes you really needed.  As the bad stuff will also get persisted to the local cache, this is one of those rare occasions when you will find me suggesting that the project is removed from the local cache – after ensuring that the save and check-in completed successfully. WARNING – the following steps are direct queries against the Project Server databases – please be sure you are working against the right databases when using these – and have a database backup should any problems occur. The detection of this condition is pretty straightforward, as we are just looking for baselines that exist for a task that does not exist, so the following query executed against the Draft database will do this (Change the name to match your specific DBs – the default ProjectServer_ names are used below: — Detect for orphan baseline task records that can cause reporting publish job failures. USE ProjectServer_Draft — specify the appropriate draft database select PROJ_NAME, MTB.PROJ_UID,TASK_UID,TB_BASE_NUM from MSP_TASK_BASELINES MTB inner join MSP_PROJECTS MP on MTB.proj_uid=MP.proj_uid where TASK_UID not in (select TASK_UID from MSP_TASKS) This will return rows if the condition exists – and identify which projects – as before clean-up you will probably want to get them removed from the PM’s local cache as otherwise they could be re-introduced. The next scripts do the cleaning up in the DB, and they are simply deleting baseline records where the tasks are non-existent. — Script to run on the draft DB USE ProjectServer_Draft — specify the appropriate draft database delete from MSP_TASK_BASELINES where TASK_UID not in (select TASK_UID from MSP_TASKS) — Script to run on the published DB USE ProjectServer_Published — specify the appropriate published database delete from MSP_TASK_BASELINES where TASK_UID not in (select TASK_UID from MSP_TASKS) I hope this helps to understand the nature of the issue and ways to avoid it until the fix comes along.  Our apologies for the inconvenience I know this has caused many of our customers – and hopefully for those who have needed to re-run the clean-up scripts regularly this may give a way to reduce the pain. If you need any assistance with these steps then feel free to open a support incident – and when I say free I mean free – this is a bug and we do not charge for incidents that are due to bugs (or we will refund – which amounts to the same thing). The ULS log entry associated with the initial Queue errors above (for the benefit of the search engines): 05/01/2012 11:57:55.67    Microsoft.Office.Project.Server (0x1D74)    0x335C    Project Server    Reporting    atwj    Critical    Standard Information:PSI Entry Point:   Project User: REDMONDbrismith  Correlation Id: e1f4e953-7dea-448a-a528-709075c698bf  PWA Site URL: http://brismith8100/PWA   SSP Name: Project Server Service Application  PSError: ReportingProjectChangeMessageFailed (24006) RDS: The request to synchronize change(s) to project Project UID=’216733b0-e194-469a-afc3-9235da4ce4c1′. PublishType=’ProjectPublish’ failed.  Message: ‘ReportingProjectChangeMessageFailed’. Message Body: The INSERT statement conflicted with the FOREIGN KEY constraint “FK_MSP_EpmTaskBaseline_ProjectUID_TaskUID”. The conflict occurred in database “ProjectServer_Reporting”, table “dbo.MSP_EpmTask”.  The statement has been terminated. Error:(null)    e1f4e953-7dea-448a-a528-709075c698bf and for the Timesheet error: 05/01/2012 12:13:29.65    w3wp.exe (0x2444)    0x23D8    Project Server    Task Statusing and Updates    btw9    High    CacheProjectBaseCalendars: could not locate data for calendar 0c13de33-2a07-4310-b091-c77990d9dd6a for project 216733b0-e194-469a-afc3-9235da4ce4c1    e5dd4eaf-551a-469b-a3e0-1f60e2f3d1af 05/01/2012 12:13:29.85    w3wp.exe (0x2444)    0x23D8    Project Server    General    0000    Exception    Exception occurred in method Microsoft.Office.Project.Server.BusinessLayer.Statusing.StatusingGetMyWorkForGridJson System.InvalidOperationException: CacheProjectBaseCalendars could not find project calendar for project. CalUid=0c13de33-2a07-4310-b091-c77990d9dd6a     at Microsoft.Office.Project.Server.BusinessLayer.TimePhasedDataAccess.CacheProjectBaseCalendars()     at Microsoft.Office.Project.Server.BusinessLayer.TimePhasedDataAccess..ctor(StatusingPageLoadDataSet dataset)     at Microsoft.Office.Project.Server.BusinessLayer.Statusing.ReadStatusTimephasedDataForResource(IList`1 gridChanges, Guid[] vAssnUids, IDictionary`2 assn2proj, StatusingTimephasedPeriod[] tpd
Periods, DateTime tpStart, DateTime tpEnd)     at Microsoft.Office.Project.Server.BusinessLayer.Statusing. c__DisplayClass57. b__56(IEnumerable`1 Keys)     at Microsoft.SharePoint.JSGrid.GridSerializer.BuildOutput()     at Microsoft.SharePoint.JSGrid.GridSerializer.ToJson(Serializer s)     at Microsoft.SharePoint.JsonUtilities.Serializer.SerializeToJson(Object o)     at Microsoft.Office.Project.Server.BusinessLayer.Statusing.GetMyWorkForGridJson(JsGridSerializerArguments gridSerializerArgs, String gridChangesJson, String projectAssignmentsMap, Guid viewUid, String timephasedStart, String timephasedEnd, Byte pane, Int32 durationType, Int32 workType, Int32 dateFormat, Boolean clearPersistedProperties, Nullable`1 rowFilterType)     at Microsoft.Office.Project.Server.Wcf.Implementation.PWAImpl.StatusingGetMyWorkForGridJson(JsGridSerializerArguments gridSerializerArgs, String gridChangesJson, String projectAssignmentsMap, Guid viewUid, String timephasedStart, String timephasedEnd, Byte pane, Int32 durationType, Int32 workType, Int32 dateFormat, Boolean clearPersistedProperties, Nullable`1 rowFilterType)    e5dd4eaf-551a-469b-a3e0-1f60e2f3d1af

Microsoft Project Server and SharePoint Server 2007 and 2010 April 2012 CU Announcement

In case you missed it over on the Admin blog site – the April CU announcement went out last week.  This covers the April 2012 Cumulative Update (CU) for Microsoft Project 2010, Microsoft Project Server 2010, Microsoft Office Project 2007 and Microsoft Project Server 2007.  More details see http://blogs.technet.com/b/projectadministration/archive/2012/04/27/microsoft-project-server-and-sharepoint-server-2007-and-2010-april-2012-cu-announcement.aspx .  The Project Server 2010 April 2012 CU also includes the fix for the duplicate Custom Field problem (unknown error in Project Center relating to filters, and also duplicates displayed in the PDPs) that was released just around the time of the February CU, please see the KB at http://support.microsoft.com/kb/2598251 for the detection and clean up scripts if you suffered from this issue.

Project Server 2010: An unknown error in Project Center, usually related to filters and duplicate custom field values

The fix for this frequently hit bug was released KB 2598251, and now the KB article at http://support.microsoft.com/kb/2598251 has been updated to include the SQL scripts that will clean up the duplicate values that lead to the error.  These scripts will correct the data, and the fix will stop the condition returning.  The fix itself has a version number of 14.0.6117.5002 – and if you load the February CU rollup package with this same version number then you will also get the fix.  The single Project Server package has been updated to point to the 2598251 patch – as this includes the fix, but also includes the February cumulative update. So to summarize: http://support.microsoft.com/kb/2598251 is the specific fix – and it includes the February CU for Project Server. http://support.microsoft.com/kb/2597152 is the February CU rollup package – and includes the fix as well as the full February CU for Project Server and SharePoint Server 2010 http://support.microsoft.com/kb/2597138 was the February CU for Project Server 2010, but has been withdrawn and instead redirects to the 2598251 patch. And finally – to help the search engines find this posting, the ULS logs will indicate an exception error similar to the following: Exception occurred in method Microsoft.Office.Project.Server.BusinessLayer.Project.ProjectGetProjectCenterProjectsForGridJson Microsoft.Office.Project.Server.DataAccessLayer.FilterDal+FilterException: Error during filter query execution. Query: declare @ResUid UniqueIdentifier; set @ResUid = ff02387a-234e-4323-9e33-dbbf6f11880e; declare @PermUid UniqueIdentifier; set @PermUid = a120a079-75bc-4f0f-b376-3fb0ae9ac940; declare @ViewUid UniqueIdentifier; set @ViewUid = 63d3499e-df27-401c-af58-ebb9607beae8; declare @P0 UniqueIdentifier; set @P0 = 2d9ba6f2-d3d4-47f1-8661-5af3d695f8ed; declare @P1 UniqueIdentifier; set @P1 = 0ad53bb6-15ee-476a-ab05-7bb434b50466; SET NOCOUNT ON SELECT T.PROJ_UID INTO #T0 FROM dbo.MSP_PROJECTS AS P INNER JOIN dbo.MSP_TASKS AS T ON T.PROJ_UID = P.PROJ_UID INNER JOIN dbo.MSP_RESOURCES AS R ON R.RES_UID = P.WRES_UID LEFT JOIN dbo.MSP_WORKFLOW_STATUS AS WFSTS ON WFSTS.PROJ_UID = P.PROJ_UID INNER JOIN dbo.MSP_WEB_FN_SEC_GetAllProjectsResCanViewByViewID(@ResUid, @PermUid, @ViewUid, 3) AS perm ON perm.PROJ_UID = T.PROJ_UID LEFT JOIN dbo.ProjectSummaryCustomFields AS TABLEALIAS_0 ON TABLEALIAS_0.PROJ_UID = P.PROJ_UID AND TABLEALIAS_0.MD_PROP_UID = @P0 WHERE T.TASK_OPTINDX = 1.0 AND (ISNULL(WFSTS.STAGE_STATUS,-1) IN (-1, 1,2,3,5,6)) AND ((TABLEALIAS_0.CODE_VALUE @P1) OR (TABLEALIAS_0.CODE_VALUE IS NULL)) CREATE CLUSTERED INDEX PK_#T0 ON #T0 (PROJ_UID) SET NOCOUNT OFF SELECT T.PROJ_UID , P.PROJ_NAME , T.TASK_START_DATE , T.TASK_FINISH_DATE , T.TASK_PCT_COMP , T.TASK_WORK , T.TASK_DUR , R.RES_NAME , P.WPROJ_LAST_PUB , P.PROJ_OPT_MINUTES_PER_DAY , P.PROJ_OPT_MINUTES_PER_WEEK , P.PROJ_OPT_DAYS_PER_MONTH , T.TASK_SUMMARY_PROGRESS_DATE , T.TASK_IS_MILESTONE , dbo.MSP_FN_HYPERLINK_HREF(T.TASK_HYPERLINK_ADDRESS, T.TASK_HYPERLINK_SUB_ADDRESS) AS TASK_HYPERLINK_HREF , T.TASK_OUTLINE_LEVEL , P.PROJ_TYPE , T.TASK_DUR_FMT , P.WSTS_SERVER_UID , P.PROJ_OPT_CURRENCY_CODE , P.PROJ_ACTIVE_RISK_COUNT , P.PROJ_ACTIVE_ISSUE_COUNT , P.PROJ_TOTAL_DOC_COUNT , WOB.WOBJ_ISSUE_REF_CNT , WOB.WOBJ_RISK_REF_CNT , WOB.WOBJ_DOC_REF_CNT , PJSYNC.SYNC_WSS_LIST_UID , T.TASK_COMPLETE_THROUGH , (CASE WHEN T.TASK_UID=T.TASK_PARENT_UID THEN 1 ELSE 0 END) AS TASK_IS_PROJECT_SUMMARY FROM dbo.MSP_PROJECTS AS P INNER JOIN dbo.MSP_TASKS AS T ON T.PROJ_UID = P.PROJ_UID INNER JOIN dbo.MSP_RESOURCES AS R ON R.RES_UID = P.WRES_UID LEFT JOIN dbo.MSP_WORKFLOW_STATUS AS WFSTS ON WFSTS.PROJ_UID = P.PROJ_UID INNER JOIN #T0 AS keys ON keys.PROJ_UID = P.PROJ_UID LEFT JOIN (SELECT WOBJ_PROJ_UID as PROJ_UID,[4] as WOBJ_ISSUE_REF_CNT, [5] as WOBJ_RISK_REF_CNT, [3] as WOBJ_DOC_REF_CNT FROM ( SELECT WOBJ_TYPE, WOBJ_PROJ_UID FROM MSP_WEB_OBJECTS WHERE WOBJ_TASK_UID=’00000000-0000-0000-0000-000000000000′) pwob PIVOT (COUNT(WOBJ_TYPE) FOR WOBJ_TYPE in([3] ,[4],[5])) AS pvt) AS WOB ON WOB.PROJ_UID = P.PROJ_UID LEFT JOIN dbo.MSP_SYNC_PROJECT_SETTINGS AS PJSYNC ON PJSYNC.PROJ_UID = P.PROJ_UID WHERE T.TASK_OPTINDX = 1.0 AND (ISNULL(WFSTS.STAGE_STATUS,-1) IN (-1, 1,2,3,5,6)) DROP TABLE #T0; —> System.Data.ConstraintException: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints. at System.Data.DataSet.EnableConstraints() at System.Data.DataSet.set_EnforceConstraints(Boolean value) at Microsoft.Office.Project.Server.DataAccessLayer.DAL.SubDal.FillTypedDataSet(Boolean allowCache, DataSet typedDataSet, String[] tables, SqlCommand sqlCommand, Boolean enforceConstraints) at Microsoft.Office.Project.Server.DataAccessLayer.DAL.SubDal.FillTypedDataSet(DataSet typedDataSet, String[] tables, SqlCommand sqlCommand, Boolean enforceConstraints) at Microsoft.Office.Project.Server.DataAccessLayer.FilterDal.FillDataSet(QueryState queryState) — End of inner exception stack trace — at Microsoft.Office.Project.Server.DataAccessLayer.FilterDal.FillDataSet(QueryState queryState) at Microsoft.Office.Project.Server.Utility.FilterDalQueryInfo.Query() at Microsoft.Office.Project.Server.BusinessLayer.Project.ProjectQueryInfo.Query() at Microsoft.Office.Project.Server.BusinessLayer.Project.ProjectCenterQueryInfo.Query() at Microsoft.Office.Project.Server.Utility.JsGridPopulationManager.InitializeSerializer(TableQueryInfo tableInfo, OrderInfo orderInfo, SliceInfo sliceInfo, Guid groupSchemeUid, Nullable`1 ganttSchemeUid, Boolean serializeStyles, Func`1 getChanges, Boolean serializeUnfilteredHierarchy, Boolean serializeLookupTableInfo, Boolean showTimeWithDates, String rowFilter) at Microsoft.Office.Project.Server.Utility.JsGridPopulationManager.InitializeSerializer(TableQueryInfo tableInfo, ViewPropertyGroup properties, JsGridSerializerArguments gridSerializerArgs, Func`1 getChanges) at Microsoft.Office.Project.Server.BusinessLayer.Project.GetProjectCenterProjectsForGridJson(JsGridSerializerArguments gridSerializerArgs, Guid viewUid, Int32 store, Boolean showInsertedProjects, Boolean clearPersistedProperties) at Microsoft.Office.Project.Server.Wcf.Implementation.PWAImpl.ProjectGetProjectCenterProjectsForGridJson(JsGridSerializerArguments gridSerializerArgs, Guid viewUid, Int32 store, Boolean showInsertedProjects, Boolean clearPersistedProperties)

Project 2010: Problems with installing, setup or activation?

The initial installation, setup and activation of Microsoft Project can raise issues and we see quite a few calls on this topic, so wanted to put together some links that might help – and save you having to call Microsoft.  Often the issue relates to a clash of versions or sku’s, and sometimes it may be due to a version of Office that came pre-loaded – the Office 2010 Starter.  Hopefully these links will help – along with links to resolve common issues such as a message about invalid product keys, or if you have lost or damaged your Office 2010 product key. First some wizards to help with product key problems: Are you receiving an invalid product key error in Microsoft Office 2010? – http://support.microsoft.com/kb/836178 How to replace a lost or damaged Microsoft Office product key – http://support.microsoft.com/kb/823570 If you are using Volume Licensing and MAK key then this is a good blog posting to read – http://blogs.technet.com/b/odsupport/archive/2011/04/15/getting-invalid-product-key-error-when-trying-to-input-mak-key-for-volume-license-version-of-office-2010.aspx . Another common question is around side-by-side installation – either where Project is being installed with another version of Office (such as upgrading to Project 2010 but still using Office 2007) – or even having multiple versions of Project on the same system.  The best guidance here is firstly only do this if you really, really need to, and to install in a separate directory, and the first thing to try if any errors are seen is to repair the original installation.  For example if you load Project 2010 and then see any issues with Office 2007 – run a repair on Office 2007.  With multiple versions of Project there is another potential issue – and that is which version should start when you click on an mpp – and the rule of thumb here is that the last one installed will win.  So either install to ensure the one you wish to be the one to load mpps is the last one – or run a repair on the one you want to be considered the ‘current’ version for opening mpps.  You can also set the default version via Control Panel, Programs, Default Programs, Set Associations – select mpp then Change program and browse for the specific winproj.exe in whichever directory you loaded the version you wish to open mpps.  Another consideration if working with side-by-side is that there have been some behavior changes in the various releases – so it is best avoided to keep moving plans back and forth between versions.

Project 2010: Problems with installing, setup or activation?

The initial installation, setup and activation of Microsoft Project can raise issues and we see quite a few calls on this topic, so wanted to put together some links that might help – and save you having to call Microsoft.  Often the issue relates to a clash of versions or sku’s, and sometimes it may be due to a version of Office that came pre-loaded – the Office 2010 Starter.  Hopefully these links will help – along with links to resolve common issues such as a message about invalid product keys, or if you have lost or damaged your Office 2010 product key. First some wizards to help with product key problems: Are you receiving an invalid product key error in Microsoft Office 2010? – http://support.microsoft.com/kb/836178 How to replace a lost or damaged Microsoft Office product key – http://support.microsoft.com/kb/823570 If you are using Volume Licensing and MAK key then this is a good blog posting to read – http://blogs.technet.com/b/odsupport/archive/2011/04/15/getting-invalid-product-key-error-when-trying-to-input-mak-key-for-volume-license-version-of-office-2010.aspx . Another common question is around side-by-side installation – either where Project is being installed with another version of Office (such as upgrading to Project 2010 but still using Office 2007) – or even having multiple versions of Project on the same system.  The best guidance here is firstly only do this if you really, really need to, and to install in a separate directory, and the first thing to try if any errors are seen is to repair the original installation.  For example if you load Project 2010 and then see any issues with Office 2007 – run a repair on Office 2007.  With multiple versions of Project there is another potential issue – and that is which version should start when you click on an mpp – and the rule of thumb here is that the last one installed will win.  So either install to ensure the one you wish to be the one to load mpps is the last one – or run a repair on the one you want to be considered the ‘current’ version for opening mpps.  You can also set the default version via Control Panel, Programs, Default Programs, Set Associations – select mpp then Change program and browse for the specific winproj.exe in whichever directory you loaded the version you wish to open mpps.  Another consideration if working with side-by-side is that there have been some behavior changes in the various releases – so it is best avoided to keep moving plans back and forth between versions.