Thought it worth explaining some of the intricacies of the June 2012 Cumulative Update packages, especially for those of you waiting for the fix for the Exchange Sync issue where you see duplicated tasks in Outlook, or are having problems with editing categories in PWA if you have renamed projects in your archive. Maicco e-mailed asking about the Exchange fix – and thanks for bringing this to my attention. These two fixes were delivered in the June Cumulative Update cycle, but were not in the ‘default’ Project Server only package http://support.microsoft.com/kb/2598375, but had their own hotfix - http://support.microsoft.com/kb/2598376.
Just to add to the confusion this hotfix doesn’t explicitly say that it includes the 2598375 fixes – but it does. The reason for the split is that these two fixes needed some globalization changes – which you can see from the full description (Description of the Project Server 2010 hotfix package (Pjsrvwfe-x-none.msp, Pjsrvmui-x-none.msp): June 26, 2012) where MUI is Multilingual User Interface. The file list also lists all of the language files.
The complete Project Server 2010 June 2012 Cumulative Update package - http://support.microsoft.com/kb/2598355 – does include everything, and the KB does list both of the KB’s mentioned above. This hopefully clarifies things and explains what the two KBs listed in the full package article are all about.
Thanks again Maicco, and in future I’ll keep my eye out for these split CU packages and we will add more details to the notification mail (and I’ll also add an update to the current posting).
If you haven’t already of course…
Some early warning here to allow you to plan for any August 2012 or post August 2012 Cumulative Updates. For SharePoint Server 2010, and Project Server 2010 and the rest of the Office 2010 family you will need to have loaded Service Pack 1 (SP1) before you can install the Cumulative Update. This means really loading SP1 – not just relying on the fact that ‘almost all’ of SP1 has been included in patches since June 2011. If you remember we went through a similar stage with 2007 – and one of the most notable things is that the patch will shrink down to a much smaller size (The June 2012 roll-up patch was over 1.2GB!).
I haven’t had a chance to try it out – but I suspect the error message if you haven’t loaded SP1 will be something along the lines of “There are no products affected by this package installed on this system” or “ The expected version of the product was not found on the system” – I’ll update once I get a chance to test.
The reason behind this change is to do with our product support lifecycle (see Microsoft Support Lifecycle) and the fact that we have reached what we term the end-of-life (or service pack support end date) for the original release of the 2010 Office family – which is around one year after release of Service Pack 1. For most customers you could see this first with the August 2012 Cumulative update – which will be something like build 14.0.6124.5000 – or potentially before if there are any special releases before that release (and after the June CU) – which would be something like 14.0.6123.5003. Other customers who do not necessarily load all cumulative updates may run into this much later, as it will be the ongoing requirement for future Cumulative Updates until the next service pack support end date – approximately one year after SP2 (and no – I do not know when SP2 will be coming along – before you ask!).
Excellent references for Service Pack 1 can be found at the new-look Project blog - Announcing Service Pack 1 for Microsoft Project & Project Server 2010, for the initial announcement, Announcing The Release Of Service Pack 1 (SP1) for Microsoft Project and Project Server 2010 for the release notification and particularly the TechNet article at http://technet.microsoft.com/en-us/library/hh272536.aspx - Deploy Service Pack 1 for Project Server 2010.
And finally – to find out if you already have SP1 installed I’d suggest going to Control Panel, Programs, Programs and Features, Installed Updates – and you should see it listed there – Microsoft SharePoint and Project Server 2010 Service Pack 1 (SP1) http://support.microsoft.com/kb/2460047.
At SP1 Project Server 2010 and SharePoint introduced support for SQL Server 2012. I had a question posted on some issues a customer had hit – so I thought I’d set my server up for building an OLAP cube against SQL Server 2012 – just to see if I could. I already knew I’d need to set up a few things – but as I wanted to see errors I just went for it – and started with a PWA instance that built successfully against my SQL Server 2008 R2 Analysis Services machine. My Project Server databases were also in this SQL Server 2008 R2 server – so that would add some other interesting things to consider. I should also point out that my SQL Server 2012 was sitting on a Windows Server 2012 RC machine – so not a supported scenario currently – but I like to live on the edge (I know – I should get a life instead…)
Just to recap what goes on when we request to build a cube, which will help you understand where the errors might be coming from – and there may well be other errors you could see if things are configured differently to my scenario.
So I’ve done none of that preliminary setup, so I’m expecting some errors. The first however, was unexpected:
Error 1.
[7/3/2012 7:00 AM] Failed to build the OLAP cubes. Error: Failed to connect to the Analysis Services server <ASServerName>. Error: Deserialization failed: Requested value 'EnterpriseCore64' was not found.
This was reported by the cube build – I’ll add the ULS and Event Log errors at the foot of the posting for the search engines to digest – and talking of search engines a quick Bing gave me the answer to this first issue – SQL Server 2012 Cumulative Update 1, which contains the fix described here - http://support.microsoft.com/kb/2683293 - Error message when you use AMO to connect to SQL Server 2012 Analysis Services: "Deserialization failed: Requested value '<ServerEdition>' was not found". The ServerEdition could be one of
The Cumulative Update itself can be found at http://support.microsoft.com/kb/2679368 - Cumulative update package 1 for SQL Server 2012.
Installed the CU and moved on…
Error 2.
[7/3/2012 7:50 AM] Failed to build the OLAP cubes. Error: Failed to process the Analysis Services database Test2012 on the <ASServerName> server. Error: Errors in the back-end database access module. The provider 'SQLNCLI10' is not registered. The following system error occurred: Class not registered Errors in the high-level relational engine. A connection could not be made to the data source with the DataSourceID of 'Project Reporting data source', Name of 'Project Reporting data source'. Errors in the OLAP storage engine: An error occurred while the dimension, with the ID of 'Resource Type', Name of 'Resource Type' was being processed. Errors in the back-end database access module. The provider 'SQLNCLI10' is not registered. The following system error occurred: Class not registered Errors in the high-level relational engine. A connection could not be made to the data source with the DataSourceID of 'Project Reporting data source', Name of 'Project Reporting data source'. Errors in the OLAP storage engine: An error occurred while the dimension, with the ID of 'Timesheet Status', Name of 'Timesheet Status' was being processed. Server: The current operation was cancelled because another operation in the transaction failed. Errors in the back-end database access module. The provider 'SQLNCLI10' is not registered. The following system error occurred: Class not registered Errors in the high-level relational engine. A connection could not be made to the data source with the DataSourceID of 'Project Reporting data source', Name of 'Project Reporting data source'. Errors in the OLAP storage engine: An error occurred while the dimension, with the ID of 'Timesheet Period Status', Name of 'Timesheet Period Status' was being processed.
This is very similar to an error you would see even before 2012, and refers to the Native Client for SQL Server SQNCLI10 – not being registered. This is where we need to be very specific – and the version of the native client is related to our client application code that is requesting the build than either the Analysis Services or the SQL Server version. Regardless of if you are running 2005 or 2008 or 2012 (or anywhere in between) you will need to have the 2008 Native Client installed from here - http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=8824 - Microsoft SQL Server 2008 Feature Pack, October 2008 – and specifically the sqlncli.msi which is about half way down the page – and the direct link to the X64 package is here. Also note that this is referring to the build FROM the Analysis Services server – and it is complaining about the Native Client being missing from there – which it needs to connect to my database server (which happens to be 2008 R2 – but that is irrelevant). If you look on the AS server you will see that the structure of the cube has been created – so we successfully connected to the server, but it could go off to the database server to get the data. In a fresh install against SQL Server 2012 you would also need to add the Native Client to the application server – but as it is one of the SharePoint pre-reqs this is normally taken care of. To confirm the native client requirement you can also look at the Connection string already created on the AS Server as part of the Project Reporting data source - Provider=SQLNCLI10;Data Source=<DBServer> ;Initial Catalog=ProjectServer_Reporting;Integrated Security=SSPI;Persist Security Info=False. I have seen some workarounds described suggesting changing the Provider here – and that would work if you were to rebuild from AS it would get over-written at the next build.
Added the Native Client to my Analysis Services 2012 machine and continued…
Error 3
[7/3/2012 8:33 AM] Failed to build the OLAP cubes. Error: Failed to process the Analysis Services database Test2012 on the <ASServerName> server. Error: Internal error: The operation terminated unsuccessfully. Server: The current operation was cancelled because another operation in the transaction failed. OLE DB error: OLE DB or ODBC error: Login failed for user 'DOMAIN\<ASServerName>$'.; 28000. Errors in the high-level relational engine. A connection could not be made to the data source with the DataSourceID of 'Project Reporting data source', Name of 'Project Reporting data source'. Errors in the OLAP storage engine: An error occurred while the dimension, with the ID of 'Task List', Name of 'Task List' was being processed. Errors in the OLAP storage engine: An error occurred while the 'Start Date' attribute of the 'Task List' dimension from the 'BriSmith2012' database was being processed….
This error was longer – just repeated for different attributes of the dimension. The key to this is the Login Failed – and in this case it refers to a machine name (the $ on the end) as my Analysis Services is running as
NT Service\MSSQLServerOLAPService
So the connection is via the machine name. Added the DOMAIN\<MachineName>$ as a Login on the Databse Server with db_datareader role membership to my ProjectServer_Reporting database and continued. If your Analysis Services is running under some other credentials then you may need to enter these rather than a machine name.
[7/3/2012 9:03 AM] Cube build request completed successfully.
In my installation I didn’t hit any permissions issues regarding the AS administrator, or any firewall issues – just because my server and domain setup was already taking care of these potential problems – your mileage may vary.
Overall, apart from the 1st error these are very similar, if not identical, to problems you could run into with any version of SQL Server – but hopefully a worthwhile reminder of the cube building process and the components and permissions it relies on. Only Bing and any other search engine needs to read on from here…
Error 1
ULS Logs – a string of errors here – the first few were Medium, then a couple of criticals – I’ve just posted a couple – these should contain anything worth finding on a search.:
07/03/2012 07:00:21.46 Microsoft.Office.Project.Server (0x27B4) 0x2834 Project Server Analysis Cube Building myne Medium PWA:/PWA">http://<Server>/PWA, ServiceApp:Project Server Service Application, User:DOMAIN\User, PSI: Error generating Project Server cubes. Error: 'Failed to connect to the Analysis Services server <ASServerName>. Error: Deserialization failed: Requested value 'EnterpriseCore64' was not found.' 4c420a8a-c27c-47b8-88c9-46baaf8ab1ec
07/03/2012 07:00:21.47 Microsoft.Office.Project.Server (0x27B4) 0x2834 Project Server Analysis Cube Building 8swo Medium PWA:/PWA">http://<Server>/PWA, ServiceApp:Project Server Service Application, User:DOMAIN\User, PSI: [CBS] Status message: ProjectServer BuildOlapCubes failed with exception: Microsoft.Office.Project.PI.CBSCommon.CBSProcessException: Failed to connect to the Analysis Services server brismith12-15. Error: Deserialization failed: Requested value 'EnterpriseCore64' was not found. ---> Microsoft.AnalysisServices.XmlSerializationException: Deserialization failed: Requested value 'EnterpriseCore64' was not found. ---> System.ArgumentException: Requested value 'EnterpriseCore64' was not found. at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase) at Microsoft.AnalysisServices.DesignXmlReader.ReadPrimitive(Type type, XmlAttributes attributes) …
07/03/2012 07:00:21.47 Microsoft.Office.Project.Server (0x27B4) 0x2834 Project Server Analysis Cube Building 8icz Critical Standard Information:PSI Entry Point: Project User: DOMAIIN\User Correlation Id: 4c420a8a-c27c-47b8-88c9-46baaf8ab1ec PWA Site URL: /PWA">http://<Server>/PWA SSP Name: Project Server Service Application PSError: CBSASConnectionFailure (17003) Cube build failed to connect to the Analysis Services server. Verify the data source connection is valid. Error: Setting UID=19d8edf4-019c-437a-a435-2fd160b71592 ASServerName=<ASServerName> ASDBName=Test2012 ASExtraNetAddress= RangeChoice=0 PastNum=1 PastUnit=0 NextNum=1 NextUnit=0 FromDate=07/02/2012 06:55:08 ToDate=07/02/2012 06:55:08 HighPriority=True 4c420a8a-c27c-47b8-88c9-46baaf8ab1ec
The Application Event Log just shows a pretty generic Cube Building failure message.
Source: Microsoft-SharePoint Products-Project Server Date: 7/3/2012 7:00:21 AM Event ID: 7682 Task Category: Analysis Cube Building Level: Error PSError: CBSASConnectionFailure (17003) Cube build failed to connect to the Analysis Services server. Verify the data source connection is valid. Error: Setting UID=19d8edf4-019c-437a-a435-2fd160b71592 ASServerName=<ASServerName> ASDBName=Test2012 ASExtraNetAddress= RangeChoice=0 PastNum=1 PastUnit=0 NextNum=1 NextUnit=0 FromDate=07/02/2012 06:55:08 ToDate=07/02/2012 06:55:08 HighPriority=True Event Xml:
Error 2
ULS logs – plenty of errors here, mostly saying the same thing – so I’ll just post the critical one:
07/03/2012 07:49:52.90 Microsoft.Office.Project.Server (0x27B4) 0x12A4 Project Server Analysis Cube Building 8icz Critical Standard Information:PSI Entry Point: Project User: DOMAIN\User Correlation Id: 5984d4c1-558e-4bb2-9373-68053f894a7d PWA Site URL: /PWA">http://<Server>/PWA SSP Name: Project Server Service Application PSError: CBSOlapProcessingFailure (17004) Cube build failed during an OLAP Processing operation. CBS queued message: Setting UID=19d8edf4-019c-437a-a435-2fd160b71592 ASServerName=<ASServerName> ASDBName=Test2012 ASExtraNetAddress= RangeChoice=0 PastNum=1 PastUnit=0 NextNum=1 NextUnit=0 FromDate=07/02/2012 06:55:08 ToDate=07/02/2012 06:55:08 HighPriority=True. Error: Failed to process the Analysis Services database BriSmith2012 on the brismith12-15 server. Error: Errors in the back-end database access module. The provider 'SQLNCLI10' is not registered. The following system error occurred: Class not registered Errors in the high-level relational engine. A connection could not be made to the data source with the DataSourceID of 'Project Reporting data source', Name of 'Project Reporting data source'. Errors in the OLAP storage engine: An error occurred while the dimension, with the ID of 'Resource Type', Name of 'Resource Type' was being processed. Errors in the back-end database access module. The provider 'SQLNCLI10' is not registered. The following system error occurred: Class not registered Errors in the high-level relational engine. A connection could not be made to the data source with the DataSourceID of 'Project Reporting data source', Name of 'Project Reporting data source'. Errors in the OLAP storage engine: An error occurred while the dimension, with the ID of 'Timesheet Status', Name of 'Timesheet Status' was being processed. Server: The current operation was cancelled because another operation in the transaction failed. Errors in the back-end database access module. The provider 'SQLNCLI10' is not registered. The following system error occurred: Class not registered Errors in the high-level relational engine. A connection could not be made to the data source with the DataSourceID of 'Project Reporting data source', Name of 'Project Reporting data source'. Errors in the OLAP storage engine: An error occurred while the dimension, with the ID of 'Timesheet Period Status', Name of 'Timesheet Period Status' was being processed. 5984d4c1-558e-4bb2-9373-68053f894a7d
The Event Log entry was very similar – Source: Project Server Event ID was 7691 and Task Category Analysis Cube Building, followed by a generic Queue failure Event ID 7704.
Here is the critical one from the ULS logs:
07/03/2012 08:32:44.12 Microsoft.Office.Project.Server (0x27B4) 0x2CF4 Project Server Analysis Cube Building 8icz Critical Standard Information:PSI Entry Point: Project User: DOMAIN\User Correlation Id: fdf04238-ff5a-4153-baca-723f634011cd PWA Site URL: /brismith8100/PWA">http://<Server>/PWA SSP Name: Project Server Service Application PSError: CBSOlapProcessingFailure (17004) Cube build failed during an OLAP Processing operation. CBS queued message: Setting UID=19d8edf4-019c-437a-a435-2fd160b71592 ASServerName=<ASServerName> ASDBName=Test2012 ASExtraNetAddress= RangeChoice=0 PastNum=1 PastUnit=0 NextNum=1 NextUnit=0 FromDate=07/02/2012 06:55:08 ToDate=07/02/2012 06:55:08 HighPriority=True. Error: Failed to process the Analysis Services database Test2012 on the <ASServerName> server. Error: Internal error: The operation terminated unsuccessfully. Server: The current operation was cancelled because another operation in the transaction failed. OLE DB error: OLE DB or ODBC error: Login failed for user DOMAINS\MachineName$'.; 28000. Errors in the high-level relational engine. A connection could not be made to the data source with the DataSourceID of 'Project Reporting data source', Name of 'Project Reporting data source'. Errors in the OLAP storage engine: An error occurred while the dimension, with the ID of 'Task List', Name of 'Task List' was being processed. ….
Event log same as before the - Source: Project Server Event ID was 7691 and Task Category Analysis Cube Building, followed by a generic Queue failure Event ID 7704.
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:
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!
** Update 6/27/2012 - The June 2012 CU is available. Project Server 2007 - http://support.microsoft.com/kb/2687258 - the Office Server package (Includes Project Server) - http://support.microsoft.com/kb/2687256 No clean up required - the June CU will stop the problem happening. ***
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: <?xml version="1.0" encoding="utf-16"?> <errinfo> <general> <class name="Reporting message processor failed"> <error id="24006" name="ReportingProjectChangeMessageFailed" uid="d120becb-26a3-4fbe-8341-38a5c273453d" QueueMessageBody="Project UID='0b9e52ec-6bb6-4ca3-823b-d7561d821d1c'. PublishType='ProjectPublish'" Error="Object reference not set to an instance of an object." /> </class> <class name="Queue"> <error id="26000" name="GeneralQueueJobFailed" uid="4c6270ce-0735-44b3-ac1c-59bb0ff69efc" JobUID="a4a1f651-0997-4770-8099-efe02340967a" ComputerName="BRISMITH2007" GroupType="ReportingProjectPublish" MessageType="ReportProjectPublishMessageEx" MessageId="1" Stage="" /> </class> </general> </errinfo>
Error summary/areas: Reporting message processor failed ReportingProjectChangeMessageFailed Queue GeneralQueueJobFailed Error details:
<?xml version="1.0" encoding="utf-16"?> <errinfo> <general> <class name="Reporting message processor failed"> <error id="24006" name="ReportingProjectChangeMessageFailed" uid="d120becb-26a3-4fbe-8341-38a5c273453d" QueueMessageBody="Project UID='0b9e52ec-6bb6-4ca3-823b-d7561d821d1c'. PublishType='ProjectPublish'" Error="Object reference not set to an instance of an object." /> </class> <class name="Queue"> <error id="26000" name="GeneralQueueJobFailed" uid="4c6270ce-0735-44b3-ac1c-59bb0ff69efc" JobUID="a4a1f651-0997-4770-8099-efe02340967a" ComputerName="BRISMITH2007" GroupType="ReportingProjectPublish" MessageType="ReportProjectPublishMessageEx" MessageId="1" Stage="" /> </class> </general> </errinfo>
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: ' '<class name="Reporting message processor failed"> '<error id="24006" name="ReportingProjectChangeMessageFailed" 'uid="c72e20a7-9b7f-487b-9da2-19460b2e6c32" 'QueueMessageBody="Project UID='8e074f24-1064-47dd-bce5-c2dad8d556c8'. 'PublishType='ProjectPublish'" Error="Object reference not set to an instance of an object." /> '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 ActiveProject.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
'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: ' '<class name="Reporting message processor failed"> '<error id="24006" name="ReportingProjectChangeMessageFailed" 'uid="c72e20a7-9b7f-487b-9da2-19460b2e6c32" 'QueueMessageBody="Project UID='8e074f24-1064-47dd-bce5-c2dad8d556c8'. 'PublishType='ProjectPublish'" Error="Object reference not set to an instance of an object." />
'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 ActiveProject.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.
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: DOMAIN\User, 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: Domain\User 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: DOMAIN\SSPAdmin, PSI: [QUEUE] ProjectQ: Group d4364343-3402-45ef-afd0-f84c8834e5d3 type = ReportingProjectPublish aborted at Message 1 e45e8c63-38fa-49d8-9555-710851b22c90