sábado, 23 de enero de 2016

Eliminar una palabra de un texto en SharePoint

Esta entrada es una continuación de la anterior. En la anterior entrada vimos como era posible completar un campo de tipo hipervínculo. Todo ello, vino de una lista llamada Miembros que servía para guardar todos nuestros contactos de diferentes grupos y una lista llamada Grupos, que nos servia para nombrar los diferentes grupos y para tener un "botón" que al hacer clic en el, nos permitiera mandar un correo a todos los miembros de ese Grupo.

Obviamente la siguiente parte que tuvimos que implementar era el mecanismo de dar de baja miembros de dicho grupo. El eliminar elementos de la lista de Miembros, es básico, es eliminar un elemento de la lista. Pero eso no nos eliminaría el correo asociado de la lista Grupos donde esta el "botón".

Así que lo que hicimos fue crear una columna de tipo elección en la lista Miembros, que llamamos Eliminar miembro, cuyo valor por defecto es No. Pero que cuando el usuario quiera eliminar un contacto, simplemente tenga que cambiar a . También cree una columna oculta de tipo texto llamada Todos, donde guardaría los valores de todos los email que había bajo el "botón" Enviar Email. Adicionalmente cree 4 campos calculados sobre la lista  Miembros: SinCorreoI, SinCorreoD, SinCorreoPre y SinCorreo.

Estos campos calculados nos servirán para almacenar los correos que hay a la izquierda del correo que queremos eliminar y sin el "mailto:", la parte derecha que hay tras el correo a eliminar, concatenar ambas partes y finalmente comprobar si es vacío o si quedan correos tras eliminar el correo a borrar.

Para ellos utilizamos también un flujo de trabajo sobre la lista Miembros que se lanza cuando se modifica un elemento y que tiene la siguiente forma:


Ejecutaremos sólo el borrado, si seleccionan Eliminar miembro a .

Lo siguiente que hacemos es guardar en la variable del flujo EmailTodos de tipo cadena, los emails que hay en el "botón".


Lo siguiente que hacemos es rellenar la columna oculta Todos de tipo una línea de texto, de nuestra lista Miembros con el valor de la variable EmailTodos, que contendrá todos los emails:


Tras ello, entra en funcionamiento las columnas calculadas que hemos citado antes:

  • SinCorreoI: =RIGHT(LEFT(Todos;(FIND(Email;Todos)-1));LEN(LEFT(Todos;(FIND(Email;Todos)-1)))-7)
  • SinCorreoD: =RIGHT(Todos;(LEN(Todos)-((FIND(Email;Todos)+LEN(Email)))))
  • SinCorreoPre: =SincorreoI&SinCorreoD
  • SinCorreo: =IF(SinCorreoPre="";"@";SinCorreoPre)
Lo siguiente que hacemos es esperar a que se ejecute y se rellenen los campos calculados. Personalmente tuve que poner una espera hasta que en el campo hubiera una arroba, ya que la acción esperar 1 minuto, no terminaba nunca por un problema de configuración de nuestro SharePoint que debemos revisar. Sino hubiera sido más óptimo poner una espera de 1 minutos y la última columna calculada hubiera sido:

  • SinCorreo: =IF(SinCorreoPre="";"";SinCorreoPre)
No obstante el resto del flujo lo separe en un paso más para asegurarme de que estaban todos los valores asignados.

En el paso 2, lo único que hacemos es establecer la variable del flujo EmailTodosSin de tipo cadena con el valor de la columna SinCorreo.

Lo último que hacemos es volver a rellenar el "botón" tal y como vimos en la anterior entrada, con el valor de la variable, que puede contener correo o no. Y en ambos casos, lo último que hacemos el borrar el elemento de la lista Miembros que queríamos borrar.

RESUMEN:

En las acciones de flujos de SharePoint no existe una función que nos haga eliminar una palabra de un cadena de texto. Sólo existe en 2013 la opción de quedarnos con una parte a partir de una posición determinada. Entonces para ello, utilizaremos columnas calculadas.