21 de agosto de 2014

Project Server 2010. Obtener valores de una lista SharePoint filtrada por proyecto

Recientemente me solicitaron una consulta con las siguientes premisas / condiciones: Dada una lista de SharePoint (ListaDePruebas), que se usa para almacenar ciertos valores (metadatos) de los distintos proyectos, se necesita recuperar dichos metadatos pero filtrados para un único proyecto.

Al final no deja de ser una lista genérica de SharePoint por lo que creamos un procedimiento almacenado como el siguiente:

CREATE PROCEDURE dbo.STPROC_GetInfoByList_ListaDePruebas

      @ProjectUID NVARCHAR(50) = NULL

AS

BEGIN

      DECLARE @ListId AS VARCHAR(50) = dbo.fnIng_GetListId('ListaDePruebas')

 

      SELECT

            UD.nvarchar3 AS ProjectUID,

            UD.bit1 AS EsParicipante,         

            UD.int1 AS AreaId,

            UDJ.tp_Id AS UserId,

            dbo.fnIng_GetUserName(UDJ.tp_Id) AS UserName,

            dbo.fnIng_GetUserEmail(UDJ.tp_Id) AS UserEmail

      FROM

            UserData UD

            LEFT JOIN UserDataJunctions UDJ

                  ON UDJ.tp_SourceListId = @ListId AND UDJ.tp_DocId = UD.tp_DocId

      WHERE

            UD.tp_ListId = @ListId

            AND UD.nvarchar3 = @ProjectUID

      ORDER BY

            UD.int1    

END

 

En el procedimiento almacenado hacemos uso de 2 funciones escalares que ya tenemos previamente desarrolladas y que no viene al caso explicar en este Tip:

dbo.fnIng_GetUserName: Dado el identificador del usuario, devuelve el nombre completo del mismo.

dbo.fnIng_GetUserEmail: Dado el identificador del usuario, devuelve el mail.

8 de agosto de 2014

Project Server 2013. Obtener valores Custom Field que permiten selecciones múltiples

Project Server 2013 ha modificado la estructura de base de datos de sus instancias, de las 4 bases de datos que existían en la versión PS 2010, ahora (PS 2013) se han consolidado en solo una.

Con esta evolución, han cambiado muchas cosas, una de ellas es la forma de recuperar los valores de un campo de empresa (Custom Field) que permiten selecciones múltiples.

En PS 2013 tendríamos que usar una consulta parecida a la siguiente:

DECLARE @CustomFieldUID VARCHAR(50) = 'ca88c587-72b7-4168-9010-1d2eaf344a62'

DECLARE @ProjectUID VARCHAR(50) = 'D4DFEE41-13AD-4C8C-A326-0A873D036A31'

SELECT

                CFA.EntityUID AS ProjectUID, P.ProjectName,             

                CFA.LookupMemberUID, LT.MemberValue AS ListItemValue

FROM        

                diag.dbo_MSP_EpmCustomFieldAssociation CFA

                LEFT JOIN dbo.[MSPLT_{NombreCampoEmpresa}_UserView] LT ON CFA.LookupMemberUID = LT.LookupMemberUID

                INNER JOIN dbo.MSP_EpmProject_UserView P ON CFA.EntityUID = p.ProjectUID

WHERE

                CFA.CustomFieldTypeUID = @CustomFieldUID

                AND CFA.EntityUID = @ProjectUID

 

Donde:

@CustomFieldUID: Identificador del campo de empresa (Custom Field) que permite selecciones múltiples y que deseamos recuperar.

@ProjectUID: Identificador del proyecto para el cual queremos recuperar los valores seleccionados.

{NombreCampoEmpresa}: Nombre del campo de empresa (Custom Field) que permite selecciones múltiples y que deseamos recuperar.