Limites de consultas ODATA para #ProjectOnline #ProjectServer

Realizar consultas a la base de datos de Reporte de Project Server o Project Online mediante OData tienen una serie de limitantes que es necesario tener en cuenta al momento de realizar consultas de cierta complejidad o de un gran volumen de registros esperados.

En la página oficial de referencia ProjectData – Project OData service reference se puede identificar todas las limitaciones, en particular las más representativas a continuación:

  • No es posible utilizar los comandos $links o $expand en una consulta, los cuales permiten traer datos de una segunda tabla relacionada.
  • La consulta por ODATA devuelve diferente número de registros según la tabla de consulta y según la plataforma (Server o Online).
  • Para el caso de Project Online los limites en el número de registros NO puede modificarse.
  • El comando $top no aplicará para valores que sobrepasen los límites de cada tabla, pero no mostrará errores de ejecución.
  • El comando $apply y aggregate no funcionan, aunque no devuelve error la consulta, simplemente los omite. Estos son los comandos por los cuales se milita mucho ODATA en Project.

Los límites de registros cuando se realiza una consulta, según la tabla, son los siguientes

Tabla de Consulta Project Server Project Online
Proyectos 100 300
Tareas 100 300
Riesgos 200 1.000
Problemas 200 1.000
Recursos 100 1.000

Para el caso de Project Server, se pueden cambiar lo límites ejecutando el siguiente comando:

Set-SPProjectOdataConfiguration -EntitySetName Projects -PageSizeOverride 200

Si queremos consultar los límites actuales de la plataforma podemos ejecutar el siguiente comando:

(Get-SPProjectOdataConfiguration).EntitySetsWithMaxPAgeSizeOverride

Conoces alguna otra limitante?


Publicación Original: https://myprojectserver.wordpress.com/2018/06/28/limites-de-consultas-odata-para-projectonline-projectserver/

 

Listado de Riesgos Centralizado en #ProjectOnline

En mi anterior post vimos como crear una página con un script para realizar búsquedas de sitios de proyectos (enlace aquí). hoy les tengo un script un poco mas básico pero igual muy necesario.

Project Server y Project Online traen una hoja resumen de los riesgos y problemas (asuntos) por proyecto desde donde podemos ir al sitio de proyecto y consultar los datos de detalle. pero de forma nativa no existe una lista completa de los riesgos del todos los proyectos; obvio, la podemos obtener mediante consultas ODATA, pero estos listados los veríamos en Excel o en Power BI, pero no en una página dentro del mismo PWA.

Continue reading

Búsqueda de Sitios de Proyectos en #ProjectOnline

Project Online y Project Server permiten realizar consultas a sus bases de datos mediante consultas ODATA y código realizado en Java Script. Con estas dos opciones combinadas, podríamos crear diferentes elementos que nos permitan consultar y obtener información de relevancia para Project y SharePoint.

A continuación, se presenta la funcionalidad de un buscador de sitios de proyectos:

Buscador_sitio_Proyecto_1

Esta búsqueda devuelve campos nativos de la plataforma y campos personalizados de Project, como son:

  • Nombre del Proyecto: Campo nativo
  • URL: Campo nativo ajustado, Enlace al sitio de proyecto en una pestaña aparte.
  • Director del Proyecto: Campo nativo, Propietario del proyecto
  • Cliente: Campo personalizado
  • Estado: Campo personalizado
  • Solución: Campo personalizado
  • Descripción: Campo nativo

Project Server y Project Online poseen un elemento web que permite listar los sitios de los proyectos, pero este no permite personalizaciones en los campos visibles ni aplicar filtros, por lo cual su funcionalidad es muy limitada.

