Actualización en masa de los campos personalizados y crear sitios de proyecto desde un flujo de trabajo en Project Online

Para ayudar a los clientes a sacar el máximo partido de Project Online y mejorar la extensibilidad y flexibilidad del servicio, hemos agregado dos métodos al modelo de objetos del lado cliente que puede usar en Project Online aplicaciones y flujos de trabajo.

Valor
UpdateCustomFields
Actualiza de forma masiva los campos personalizados del proyecto. Solo para Project Online. Solo está disponible en la API REST.
CreateProjectSite
Crea un sitio de Project. Solo para Project Online. Disponible en la API REST, el modelo de objetos de cliente administrado y el modelo de objetos de cliente de JavaScript.

Además de proporcionar más flexibilidad, estos métodos también ofrecen mejoras significativas en el rendimiento al guardar y publicar proyectos en un flujo de trabajo. En este artículo se describe cómo usar los métodos de la API REST y se proporcionan instrucciones para crear un flujo de trabajo que actualiza de forma masiva campos personalizados y un flujo de trabajo que crea un sitio de Project.

Nota:

Para obtener más información sobre cómo llamar a las API REST desde flujos de trabajo de SharePoint 2013, vea Descripción y uso de la interfaz REST de SharePoint 2013 y Llamada a la API rest de SharePoint 2013 desde un flujo de trabajo de SharePoint Designer.

Actualización masiva de campos personalizados del proyecto desde un flujo de trabajo

Anteriormente, los flujos de trabajo solo podían actualizar un campo personalizado a la vez. La actualización de campos personalizados del proyecto de uno en uno puede dar lugar a una experiencia deficiente del usuario final cuando los usuarios realizan la transición entre las páginas de detalles del proyecto. Cada actualización requería una solicitud de servidor independiente mediante la acción Establecer campo de proyecto y actualizar varios campos personalizados en una red de alta latencia y ancho de banda bajo provocaba una sobrecarga no trivial. Para resolver este problema, agregamos el método UpdateCustomFields a la API REST que le permite actualizar campos personalizados de forma masiva. Para usar UpdateCustomFields, se pasa un diccionario que contiene los nombres y valores de todos los campos personalizados que desea actualizar.

El método REST se puede encontrar en el siguiente punto de conexión:

https://<site-url>/_api/ProjectServer/Projects('<guid>')/Draft/UpdateCustomFields()

Nota:

Reemplace el <site-url> marcador de posición de los ejemplos por la dirección URL del sitio de Project Web App (PWA) y el marcador de posición por el <guid> UID del proyecto.

En esta sección se describe cómo crear un flujo de trabajo que actualiza de forma masiva campos personalizados para un proyecto. El flujo de trabajo sigue estos pasos de alto nivel:

  • Espere a que el proyecto que desea actualizar se desprotegera.

  • Cree un conjunto de datos que defina todas las actualizaciones de campos personalizadas para el proyecto.

  • Consulte el proyecto.

  • Llame a UpdateCustomFields para aplicar las actualizaciones de campos personalizados al proyecto.

  • Registre la información pertinente en la lista del historial de flujos de trabajo (si es necesario).

  • Publique el proyecto.

  • Proteger el proyecto.

El flujo de trabajo final de un extremo a otro tiene este aspecto:

Flujo de trabajo de un extremo a otro de un

