Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Muestra cómo usar servicios web en flujos de trabajo de SharePoint mediante Visual Studio 2012.
Proporcionado por:Andrew Connell, Voitanos
Nota:
Los flujos de trabajo de SharePoint 2010 se han retirado desde el 1 de agosto de 2020 para los nuevos espacios empresariales y se han quitado de los espacios empresariales existentes el 1 de noviembre de 2020. Si está usando los flujos de trabajo de SharePoint 2010, le recomendamos que migre a Power Automate u otras soluciones compatibles. Para obtener más información, consulte Retirada del flujo de trabajo de SharePoint 2010.
Este artículo incluye un ejemplo de código de extremo a extremo que puede usar para seguir el artículo, o como un inicio de sus propios proyectos de flujo de trabajo de SharePoint. Puede encontrar el código descargable en la Galería de código de MSDN, aquí: Trabajar con servicios web en flujos de trabajo de SharePoint mediante Visual Studio 2012.
El equipo de flujo de trabajo trabajó con el equipo de Azure para crear un producto denominado Administrador de flujos de trabajo. El Administrador de flujos de trabajo cumple el rol de hospedar la versión más reciente del entorno de ejecución de Windows Workflow Foundation (versión 4) y todos los servicios necesarios de una manera escalable y de alta disponibilidad. Aprovecha Microsoft Azure Service Bus para mejorar el rendimiento y la escalabilidad y, cuando se implementa, se ejecuta igual en una implementación local o en una implementación en la nube. A continuación, SharePoint se conecta y configura para entregar todas las tareas relacionadas y de ejecución de flujo de trabajo a la granja del Administrador de flujos de trabajo. Uno de los cambios más importantes en la nueva arquitectura de flujo de trabajo es que todos los flujos de trabajo personalizados de SharePoint son completamente declarativos, incluidos los creados con Visual Studio 2012.
En las versiones anteriores de SharePoint, los flujos de trabajo desarrollados con Visual Studio 2012 no eran exclusivamente declarativos, En su lugar, eran un emparejamiento de XAML declarativo con un ensamblado compilado. El ensamblado administrado contenía la lógica de negocios del flujo de trabajo. Esto puede resultar un shock para los desarrolladores experimentados de SharePoint que pueden preguntar: "¿Cómo implemento mi lógica de negocios personalizada sin un ensamblado compilado?". Microsoft sugiere que, en su lugar, cree un servicio web personalizado, idealmente un servicio web WCF, OData o RESTful que devuelva datos en el formato de notación de objetos JavaScript (JSON) y que use algunas de las nuevas actividades y objetos de esta nueva versión.
Escenarios para usar servicios web en flujos de trabajo de SharePoint
No es difícil concebir escenarios en los que aprovecharía un servicio web personalizado en un flujo de trabajo de SharePoint. Los desarrolladores que han creado flujos de trabajo con SharePoint 2007 o SharePoint 2010 están acostumbrados a trabajar con código personalizado, ya que estos flujos de trabajo mediante programación de forma inherente. No eran necesarios para agregar código personalizado a estos flujos de trabajo, pero al hacerlo por lo que era bastante común.
Con los flujos de trabajo de SharePoint para ser puramente declarativos, muchos casos en los que puede haber escrito código personalizado ahora deben controlarse con código escrito en un servicio web externo al que llama y consume el flujo de trabajo.
Los flujos de trabajo de SharePoint pueden consumir cualquier tipo de servicio web. Dicho esto, es más fácil para los flujos de trabajo interactuar con servicios web que pasan datos mediante el protocolo de datos abiertos ( OData ), como siempre en cualquiera de los formatos de Atom o json. OData es el mejor enfoque porque es totalmente compatible con las herramientas de creación de flujos de trabajo de SharePoint (Tanto SharePoint Designer 2013 como Visual Studio 2012).
Además, se admiten tanto servicios web anónimos como los mensajes protegidos con distintos tipos de autenticación. De hecho, tiene control total sobre la solicitud y respuesta de control para cada llamada de servicio. Por ejemplo, puede usar una serie de actividades dentro de un flujo de trabajo para autenticarse primero mediante un servicio para obtener un token de OAuth y, a continuación, incluir ese token en futuras solicitudes a servicios protegidos mediante OAuth 2.0.
Aprovechamiento de servicios web en flujos de trabajo
Trabajar con servicios web en flujos de trabajo de SharePoint implica dos fases. La primera es simplemente llamar al servicio web, que se hace mediante una nueva actividad HttpSend introducida con SharePoint. HttpSend le permite llamar a los servicios web más simples ni, para tareas más complejas, proporciona los verbos HTTP y proporciona los encabezados HTTP específicos. La figura 1 muestra muchas de las propiedades que están disponibles en la actividad HttpSend.
Figura 1. Ventana de herramientas de propiedades para la actividad HttpSend
También debe especificar el tipo de método que se va a usar en la solicitud de servicio. Aviso en la figura 1 que en la solicitud de bloquear que puede especificar el tipo de método (en este caso, GET). Las opciones disponibles incluyen GET, PUT, POSTy DELETE (aunque existen otros). Ésta es la forma principal para indicar a los servicios web, específicamente los servicios RESTful, qué hacer en el recurso definido en el URI de la actividad.
Por ejemplo, para obtener todas las propiedades de un elemento específico, la Uri va a contener la dirección única del elemento y el método se establecería en GET. Para eliminar el elemento, los Uri seguirían siendo la misma dirección única del elemento, pero el método se establecería en DELETE. El mismo es true para actualizar un elemento, excepto que el método se establecería en POST. En la creación de un elemento, el Uri sería elija la dirección única de la colección donde es el elemento que se creará y el método se establecería en POST. Al crear o actualizar los elementos, servicios requieren los datos para usar lo que se pasa como el contenido de la solicitud, indicada mediante la propiedad RequestContent en la actividad HttpSend.
La segunda fase de trabajar con servicios web que vamos a cubrir implica enviar o recibir datos desde un servicio web. Independientemente del uso de las propiedades RequestContent o ResponseContent en la actividad HttpSend ) puede pasar los datos como una estructura compleja, que tiene el formato como cadenas de Notación de objetos de JavaScript (JSON). La buena noticia es que no tiene que crear y manipular estas cadenas json manualmente. En su lugar, Microsoft le ofrece un nuevo tipo de objeto, DynamicValue, que facilita mucho su tarea.
objetos de DynamicValue pueden almacenar datos jerárquico, así como almacenar la respuesta de una llamada al servicio web. Además, hay una serie de actividades asociadas con objetos DynamicValue que puede utilizar para contar el número de elementos en la respuesta, extraer valores de la respuesta o generar una nueva estructura para actualizar o crear elementos.
Creación de servicios web para flujos de trabajo de SharePoint
Con la compatibilidad para llamar a servicios web y la falta de compatibilidad con código personalizado dentro de flujos de trabajo, los desarrolladores ahora deben saber cómo crear servicios. Hay muchas opciones para crear servicios web personalizados para su uso en flujos de trabajo de SharePoint. El tipo de datos de DynamicValue y la actividad de HttpSend son más adecuadas para los servicios RESTful y aquellos que cumplir con el Protocolo OData.
OData es un protocolo para crear y consumir datos basados en los principios de servicios REST. Se desarrolló en un esfuerzo para estandarizar el intercambio de datos mediante el protocolo HTTP para adultos, confiable y eficaz. Una vez que se completara la especificación OData, distintas organizaciones implementan el protocolo en sus propias pilas de tecnología. Microsoft implementó su propia versión de OData y la tachó como Windows Communication Foundation (WCF) Data Services 5.0.
Los servicios RESTful implementados por SharePoint admiten realmente OData porque se crearon mediante WCF Data Services, específicamente WCF Data Services 5.0, que implementa la especificación de OData 3.0.
Implementar las operaciones de servicio de OData CRUD-Q
Un uso común para los servicios web está llevando a cabo simple crear, leer, actualizar, eliminar y operaciones (CRUD-Q) en datos de una base de datos de consulta. Crear un servicio OData para usarlo con un flujo de trabajo de SharePoint es bastante sencillo mediante WCF. Suponiendo que tiene una base de datos existe es cuatro pasos cortos que requieren muy poca codificación:
- Cree un modelo de la base de datos mediante Entity Framework. No hay ningún código requerido (Visual Studio, proporciona un asistente).
- Crear un nuevo servicio de datos WCF. No hay ningún código requerido (Visual Studio proporciona un asistente).
- En el archivo de código del servicio, Establece el nombre del modelo de entidad (creada en el paso 1 de #) y el origen del servicio, a continuación, establezca la accesibilidad y permisos para las entidades en el modelo. Ambos pasos requieren tan sólo dos líneas de código.
- Publique el servicio en una ubicación en la que tenga acceso Administrador de flujos de trabajo.
Implemente operaciones de servicio de OData
Otra tarea que desea llevar a cabo con los servicios web está ejecutando la lógica empresarial que no se ajustan en el modelo CRUDQ. Por ejemplo, considere la posibilidad de un servicio de OData que admite operaciones CRUD-Q para la creación de nuevos préstamos. Suponga que este servicio también es compatible con los consumidores llamar al servicio y proporcionar una puntuación de crédito para recuperar una tasa de interés actual de un préstamo potencial. Este tipo de tarea no se encuentra en el modelo de CRUDQ, ya que se llama a un método y pasa un entero para recibir una respuesta.
Los servicios de datos de OData y WCF admiten este escenario proporcionando operaciones de servicio. Las operaciones de servicio son comunes e incluso se usan en los servicios de SharePoint, por ejemplo, al recuperar una lista específica mediante la dirección http://[..]/_api/web/lists/GetByTitle('ListTitle')
. El método GetByTitle es un operador de servicio creado por el equipo de SharePoint. Los programadores crear sus propias operaciones de servicio personalizado en servicios web personalizados creados con WCF Data Services.
Tutorial: Crear un flujo de trabajo con Visual Studio 2012
En el siguiente tutorial se muestra cómo crear un flujo de trabajo personalizado que llama a un servicio web de OData en la base de datos Northwind. Puede encontrar la base de datos Northwind hospedada en OData.org.
Cuando se complete el flujo de trabajo, los usuarios se escriba un ID de cliente, a continuación, iniciar el flujo de trabajo. Cuando inicia, el flujo de trabajo recupera información adicional del cliente y actualiza el elemento de lista con los datos que ha recuperado.
Inicie Visual Studio 2012 y cree un nuevo proyecto de aplicación hospedada en SharePoint.
En este proyecto, cree una nueva lista personalizada y asígnele el nombre "Customers".
En esta lista nueva, cree los siguientes campos. Deje el tipo de datos predeterminado para cada campo como string:
-
- CustomerId (cambiar el nombre del campo de "Title" de forma predeterminada)
- Nombre del cliente
- Puesto
- Address
- País o región
- Teléfono del trabajo
- Número de fax
Ahora, agregue un flujo de trabajo para el proyecto haciendo clic en El Explorador de soluciones, en Agregar>Nuevo elemento; a continuación, en el cuadro de diálogo Agregar nuevo elemento, seleccione el elemento de proyecto de flujo de trabajo de la categoría de Office/SharePoint.
Nombre del flujo de trabajo "CompleteCustomerDetails" y haga clic en siguiente.
Cuando se le solicite el Asistente para la personalización, nombre del flujo de trabajo "Obtener información detallada de cliente" y establezca que sea un flujo de trabajo de lista. Haga clic en siguiente.
En la siguiente página del asistente, active la casilla para crear una asociación, seleccione la lista de clientes y, a continuación, seleccione Crear nuevo para las listas de historial y tareas de flujo de trabajo. Haga clic en siguiente.
En la página del asistente final, active la casilla para iniciar el flujo de trabajo manualmente; deje la opción para iniciar automáticamente desprotegida . Haga clic en Finalizar.
En este punto, Visual Studio muestra la superficie del Diseñador de flujo de trabajo que contiene una actividad único Sequence.
Cambie el nombre de la actividad de secuencia a raíz.
Agregue cuatro actividades Sequence más dentro de la actividad de raíz y asignarle un nombre como sigue:
- Init
- Obtener datos de cliente de servicio
- Respuesta del servicio de proceso
- Actualizar elemento de lista
En este punto, el flujo de trabajo aparecerá como se muestra en la figura 2.
Figura 2. Completar el flujo de trabajo de detalles del cliente con cuatro secuencias vacías
Obtenga el identificador de cliente que ha escrito el usuario
Lo primero que necesita hacer el flujo de trabajo es recuperar el identificador de cliente, tal y como se ha escrito el usuario. Para ello, debe crear dos variable.
Haga clic en la ficha Variables en la parte inferior del Diseñador de flujo de trabajo y cree dos variables
- CustomerItemProperties (tipo de datos = DynamicValue; ámbito = Init). Utilice esta variable para almacenar el conjunto de resultados devuelto por la actividad que obtiene todas las propiedades del elemento de lista.
Nota:
[!NOTA] No se muestra el tipo de datos de DynamicValue de forma predeterminada. Para encontrarla, seleccione la opción buscar tipos en la columna de Tipo de Variable. En el cuadro de búsqueda en la parte superior del cuadro de diálogo, escriba DynamicValue y, a continuación, seleccione la Microsoft.Activities.DynamicValue.
- CustomerId (tipo de datos = String; ámbito = Root): Use esta variable para almacenar el ID de cliente especificada por el usuario.
Busque la actividad de LookupSpListItem en la sección de SP - lista del cuadro de herramientas y arrástrelo a la secuencia de Init. Establezca las propiedades de actividad, tal como se muestra en la figura 3.
Figura 3. Ventana de herramientas propiedades para la actividad LookupSPListItem
Esta actividad indica a Administrador de flujos de trabajo usar la API de REST de SharePoint para recuperar las propiedades del elemento de lista actual y para almacenar la respuesta JSON en la variable DynamicValue que acaba de crear.
Recuperar el identificador de cliente desde el elemento de lista, haga clic en el vínculo de Obtener propiedades de la actividad de LookupSpListItem. Esto agrega una actividad de GetDynamicValueProperties a la superficie de diseño.
En el cuadro de diálogo Propiedades , haga clic en los puntos suspensivos ( ???) para abrir el selector De propiedades, que se muestra en la figura 4. En el asistente, establezca Tipo de entidad en Elemento de lista de clientes y, a continuación, agregue una sola propiedad, CustomerId, con la ruta de acceso establecida en CustomerId y Asignar a establecida en CustomerId (la variable creada anteriormente), como se muestra en la ilustración siguiente.
Haga clic en Crear y escriba CustomerId en la columna de ruta de acceso.
En la columna Asignar a, escriba CustomerId, que es la variable que se creó anteriormente. Figura 4 se muestra el cuadro de diálogo de Propiedades completado.
Figura 4. Cuadro de diálogo Propiedades de la actividad GetDynamicValueProperties.
Llamar al servicio web de Northwind OData
El flujo de trabajo ahora tiene una referencia al identificador de cliente, por lo que el siguiente paso consiste en llamar al servicio web. Para ello, nos centraremos principalmente con la secuencia de Obtener datos de cliente de servicio.
Seleccione la secuencia de Obtener datos de cliente de servicio y cree dos variables nuevas:
- NorthwindServiceUri (tipo de datos = String; ámbito = Obtener datos de cliente de servicio ). Esta variable almacena el identificador URI que se usa para consultar el servicio web.
- NorthwindServiceResponse (tipo de datos = DynamicValue; ámbito = Root): esta variable va a almacenar la respuesta del servicio web.
Para crear la dirección URL para consultar el servicio web, empiece por la ubicación de una actividad asignar en el cuadro de herramientas de flujo de trabajo y arrástrelo a la secuencia de Obtener datos de cliente de servicio. Tenga en cuenta que la actividad asignar consta de dos partes que representa un par de nombre y valor.
Establecer la parte izquierda de la actividad asignar a NorthwindServiceUri.
Establezca la parte derecha de la actividad en la cadena
"http://services.odata.org/Northwind/Northwind.svc/Customers('" + CustomerId + "')?$format=json"
. La figura 5 muestra la actividad completada.Figura 5. Asignar actividad usada para establecer una variable que contiene el servicio OData
Arrastre una actividad de HttpSend desde el cuadro de herramientas a la secuencia de Obtener datos de cliente de servicio, inmediatamente después de la actividad asignar.
Establezca las propiedades en la actividad de HttpSend con los valores que se muestra en la figura 6.
Figura 6. Propiedades HttpSend
Procesar la respuesta del servicio web Northwind OData
Una vez que se ha realizado la solicitud de servicio web y los resultados se almacenan en una variable local, el paso siguiente es procesar la respuesta. Cada valor de la respuesta debe agregarse a una variable diferente.
Crear una variable para cada uno de los campos que hemos creado al principio de este tutorial (excepto el campo de identificador de cliente), que se muestra a continuación:
- Nombre del cliente
- Puesto
- Address
- País o región
- Teléfono del trabajo
- Número de fax
Nombre de cada una de estas variables según su nombre de campo respectivo.
Todas las variables deben ser del tipo String; todas las variables deben estar en el ámbito a Root.
Agregar una actividad de GetDynamicValueProperties a la secuencia de Solicitud de servicio de proceso.
En la ventana Propiedades, establezca el valor de origen a NorthwindServiceResponse, como se muestra en la figura 7.
Haga clic en el botón de puntos suspensivos ( ???) en la propiedad Propiedades y, a continuación, proporcione valores en las columnas Ruta de acceso y Asignar a , como se muestra en la figura 7. Observe que los valores de la columna Asignar a son la variable que creó para cada uno de los campos de lista Clientes .
Figura 7. Ventana de la herramienta Propiedades para GetDynamicValueProperties y contenido para el cuadro de diálogo Propiedades
Actualizar el elemento de lista del cliente
El último paso es actualizar el elemento de lista.
Agregar una actividad de UpdateListItem a la secuencia de Actualizar elemento de lista y use la ventana Propiedades para establecer los valores siguientes:
- ListID: (lista actual)
- ItemID: (elemento actual)
Haga clic en el botón de puntos suspensivos ( ???) de la propiedad ListItemPropertiesDynamicValues y, en el cuadro de diálogo resultante, establezca Tipo de entidad en Elemento de lista de clientes.
Por último, para cada uno de los valores que se extraen desde el servicio web, se puede establecer los valores en el elemento de lista a las variables en el flujo de trabajo, como se muestra en la figura 8.
Figura 8. Cuadro de diálogo ListItemPropertiesDynamicValue con valores establecidos
Probar el flujo de trabajo
El flujo de trabajo está ahora completa y debería funcionar correctamente. Para confirmar su estabilidad, se recomienda probarlas.
Presione F5 para iniciar la depuración; Visual Studio se compila y se implementa la aplicación hospedada en SharePoint.
Cuando se abre el explorador, vaya a la lista de los clientes, crear un solo registro de cliente con un Id de cliente de "ALFKI", como se muestra en la figura 9 y, a continuación, guarde el elemento.
Figura 9. Nuevo elemento de lista
A continuación, iniciar manualmente el flujo de trabajo y, a continuación, vuelva al elemento de lista. Siga actualizando la página para ver el flujo de trabajo actualizar el elemento de lista, como se muestra en la figura 10
Figura 10. Elemento de lista actualizado
Observe que el elemento de lista se ha actualizado para la aplicación de SharePoint hospedada en nombre de la persona que inició el flujo de trabajo. En este tutorial, sin embargo, se ha sido iniciada por el administrador.
Conclusión
SharePoint introdujo una nueva arquitectura de flujo de trabajo facilitada por un nuevo producto: Administrador de flujos de trabajo 1.0. Para asegurarse de que todos los flujos de trabajo personalizados funcionaron independientemente de la opción de implementación de SharePoint, ya sea local o hospedada en Office 365, todos los flujos de trabajo ahora son declarativos al 100 por ciento. Por lo tanto, ya no se admiten la lógica de negocios personalizada anteriormente se implementa como código personalizado en los flujos de trabajo creados con Visual Studio en versiones anteriores de SharePoint.
Microsoft introdujo compatibilidad para llamar a servicios web en Administrador de flujos de trabajo con la nueva actividad HttpSend. Administrador de flujos de trabajo también introdujo la compatibilidad con la creación de estructuras para enviar a los servicios web, así como consumir sus respuestas llamadas el tipo de datos de DynamicValue. Al crear flujos de trabajo, use este tipo de datos y las acciones asociadas para facilitar la creación y el aprovechamiento de procesos empresariales sólidos en flujos de trabajo de SharePoint mediante servicios web externos.