Este buscador de sitios de proyectos podría ubicarse en la página inicial de PWA o en una página por separado. El procedimiento a continuación, describe como crear el buscador a partir de una página nueva

  • Subimos el archivo Script en la biblioteca de Activos del sitio o la biblioteca de su preferencia.
    1. Archivo guardado en formato JS
      1. archivo ejemplo: Project Site Finder.js
    2. Contenido del archivo:
    3. <!–Copyright (C) 2014, jQuery Foundation
       Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
      THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
      –>
      <!–
      Copyright (C) 2008-2014, SpryMedia Ltd.
      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
      THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
      –>
       /sites/pwa/SiteCollectionDocuments/jquery-2.1.1.min.js
      <link rel=”stylesheet” type=”text/css” href=”//cdn.datatables.net/1.10.0/css/jquery.dataTables.css”>
      //cdn.datatables.net/1.10.0/js/jquery.dataTables.js<!– h2>Buscador Sitio de Proyectos</h2 –>
      <br>
      Palabra de Búsqueda: <input type=”text” id=”ProjectName” >
      <input type=”button” value=”Buscar Proyecto” onclick=”LoadProjectData($(‘#ProjectName’).val());” >
      <br>
      <table width=”100%” align=”left” cellpadding=”0″ border=”1″ class=”stripe hover” id=”Projectfield”>
      <thead><th>Nombre Proyecto</th><th>URL</th><th>Director de Proyecto</th><th>Cliente</th><th>Estado</th><th>Solucion</th><th> Descripción</th></thead>
      </table>

      function LoadProjectData(ProjectName) {
      var data = $.ajax({url: _spPageContextInfo.siteAbsoluteUrl + “/_api/ProjectData/[en-US]/Projects()?”
      + “$filter=((substringof(‘”+ProjectName+”‘, ProjectName)) or (substringof(‘”+ProjectName+”‘, EmpresaCliente)) “
      + ” or (substringof(‘”+ProjectName+”‘, EstadoProyecto)) or (substringof(‘”+ProjectName+”‘, Soluci%C3%B3n))”
      + ” or (substringof(‘”+ProjectName+”‘, ProjectOwnerName)))and ProjectType ne 7″
      + “&$orderby=EstadoProyecto”
      + “&$select=ProjectName,ProjectDescription, ProjectOwnerName,EmpresaCliente,EstadoProyecto, Soluci%C3%B3n,ProjectWorkspaceInternalUrl”,
      type: “GET”,
      dataType: “json”,
      headers: {Accept: “application/json;odata=verbose” }
      });
      data.done(function (data,textStatus, jqXHR){
      $(‘#Projectfield’).dataTable( {
      “bDestroy”: true,
      “bAutoWidth”: true,
      “bFilter”: true,
      “bInfo”: false,
      “bProcessing”: true,
      “bPaginate”: false,
      “bSort”: true,
      “aaData”: data.d.results,
      “aoColumns”: [
      { “mData”: “ProjectName” },
      { “mData”: “ProjectWorkspaceInternalUrl” },
      { “mData”: “ProjectOwnerName” },
      { “mData”: “EmpresaCliente” },
      { “mData”: “EstadoProyecto” },
      { “mData”: “Solución” },
      { “mData”: “ProjectDescription” }
      ],
      “aoColumnDefs”: [
      { “mRender”: function (data, type, full) {
      return ‘Sitio‘;
      },
      “aTargets”: [1]
      }
      ],
      });
      });
      data.fail(function (jqXHR,textStatus,errorThrown){
      alert(“Error al obtener datos de proyectos: ” + jqXHR.responseText + “\n\n No hay datos de proyectos cargados.”);
      });
      }

  • Cargamos el archivo jquery-2.1.1.min.js en la misma biblioteca donde se carga el script de la consulta.
  • Creamos una página web en PWA.
  • Agregamos el elemento de Content Editor en la página creada.
  • En la opción de definición del Content Editor, en modo de edición, establecemos la URL hacia el archivo script de la consulta, incluyendo su extensión .js

Buscador_sitio_Proyecto_2

  • Aceptamos los cambios y guardamos la página web.
    • Es posible que deban publicar la página web dependiendo su tienen o no el componente de publicación habilitado.
    • No olvide cambiar el título del Content Editor y ajustar la ubicación de ser necesario.
  • La página de búsqueda debería funcionar sin problemas devolviéndoles el listado de campos empresariales según la palabra de búsqueda indicada:

Al escribir una palabra o parte de una palabra, el resultado de la búsqueda traerá datos de los campos de nombre de proyecto, cliente, propietario, estado y solución.

Su implementación deberá ajustar estos campos a los requeridos.

  • Adicional al listado, la tabla permitirá:
    • Ordenar por columnas
    • Realizar búsqueda en el contenido
    • ajustar el contenido al tamaño de la tabla
    • Identificar la cantidad de elementos de la página (No habilitado, pero solo se necesita cambiar bInfo a true en el script)
    • Paginar elementos. (No habilitado, pero solo se necesita cambiar bPaginate a true en el script).

Si queremos ver que otros campos podemos realizar para la consulta, podríamos realizar la consulta en internet explorer u otro navegador que permita resultados en XML de ODATA, así:

  • <URL Dominio >/sites/pwa/_api/ProjectServer/CustomFields()?

Gracias por su interés y comentarios.

Esta publicación no sería posible sin el blog de pwmather al cual se le agradece enormemente.

 

Publicacion de Origen:  https://myprojectserver.wordpress.com/2017/04/18/busqueda-de-sitios-de-proyectos-en-projectonline/

REST Endpoint Para #ProjectOnline #ProjectServer

Project Server y Project Online permiten realizar consultas a su fuente de datos mediante ODATA desde una fuente ampliamente documentada como es:

Desde esa ruta podemos acceder a todas las estructuras de datos de Project con el contenido de los proyectos, tareas, recursos, riesgos, problemas, entregables, entre otras:

odata

Pero, ¿Si quisiéramos acceder a las estructuras de la plataforma como tal, es decir, a la lista de campos empresariales, tablas de consulta, calendarios, ect.?

Desde la opción de ProjectData No es posible obtener esta información. afortunadamente tenemos una segunda opción, no muy documentada ni conocida:

Desde este dirección, podemos acceder a las siguientes estructuras:

projectserver

  • Calendarios
  • Campos empresariales
  • Tipos de Proyectos
  • Recursos Empresariales
  • Eventos
  • Fases y etapas
  • Proyectos
  • Configuración
  • Periodos de tiempo
  • Permisos de usuario
  • Páginas de detalle de proyectos
  • Flujos de trabajo de proyectos

La forma de consultar la información de estas estructuras sigue los mismos principios de ProjectData y las funcionalidades de ODATA.

  • Consultas, Filtros y ordenamiento de registros
  • Obtener información para realizar reportes en Excel o Power BI
  • Utilizar en código especializado en Visual Studio y Flujos de Trabajo

Para mayor información sobre las estructuras puede consultar:

 

Publicacion de Origen: https://myprojectserver.wordpress.com/2016/11/30/rest-endpoint-para-projectonline-projectserver/