Para crear un flujo de trabajo que actualice de forma masiva campos personalizados

  1. Opcional. Almacene la dirección URL completa del proyecto en una variable que pueda usar en todo el flujo de trabajo.

    Almacenar la dirección URL del proyecto en una variable

  2. Agregue la acción Wait for Project Event (Esperar evento del proyecto ) al flujo de trabajo y elija el evento When a project is checked in (Cuando un proyecto está protegido ).

    Espere a que el proyecto se compruebe en

  3. Cree un diccionario requestHeader mediante la acción Compilar diccionario . Usará el mismo encabezado de solicitud para todas las llamadas de servicio web de este flujo de trabajo.

    Compilación del diccionario requestHeader

  4. Agregue los dos elementos siguientes al diccionario.

    Nombre Tipo Valor
    Accept
    Cadena
    application/json; odata=verbose
    Content-Type
    Cadena
    application/json; odata=verbose

    Agregar un encabezado Accept

  5. Cree un diccionario requestBody mediante la acción Compilar diccionario . Este diccionario almacena todas las actualizaciones de campo que desea aplicar.

    Cada actualización de campo personalizada requiere cuatro filas: el tipo de metadatos (1), (2) clave, (3) valor y (4) tipo de valor del campo.

    • __metadata/tipo Tipo de metadatos del campo. Este registro siempre es el mismo y usa los siguientes valores:

      • Nombre: customFieldDictionary(i)/__metadata/type (donde i es el índice de cada campo personalizado del diccionario, empezando por 0)

      • Tipo: String

      • Valor: SP. KeyValue

      Definición de una actualización de campo personalizada

    • Clave Nombre interno del campo personalizado, con el formato: Custom_ce23fbf43fa0e411941000155d3c8201

      Para encontrar el nombre interno de un campo personalizado, vaya a su punto de conexión InternalName : https://<site-url>/_api/ProjectServer/CustomFields('<guid>')/InternalName

      Si ha creado manualmente los campos personalizados, los valores variarán de sitio a sitio. Si tiene previsto reutilizar el flujo de trabajo en varios sitios, asegúrese de que los identificadores de campo personalizados sean correctos.

    • Valor Valor que se va a asignar al campo personalizado. Para los campos personalizados que están vinculados a tablas de búsqueda, debe usar los nombres internos de las entradas de la tabla de búsqueda en lugar de los valores reales de la tabla de búsqueda.

      Puede encontrar el nombre interno de la entrada de tabla de búsqueda en el siguiente punto de conexión: https://<site-url>/_api/ProjectServer/CustomFields('<guid>')/LookupEntries('<guid>')/InternalName

      Si tiene un campo personalizado de tabla de búsqueda configurado para aceptar varios valores, use ;# para concatenar valores (como se muestra en el diccionario de ejemplo siguiente).

    • ValueType Tipo del campo personalizado que está actualizando.

      • Para los campos Text, Duration, Flag y LookupTable, use Edm.String.

      • Para los campos Number, use Edm.Int32, Edm.Double o cualquier otro tipo de número aceptado por OData.

      • Para los campos Date, use Edm.DateTime.

      El diccionario de ejemplo siguiente define las actualizaciones de tres campos personalizados. El primero es para un campo personalizado de tabla de búsqueda de varios valores, el segundo es para un campo numérico y el tercero para un campo de fecha. Observe cómo aumenta el índice customFieldDictionary .

      Nota:

      Estos valores son solo para fines ilustrativos. Los pares clave-valor que usará dependerán de los datos de PWA.

      Nombre Tipo Valor
      customFieldDictionary(0)/__metadata/type
      Cadena
      SP. KeyValue
      customFieldDictionary(0)/Key
      Cadena
      Custom_ce23fbf43fa0e411941000155d3c8201
      customFieldDictionary(0)/Value
      Cadena
      Entry_b9a2fd69279de411940f00155d3c8201;#Entry_baa2fd69279de411940f00155d3c8201
      customFieldDictionary(0)/ValueType
      Cadena
      Edm.String
      customFieldDictionary(1)/__metadata/type
      Cadena
      SP. KeyValue
      customFieldDictionary(1)/Key
      Cadena
      Custom_c7f114c97098e411940f00155d3c8201
      customFieldDictionary(1)/Value
      Cadena
      90.5
      customFieldDictionary(1)/ValueType
      Cadena
      Edm.Double
      customFieldDictionary(2)/__metadata/type
      Cadena
      SP. KeyValue
      customFieldDictionary(2)/Key
      Cadena
      Custom_c6fb67e0b9a1e411941000155d3c8201
      customFieldDictionary(2)/Value
      Cadena
      2015-04-01T00:00:00
      customFieldDictionary(2)/ValueType
      Cadena
      Edm.DateTime

      Diccionario que define las actualizaciones de campos personalizadas

  6. Agregue una acción Llamar al servicio web HTTP para desproteger el proyecto.

    Llamada al método Checkout

  7. Edite las propiedades de la llamada al servicio web para especificar el encabezado de solicitud. Para abrir el cuadro de diálogo Propiedades , haga clic con el botón derecho en la acción y elija Propiedades.

    Especificar el encabezado de solicitud en las propiedades de llamada de servicio web.

  8. Agregue una acción Llamar al servicio web HTTP para llamar al método UpdateCustomFields .

    Crear una acción Llamar a un servicio web HTTP

    Anote el /Draft/ segmento en la dirección URL del servicio web. La dirección URL completa debe tener este aspecto: https://<site-url>/_api/ProjectServer/Projects('<guid>')/Draft/UpdateCustomFields()

    Llamada al método UpdateCustomFields

  9. Edite las propiedades de la llamada al servicio web para enlazar los parámetros RequestHeader y RequestContent a los diccionarios que ha creado. También puede crear una nueva variable para almacenar ResponseContent.

    Enlazar los diccionarios al encabezado de solicitud y al contenido

  10. Opcional. Lea en el diccionario de respuesta para comprobar el estado del trabajo de cola y registrar la información en la lista de historial de flujo de trabajo.

    Configuración del registro

  11. Agregue una llamada de servicio web al punto de conexión de publicación para publicar el proyecto. Use siempre el mismo encabezado de solicitud.

    Llamada al método Publish

    Propiedades de la llamada publicar servicio web

  12. Agregue una llamada de servicio web final al punto de conexión de Checkin para proteger el proyecto.

    Llamada al método Checkin

    Propiedades de la llamada del servicio web Checkin

