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:
- El campo es removido de la vista MSP_EpmProject_UserView. Ya que esta vista solo soporta campos de único valor.
- 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
BEGINDECLARE @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 = @EntityUIDRETURN 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