PSVR2013: Erreur de chargement des vues après suppression des vues par défaut

Bonjour,

Je voulais partager avec vous un problème que nous avons rencontré suite à la migration de Project Server 2010 vers Project Server 2013

Description de problème:

Le client a effectué la migration d’une plateforme EPM 2010 vers un environnement Project Server 2013 On-Premise.

Depuis, lorsque chaque utilisateur essaye de se connecter pour la première fois au Project Center ou au Resource Center, l’erreur suivante apparaît:

clip_image001

Si l’utilisateur clique sur OK, un message d’erreur rouge est affiché dans la page :

clip_image002

Cause:

L’erreur se produit car les vues affectées par défaut au Project Center et au Resource Center ont été supprimées dans Project Server 2010.

En fait, l’information concernant les préférences des utilisateurs en terme de vue à afficher par exemple, est stockée dans la table [pub].MSP_WEB_USERPROPERTIES. Cette table contient en particulier, par utilisateur, la vue sélectionné sur chacune des pages affichées :

clip_image003

Ainsi, lorsqu’un utilisateurs revient sur une page qu’il a déjà affichée, il la retrouve telle qu’elle était.

Cette table n’est pas être prise en compte lors du processus de migration vers Project Server 2013. Cela signifie que cette table est vide lorsque la migration est terminée.

Dans ce cas, lors du premier affichage du Project Center ou du Resource Center (ou de toute autre page ayant des vues), Project Server va automatiquement remplir cette table en y appliquant les paramètres par défaut pour chaque utilisateur :

DECLARE @P2 DBO.USERPROPERTIES

INSERT INTO @P2 VALUES(N'JSGridWidthResourceCenterJSGridControl','827',NULL,N'resourcecenterjsgridcontrol')

INSERT INTO @P2 VALUES(N'SelectedResourcesResourceCenterJSGridControl','[]',NULL,N'resourcecenterjsgridcontrol')

INSERT INTO @P2 VALUES(N'SelectedResourceIdsResourceCenterJSGridControl','[]',NULL,N'resourcecenterjsgridcontrol')

INSERT INTO @P2 VALUES(N'ViewUidResourceCenterJSGridControl','"000010fc-7b06-45a9-9bd2-1cbfc2f64ce4"',NULL,N'resourcecenterjsgridcontrol')

INSERT INTO @P2 VALUES(N'ViewUidProjectCenterJSGridControl','"63d3499e-df27-401c-af58-ebb9607beae8"',NULL,N'projectcenterjsgridcontrol')

EXEC [PUB].MSP_WEB_SP_QRY_SETUSERPROPERTIES @RESID= '<RES_UID>',@PROPERTIES=@P2

Or, les vues par défaut ("000010fc-7b06-45a9-9bd2-1cbfc2f64ce4" et "63d3499e-df27-401c-af58-ebb9607beae8") ayant été supprimées, lors de l’affichage de la page, une erreur se produit.

Résolution:

Une demande de correctif est en cours. Il n’y a pas de statut pour le moment, mais si elle est acceptée, le correctif devrait être disponible dans le Cumulative Update d’avril 2014.

En attendant, vous pouvez résoudre le problème grâce aux scripts suivants :

IMPORTANT : Ces scripts ajoutent des données directement dans la base de données. Il est donc très important de ne pas les utiliser en Production sans les avoir tester au préalable sur une plateforme de test.

Etape 1 : Provisionner la table [pub].MSP_WEB_USERPROPERTIES pour tous les utilisateurs avec les UID des vues par défaut personnalisées :

/****** Object: Script to populate User Properties table. Created by Marc Biarnes 07/11/2013 ******/

DECLARE @RESUID UID;
DECLARE @P2 DBO.USERPROPERTIES
INSERT INTO @P2 VALUES(N'JSGridWidthResourceCenterJSGridControl','827',NULL,N'resourcecenterjsgridcontrol')
INSERT INTO @P2 VALUES(N'SelectedResourcesResourceCenterJSGridControl','[]',NULL,N'resourcecenterjsgridcontrol')
INSERT INTO @P2 VALUES(N'SelectedResourceIdsResourceCenterJSGridControl','[]',NULL,N'resourcecenterjsgridcontrol')
INSERT INTO @P2 VALUES(N'ViewUidResourceCenterJSGridControl','<View_UID of the custom view in [pub].MSP_WEB_VIEW_REPORTS>',NULL,N'resourcecenterjsgridcontrol')
INSERT INTO @P2 VALUES(N'ViewUidProjectCenterJSGridControl','<View_UID of the custom view in [pub].MSP_WEB_VIEW_REPORTS>',NULL,N'projectcenterjsgridcontrol')
DECLARE FIXRESVIEW CURSOR FOR SELECT RES_UID FROM PUB.MSP_RESOURCES;
-- OPEN THE CURSOR.
OPEN FIXRESVIEW;
FETCH NEXT FROM FIXRESVIEW INTO @RESUID
-- LOOP THROUGH THE RESOURCES.
WHILE @@FETCH_STATUS = 0
BEGIN;
EXEC [PUB].MSP_WEB_SP_QRY_SETUSERPROPERTIES @RESID=@RESUID,@PROPERTIES=@P2
FETCH NEXT FROM FIXRESVIEW INTO @RESUID
END;
-- CLOSE AND DEALLOCATE THE CURSOR.
CLOSE FIXRESVIEW;
DEALLOCATE FIXRESVIEW;

Etape 2 : Provisionner la table [pub].MSP_WEB_USERPROPERTIES pour chaque nouvel utilisateur avec les UID des vues par défaut personnalisées :

/****** Object: StoredProcedure [pub].[XMGS_SetDefaultViewByResUID] Script created by Marc Biarnes 07/11/2013 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [pub].[XMGS_SetDefaultViewByResUID]
(
@RESUID UniqueIdentifier
)
AS
BEGIN
DECLARE @P2 DBO.USERPROPERTIES
INSERT INTO @P2 VALUES(N'JSGridWidthResourceCenterJSGridControl','827',NULL,N'resourcecenterjsgridcontrol')
INSERT INTO @P2 VALUES(N'SelectedResourcesResourceCenterJSGridControl','[]',NULL,N'resourcecenterjsgridcontrol')
INSERT INTO @P2 VALUES(N'SelectedResourceIdsResourceCenterJSGridControl','[]',NULL,N'resourcecenterjsgridcontrol')
INSERT INTO @P2 VALUES(N'ViewUidResourceCenterJSGridControl','"000010FC-7B06-45A9-9BD2-1CBFC2F64CE4"',NULL,N'resourcecenterjsgridcontrol')
INSERT INTO @P2 VALUES(N'ViewUidProjectCenterJSGridControl','<View_UID of the custom view in [pub].MSP_WEB_VIEW_REPORTS>',NULL,N'projectcenterjsgridcontrol')
INSERT INTO @P2 VALUES(N'ViewUidProjectDrillDownJSGridControl','<View_UID of the custom view in [pub].MSP_WEB_VIEW_REPORTS>',NULL,'Nprojectdrilldownjsgridcontrol')
EXEC [PUB].MSP_WEB_SP_QRY_SETUSERPROPERTIES @RESID= @RESUID,@PROPERTIES=@P2
END;

Une fois la procédure stockée créée, il suffit d’exécuter la commande suivante pour ajouter les paramètres de vues personnalisées à l’utilisateur :

EXEC [PUB].XMGS_SetDefaultViewByResUID @RESUID= ‘<RES_UID>’

Information complémentaire:

Une demande de correctif est en cours. je vous tiendrais au courant.

Bonne journée,

Marc Biarnès