Creación de un sitio de Project a partir de un flujo de trabajo

Cada proyecto puede tener sus propios sitios de SharePoint dedicados donde los miembros del equipo pueden colaborar, compartir documentos, generar problemas, etc. Anteriormente, el administrador de proyectos solo podía crear sitios automáticamente en la primera publicación o manualmente en Project Profesional o por el administrador en la configuración de PWA, o bien podrían deshabilitarse.

Hemos agregado el método CreateProjectSite para que pueda elegir cuándo crear sitios de proyecto. Esto resulta especialmente útil para las organizaciones que quieren crear sus sitios automáticamente cuando una propuesta de proyecto alcanza una fase específica en un flujo de trabajo predefinido, en lugar de en la primera publicación. Posponer la creación del sitio del proyecto mejora significativamente el rendimiento de la creación de un proyecto.

Requisito previo: Para poder usar CreateProjectSite, la opción Permitir a los usuarios elegir debe establecerse para la creación del sitio del proyecto en Configuración de PWA Configuración>de sitios de SharePoint conectados>.

Establecer

Para crear un flujo de trabajo que crea un sitio de Project

  1. Cree o edite un flujo de trabajo existente y seleccione el paso donde desea crear los sitios de Project.

  2. Cree un diccionario requestHeader mediante la acción Compilar diccionario .

    Compilación del diccionario requestHeader

  3. Agregue los dos elementos siguientes al diccionario.

    Nombre Tipo Valor
    Accept
    Cadena
    application/json; odata=verbose
    Content-Type
    Cadena
    application/json; odata=verbose

    Agregar un encabezado Accept

  4. Agregue la acción Llamar al servicio web HTTP . Cambie el tipo de solicitud para usar POST y establezca la dirección URL con el formato siguiente:

    https://<site-url>/_api/ProjectServer/Projects('<guid>')/CreateProjectSite('New web name')

    Creación del URI del punto de conexión CreateProjectSite

    Pase el nombre del sitio de Project al método CreateProjectSite como una cadena. Para usar el nombre del proyecto como nombre del sitio, pase una cadena vacía. Asegúrese de usar nombres únicos para que funcione el siguiente sitio de proyecto que cree.

  5. Edite las propiedades de la llamada al servicio web para enlazar el parámetro RequestHeader al diccionario que ha creado.

    Enlace del diccionario a la solicitud

Vea también