Artículo original publicado el miércoles, 5 de septiembre de 2012.

imagen

Hola, me llamo HyongGuk Kim y soy Administrador de programas senior del equipo de SharePoint Designer.

En este blog voy a hablar de cómo podemos escribir con gran facilidad un flujo de trabajo de SharePoint 2013 que use un servicio web HTTP público o comercial (REST), y de cómo podemos ejecutarlo simplemente como un servicio que envía mensajes de correo a diario a través de bucles.

Como puede ver en el clip de vídeo siguiente, crearemos un flujo de trabajo de sitio denominado "Negocios diarios de eBay" que leerá la información diaria sobre los negocios de eBayTM, creará elementos de negocio en una lista de vínculos promocionados de SharePoint y enviará mensajes de correo a las personas que deseen recibir esta información.

Trabajar con un servicio web mediante la acción Llamar al servicio web HTTP

 

El flujo de trabajo "Negocios diarios de eBay" es un flujo de trabajo de sitio, por lo que el primer paso es crear un nuevo flujo de trabajo de sitio de SharePoint 2013. A continuación, simplemente debe agregar tres fases, asignarles un nombre adecuado y vincularlas con las acciones de Ir a.

 

 

Fase 1

Asigne a la fase 1 el nombre de “Obtener negocios diarios de eBay”, y agregue cuatro acciones y un bloque de bucle, tal como se muestra en la ilustración 1.

imagen002

Ilustración 1. Fase 1 del flujo de trabajo

 

La primera acción que hemos agregado es Llamar al servicio web HTTP. El URI HTTP se establece en http://www.firstamong.com/json/index.php?q=http://deals.ebay.com/feeds/xml y el método HTTP en “GET”. Aunque lo más adecuado habría sido usar solo un servicio web REST de eBay que devolviera JSON, debido a un encabezado problemático en los resultados del servicio web REST de eBay, hemos usado un servicio web de transformador adicional (tenga en cuenta que existen algunos servicios de transformador disponibles. En este caso hemos usado un servicio de www.firstamong.com), que llama a otro servicio REST de eBay que, a su vez, nos devuelve XML y objetos JSON limpios.

En la instrucción de acción "Llamar al servicio web HTTP" no necesitamos establecer los parámetros RequestContent ni RequestHeaders, ya que solo nos interesa la salida del servicio web. Si establecemos el parámetro response en un valor ResponseContent variable, la salida de la llamada de este servicio web se almacenará en este valor, que es una variable de tipo diccionario.

 

La salida JSON del servicio web de transformador que llama al servicio web XML de eBay tiene este aspecto:

 

