Despliega Campos Project Server MultiValor

Project Server 2010 SQL Server 2008

Despliega Campos Project Server MultiValor, en un principio pudiera parecer complicado, sin embargo, es relativamente fácil si tienes conocimientos de SQL y además conoces la estructura de las tablas que se crean en Project Server 2010.

Cuando creamos un campo multivalor en Project Server 2010 lo que sucede es lo siguiente:

  1. El campo es removido de la vista MSP_EpmProject_UserView. Ya que esta vista solo soporta campos de único valor.
  2. Se crea una nueva vista de asociación que contiene un registro por cada valor seleccionado. Ejemplo: MSPCFPRJ_NombreCampoMultiValor_AssociationView

Una vez conociendo como se almacenan los datos, les mostraré 2 formas de realizarlo:

Opciones

  • Usando la función COALESCE de SQL.
  • Usando la función STUFF y FOR XML PATH.

Opción 1 – Usando la función COALESCE de SQL

ALTER FUNCTION [dbo].[fnc_GetMultipleRedAmberReason]
(
@EntityUID as Uniqueidentifier
)
RETURNS VARCHAR(MAX)
AS
BEGIN

DECLARE @MultipleRedAmberReason VARCHAR(MAX);

SELECT @MultipleRedAmberReason = COALESCE(@MultipleRedAmberReason + ‘, ‘, ”) + MemberValue
FROM [MSPLT_RedAmberReasonCode_UserView] AS LKP
INNER JOIN [MSPCFPRJ_Red-Amber Reason Code_AssociationView] AS ASV
ON LKP.LookupMemberUID = ASV.LookupMemberUID
WHERE ASV.EntityUID = @EntityUID

RETURN ISNULL(@MultipleRedAmberReason, ”);

END

 

SELECT P.ProjectUID, P.ProjectName, dbo.fnc_GetMultipleRedAmberReason(P.ProjectUID) AS MultipleRedAmberReason
FROM MSP_EpmProject_UserView AS P

 

Opción 2 – Usando la función STUFF y FOR XML PATH de SQL

SELECT P.ProjectUID, P.ProjectName, ML.MultipleRedAmberReason
FROM MSP_EpmProject_UserView AS P
INNER JOIN
(
SELECT IP.ProjectUID, ISNULL(STUFF(
(
SELECT ‘, ‘ + LKP.MemberValue
FROM [MSPLT_RedAmberReasonCode_UserView] AS LKP
INNER JOIN [MSPCFPRJ_Red-Amber Reason Code_AssociationView] AS ASV
ON LKP.LookupMemberUID = ASV.LookupMemberUID
WHERE ASV.EntityUID = IP.ProjectUID
FOR XML PATH(”), TYPE
).value(‘.’, ‘varchar(max)’)
,1,2,”),”) AS MultipleRedAmberReason
FROM MSP_EpmProject_UserView AS IP
GROUP BY IP.ProjectUID
) AS ML
ON P.ProjectUID = ML.ProjectUID

 

Leave a comment

Your email address will not be published.