{"EbayDailyDeals":

  {"Item":[

{"ItemId":"221065015062","EndTime":"1341845999000","PictureURL":"http:\/\/i.ebayimg.com\/00\/s\/NDI4WDUxMA==\/$(KGrHqJHJBwE8+9eOVMzBPZ1lhNt!g~~60_1.JPG","SmallPictureURL":"http:\/\/i.ebayimg.com\/00\/s\/NDI4WDUxMA==\/$(KGrHqJHJBwE8+9eOVMzBPZ1lhNt!g~~60_1.JPG","Picture175Url":"http:\/\/i.ebayimg.com\/00\/s\/NDI4WDUxMA==\/$(KGrHqJHJBwE8+9eOVMzBPZ1lhNt!g~~60_1.JPG","Title":"Acer ICONIA 7in Tablet 8GB WiFi","Description":"N\/A","DealURL":"http:\/\/deals.ebay.com\/5000101083_Acer_ICONIA_7in _Tablet_8GB_WiFi","ConvertedCurrentPrice":"139.99","PrimaryCategoryName":"Computers\/Tablets & Networking:iPads, Tablets & eBook Readers","PrimaryCategoryId":"171485","Location":"Miami, Florida","Quantity":"128","QuantitySold":"372","MSRP":"299.99","SavingsRate":"53%","AutoPay":"true","Hot":"false","Tier":"0","PriceDisplay":"MSRP"},

{"ItemId":"271012700385","EndTime":"1341845999000","PictureURL":"http:\/\/i.ebayimg.com\/00\/s\/MzYwWDM2MA==\/$(KGrHqR,!ioE-w!y!T--BPto5nEk0!~~60_1.JPG","SmallPictureURL":"http:\/\/i.ebayimg.com\/00\/s\/MzYwWDM2MA==\/$(KGrHqR,!ioE-w!y!T--BPto5nEk0!~~60_1.JPG","Picture175Url":"http:\/\/i.ebayimg.com\/00\/s\/MzYwWDM2MA==\/$(KGrHqR,!ioE-w!y!T--BPto5nEk0!~~60_1.JPG","Title":"Sylvania Wireless CE 7-Inch Smartbook - SYNET7WIC","Description":"N\/A","DealURL":"http:\/\/deals.ebay.com\/5000101099_Sylvania_Wireless_CE_7_Inch_Smartbook___SYNET7WIC","ConvertedCurrentPrice":"49.99","PrimaryCategoryName":"Computers\/Tablets & Networking:Laptops & Netbooks:PC Laptops & Netbooks","PrimaryCategoryId":"177","Location":"US","Quantity":"1307","QuantitySold":"693","MSRP":"199.99","SavingsRate":"75%","AutoPay":"true","Hot":"false","Tier":"0","PriceDisplay":"MSRP"},

{"ItemId":"160823596564","EndTime":"1341845999000","PictureURL":"http:\/\/i.ebayimg.com\/00\/s\/NjAwWDM1MQ==\/$(KGrHqFHJFQE+T-

...

"MoreDeals":

   {"MoreDealsSection":[

    {"SectionTitle":"Emergency Preparedness","Item":[

{"ItemId":"200687021159","EndTime":"1341845999000","PictureURL":"http:\/\/i.ebayimg.com\/00\/s\/NDI5WDUwMA==\/$(KGrHqV,!p0E-vF(Fmt0BP7iH6)M6g~~60_1.JPG","SmallPictureURL":"http:\/\/thumbs4.ebaystatic.com\/pict\/200687021159_1.jpg","Picture175Url":"http:\/\/thumbs4.ebaystatic.com\/pict\/200687021159_1.jpg","Title":"DuroMax 1500 Watt Portable Pull Start Gas Power Job Site Electric Generator","Description":"NA","DealURL":"http:\/\/deals.ebay.com\/5000099668_DuroMax_1500_Watt_Portable_Pull_Start_Gas_Power_Job_Site_Electric_Generator","ConvertedCurrentPrice":"179.99","PrimaryCategoryName":"Home & Garden:Tools:Generators: Home-Use","PrimaryCategoryId":"46412","Location":"La Verne","Quantity":"302","QuantitySold":"228","MSRP":"299.99","SavingsRate":"40%","AutoPay":"true","Hot":"false","Tier":"0","PriceDisplay":"MSRP"},

{"ItemId":"370622857968","EndTime":"1341845999000","PictureURL":"http:\/\/i.ebayimg.com\/00\/s\/MTAwMFgxMDAw\/$T2eC16h,!)0E9s37IeSMBP7IWFtFqw~~60_12.JPG","SmallPictureURL":"http:\/\/thumbs1.ebaystatic.com\/pict\/370622857968_1.jpg","Picture175Url":"http:\/\/thumbs1.ebaystatic.com\/pict\/370622857968_1.jpg","Title":"Dorcy High Beam LED Aluminum Flashlight 100 Lumens Water Resistant 41-4287","Description":"NA","DealURL":"http:\/\/deals.ebay.com\/5000099680_Dorcy_High_Beam_LED_Aluminum_Flashlight_100_Lumens_Water_Resistant_41_4287","ConvertedCurrentPrice":"11.99","PrimaryCategoryName":"Sporting Goods:Outdoor Sports:Camping & Hiking:Flashlights, Lanterns & Lights:Flashlights","PrimaryCategoryId":"16037","Location":"Altatac USA","Quantity":"1899","QuantitySold":"1113","MSRP":"49.99","SavingsRate":"76%","AutoPay":"false","Hot":"false","Tier":"0","PriceDisplay":"MSRP"},

{"ItemId":"300725740900","EndTime":"1341845999000","PictureURL":"http:\/\/i.ebayimg.com\/00\/s\/NTAwWDUwMA==\/

...

Asimismo, para controlar los distintos elementos internos también podríamos usar una variable DealItems, lo que permitiría insertar una instrucción de acción como “Get ([%Variable: Index%])/Title de Variable: DealItems” para obtener la propiedad Title del elemento. En cualquier caso, para no complicar el ejemplo y mostrar una estructura clara de los elementos de negocio que contiene la salida del servicio web, incluiré la ruta de acceso completa a las propiedades del elemento, de modo que una instrucción como “Get EbayDailyDeals/Item([%Variable: Index%])/Title de Variable: ResponseContent“ (y no de Variable: DealItems) recuperará la propiedad Title de un elemento. Para más información sobre cómo usar un tipo de diccionario, vea los vínculos que se incluyen en la parte inferior de este blog.

 

La ilustración 2 muestra cómo se recuperan las distintas propiedades de cada elemento interno.

imagen003

Ilustración 2. Recuperar las propiedades de los elementos de negocio y crear elementos de vínculo promocionado

 

La acción Obtener elemento de Diccionario almacena las distintas propiedades de cada elemento de negocio en una variable de flujo de trabajo para usarlas posteriormente al crear un elemento de lista en la última parte de un bloque de bucle. Aunque, como puede ver, usamos varios tipos de variable, la mayoría que de las variables implicadas en este proceso de "recuperación" son de tipo String.

Para más información sobre cómo usar un tipo de diccionario, vea los vínculos que se incluyen al final de este blog.

imagen004

Ilustración 3. Variables locales

 

También usamos la acción Reemplazar cadena como solución alternativa a la limitación de SharePoint, que no permite usar los caracteres "," o "!" con datos de tipo URL.

 

Al final del bloque de bucle aparecen dos bloques de pasos, donde crearemos el contenido del mensaje de correo e incrementaremos en uno la variable de índice. Los dos escenarios principales de este flujo de trabajo sirven para crear elementos de lista con los resultados del servicio web de eBay y, a continuación, enviar mensajes de correo a las personas que desean recibir la información de "Negocios diarios de eBay". De hecho, estamos creando un fragmento HTML en el bloque de bucle, tal como se muestra en la ilustración 4.

imagen005

Ilustración 4. Dos pasos en el bloque de bucle

 

Como puede ver en la ilustración 5, a la hora de crear el fragmento HTML se usan de nuevo todas las variables de flujo de trabajo que usamos para crear los elementos de lista.

imagen006

Ilustración 5. Crear un fragmento HTML para el cuerpo del mensaje de correo

 

 

Fase 2

La lógica del flujo de trabajo de la fase 2 es idéntica a la de la fase 1, excepto por una instrucción que llama al servicio web en la fase 1 (aparece señalada en la ilustración 6). Crear la fase 2 es muy sencillo, basta con copiar y pegar en ella el contenido de la fase 1.

La fase 2 leerá otra sección de la salida del servicio web de Negocios diarios de eBay, por lo que, a la hora de intentar recuperar la matriz Item de la extensa salida JSON anterior, podemos usar la misma lógica, aunque con una ruta de acceso distinta.

imagen007

Ilustración 6. Fase 2 del flujo de trabajo

 

Y esto significa que debemos usar una ruta de acceso distinta para obtener acceso a los elementos de “MoreDealsSection”, tal como se muestra en la ilustración 7.

imagen008

Ilustración 7. Obtener más elementos de negocio en MoreDealsSection

 

Todo lo demás es exactamente igual.

 

 

Fase 3

En las fases 1 y 2, creamos elementos de lista e integramos los fragmentos HTML con el objetivo de usarlos posteriormente para enviar mensajes de correo. En la fase 3 es donde se envían estos mensajes y, de hecho, solo contiene una acción, Enviar correo electrónico, tal como se muestra en la ilustración 8. “Subscribers” es el grupo de SharePoint donde se agregan como miembros todos los miembros del sitio que desean recibir estos mensajes.

imagen009

Ilustración 8. Fase 3 del flujo de trabajo

 

Desde el cuadro de diálogo de cuadrícula de propiedades de la acción Enviar correo electrónico puede redactar el cuerpo completo del mensaje de correo en HTML, tal como se muestra a continuación. En nuestro caso ya tenemos un fragmento de código de tabla HTML complejo en la variable EmailContent, por lo que solo debemos complementar la búsqueda de variables con algunas etiquetas contenedoras, tal como se muestra en la ilustración 9.

imagen010

Ilustración 9. Crear un cuerpo de mensaje de correo completo

 

Y listo. No necesita nada más para comenzar a publicar e iniciar este flujo de trabajo.

Solo tiene que asegurarse de disponer de la lista "Negocios diarios de eBay" en el sitio y de que sea del tipo "Vínculos promocionados", un nuevo tipo de lista genial de SharePoint 2013. Para encontrar rápidamente esta aplicación de lista, en el vínculo Configuración situado en la esquina superior derecha de la página raíz del sitio, haga clic en Agregar una aplicación.

imagen011

 

 

Iniciar el flujo de trabajo

Cuando inicie este flujo de trabajo, verá cómo crea los elementos de negocio en la lista "Negocios diarios de eBay" y cómo envía los mensajes de correo.

imagen012

Ilustración 10. Lista de vínculos promocionados Negocios diarios de eBay

 

imagen013

Ilustración 11. Mensaje de correo enviado desde el flujo de trabajo

 

 

¿Repetimos?

Ya vimos cómo crear un buen flujo de trabajo de sitio para enviar mensajes de correo con la información de Negocios diarios de eBay. Pero, ¿y si queremos recibir este mensaje todos los días? ¿Podríamos ejecutar de forma continua este flujo de trabajo cada 24 horas?

Pues sí. Tal como se muestra en esta ilustración, si se agrega una acción Detener durante y se cambia el destino de la instrucción Ir a en la fase 3 para apuntar a la fase 1, este flujo de trabajo funcionará como un servicio que recupera elementos de Negocios diarios de eBay y envía estos negocios a diario como mensajes de correo.

¿A que suena divertido?

imagen014

Ilustración 12. Repetir desde el principio

 

 

Referencias

En estas referencias encontrará más información sobre las acciones de flujo de trabajo y el tipo de diccionario que controlan los servicios web HTTP y las variables de diccionario.

 

Contenido de la Ayuda de SharePoint Designer 2013

Esta entrada de blog es una traducción. Para consultar el artículo original, vea How to work with web service using “Call HTTP Web Service” action.