Como trabajar con el content approval en una lista personalizada en SharePoint Online mediante un flow de aprbación

En la siguiente imagen vemos un Microsoft Flow que hace uso de la funcionalidad de aprobación sobre elementos de una lista personalizada en SharePoint Online con la función de content approval activado. Para lograr que content approval funcione es necesario incluir el ETag y mediante la acción de Get Item lo podemos lograr.

Gracias las que te adornan!

Flow de aprobacion de elementos de lista con content approval activado

Como hacer ciertos grupos de seguridad los grupos por defecto de un sitio ya existente en SharePoint y SharePoint Online

Por azares del destino he tenido la necesidad de configurar permisos exclusivos en sitios y sub sitios SharePoint con el fin de tener un control más riguroso de los grupos de seguridad SharePoint. Basicamente tenmos a un grupo de dueños de sitio creando grupos de seguridad previamente a la creacion del sitio y asignando personas en el, posteriormente configurar dichos grupos dentro de un sub sitio con permisos exclusivos. Entonces, ¿Cómo hacer estos grupos de seguridad los grupos por defecto de un sitio ya existente?

Bien pues usando la página de sistema http://portal.tuintranet.com/sitios/subsitio/_layouts/permsetup.aspx puedes establecer cuáles son los grupos por defecto de tu sitio. Esto funciona para SharePoint On-Premise y Online.

Dejo esto aquí para referencia futura.

Como publicar mensajes de conversación en un canal de Teams cuando se ha creado o modificado un elemento en SharePoint Online

Bien aquí el escenario, cliente con Office 365 y hace uso excesivo de Microsoft Teams pidió un Issue Tracking en Teams con alertas por correo electrónico cuando nuevos elementos se han creado y/o cerrado.

Claro que se le ofreció crear una lista moderna en SharePoint y embeberla como Tab en el sitio de Teams en cuestión.

Lista moderna embebida como Tab en Teams

Problema es que este cliente no cuenta con el workload de correo electrónico (Exchange) activado en su suscripción, en otras palabras, el servicio de correo electrónico se gestiona on-premise y no en la nube. Entonces nos solicitó que todo correo electrónico sea enviado a través de teams.

La solución propuesta fue utilizar las cadenas de conversación de Microsoft Teams para publicar mensajes de conversación en el canal cuando el Issue es creado o cerrado en SharePoint y que mendiante menciones podamos hacerle saber a los usuarios cuando se les ha asignado o cerrado un ticket.

En este post veremos como lo logramos.

En primer lugar, utilice las siguientes plantillas de Flow para atrapar el evento cuando un nuevo elemento en SharePoint ha sido creado o modificado:

Plantillas de Flow para eventos de lista en SharePoint

En cada uno de estos flows utilicé la acción:

Accion que nos permite publicar un mensaje en una conversacion como Bot de Flow

Esto para permitirnos publicar en la conversación de un canal como un Bot de Flow (y no como un usuario individual). Adicional, hay un par de cosas interesantes que pudimos lograr:

  1. Mediante el tag <at></at> pudimos mencionar a una persona en especifico como parte del mensaje publicado en teams, con esto le llegara su debida notificación a la persona
  2. En el cuerpo del mensaje pudimos usar un tag <a></a> para tener un hipervínculo hacia el elemento de lista.
Accion configurada para publicar un mensaje en una conversacion de teams como un Bot de Flow. Incluye un enlace al elemento y una mencion a una persona

El resultado final

Cómo comenzar con SharePoint Framework, los primeros pasos

El equipo técnico de SharePoint y OneDrive están apostando su futuro en SharePoint Framework. Algunas de las mismas experiencias de administración en Office 365 y SharePoint Online están desarrolladas bajo SharePoint Framework. Las mismas herramientas y cadena de tecnologías abiertas usadas por Microsoft en la construcción de estas experiencias  son las que tenemos disponibles nosotros. Hay futuro aquí.

El próximo sábado 12 de enero a las 8:00 AM PST nuestro amigo Juan Andrés Valenzuela nos estará presentando en línea Cómo comenzar con SharePoint Framework. Los primeros pasos. Te esperamos, estas a tan solo in clic: https://global.gotomeeting.com/join/485858821

El próximo sábado 12 de enero a las 8:00 AM PST nuestro amigo Juan Andrés Valenzuela nos estará presentando en línea Cómo comenzar con SharePoint Framework. Los primeros pasos. Te esperamos, estas a tan solo in clic: https://global.gotomeeting.com/join/485858821

La confianza como un pilar para retener al cliente

La premisa básica

A lo largo de mi carrera profesional he tenido la oportunidad de estar expuesto a situaciones, escenarios y prácticas laborales que he elegido adoptar al grado de que ya son parte vital de mi práctica y ética diaria de trabajo. Yo creo que esto es algo natural y seguro que cualquier persona que lea entiende a que me refiero.

Las personas solo aprenden aquello que eligen aprender

Volviendo al tema, por mencionar tan solo un ejemplo, en el año 2006 aprendí a posicionar los servicios profesionales de la empresa en la que en aquel entonces trabajaba y con el ejemplo de mis estimados colegas aprendí a vender (estimar, planear, balancear cargas de trabajo, escribir propuestas, negociar y cerrar proyectos) sin duda esta habilidad ha sido vital para el progreso de mi carrera profesional en el mundo de la consultoría informática. No lo niego, ha habido tropiezos que también enseñan. A lo largo de los años otras prácticas de trabajo, el ejemplo de colegas y clientes sin duda han influido también, por mencionar; el ejecutar varios proyectos a la vez, capacitar personal, servir de enlace entre cliente y equipo técnico, crear ofertas de servicios, formar equipos y centros de excelencia, entre otras.

¿Quién verdaderamente es el cliente?

En recientes años para ser específico desde el 2013 para acá he sido expuesto a lo mismo mencionado anteriormente solo que en idioma inglés y bajo una cultura distinta a la de mi originen hispano abriendo con ello nuevas posibilidades a la forma de entregar servicios de valor y de alta calidad a mis clientes tomando lo mejor de lo que cada cultura aporta y con ello generando una experiencia de servicio accesible y personal que permite lograr un mejor posicionamiento y retención de la cuenta, inclusive hasta generando nuevas oportunidades aun después.

Una métrica de la excelencia en el servicio es cuando tu cliente renuncia se va a otra empresa y te vuelve a hablar estando en una nueva compañía

En este punto hago una pausa para preguntarle a usted que has leído hasta aquí ¿quién verdaderamente es tu cliente?

Todos somos personas independientemente de la posición y puesto que tengan en la empresa. Por lo tanto las personas que trabajan en la empresa son el cliente.

Volviendo al tema, hoy quiero compartir otra lección más que he aprendido en recientes años y que han ayudado a forjar una relación a largo plazo no nada más con el cliente, sino con las personas que trabajan con al cliente. La lección es la de llevar el control de la experiencia de servicio de soporte mediante un riguroso registro del trabajo realizado permitiéndote documentar los esfuerzos, dar visibilidad del trabajo realizado de manera consistente generando con ello lo más valioso de una relación, la confianza.

En otras palabras:

Acostúmbrate a llevar el registro (semi-detallado, título, descripción, fecha y tiempo) de los tiempos que dedicadas a cada actividad que realizas por cada cliente que manejas, cada lunes o cuando así se establezca envía el famoso timesheet resumiendo el trabajo realizado.

Por ejemplo, esto es lo que mando cada lunes al cliente:

Así se ve el timesheet que mando cada lunes

Toda esta información primeramente la registro en una lista personalizada en SharePoint donde básicamente capturo la información de la actividad realizada. Una breve descripción también es importante de agregar para poder explicar el trabajo cuando sea necesario.

Esta información es almacenada en SharePoint y exportada a excel, posteriormente mediante una tabla pivote puedo visualizar los tiempos por día, semana, mes, año y cliente. Así se ven años de soporte y servicio para un mismo cliente:

Cada semana tomo el correo enviado de la semana anterior y le doy un reply all, cambio el Subject por la semana actual y los valores que cambian en el cuerpo del correo electrónico. Es ya una practica que fui perfeccionando con el tiempo a partir de que fui expuesto a ella desde 2013.

Cuando reflexiono sobre la suerte que he tenido de contar con relaciones de trabajo duraderas he identificado varios pilares que sostienen esta relación. Uno de esos pilares es la transparencia y responsabilidad con los tiempos ya que generar confianza. Favor de indicar en los comentarios si consideras relevante conocer los otros pilares que he identificado a lo largo de los años.

Cuáles son las ventajas de la transparencia y responsabilidad con los tiempos:

  • Saber a qué le dedicaste tiempo en la semana, mes y año
  • Saber argumentar cuando se te cuestione sobre la utilización de tu tiempo
  • Saber identificar tareas rutinarias y reducir el tiempo que estas toma realizarlas (reutilizar solución)
  • Absoluta transparencia y visibilidad con el cliente, por ende responsabilidad de en qué se dedica el tiempo
  • Aprender a ser más disciplinado con la forma de llevar tu trabajo
  • Aprender a ser consistente con actividades rutinarias
  • Instrumentar mecanismos para corregir o monitorear algo cuando sea necesario
  • En ocasiones puedes documentar los pasos de una actividad y generar un procedimiento
  • Desarrollas una mentalidad de responsabilidad para con el cliente/proyecto/empleador

Cuáles son las desventajas de la transparencia y responsabilidad con los tiempos:

  • Se requiere de un poco de tiempo para registrar las horas cuando se terminas una actividad
  • Se requiere de un poco de tiempo para preparar y enviar timesheet
  • Es fácil perder el control de los tiempos cuando no eres consistente en su registro
  • Respondes con algo de incertidumbre cuando se te cuestiona sobre el tiempo trabajado

Resumen

La transparencia y la visibilidad con la que manejas el tiempo en la empresa es lo que permite a las personas conocer lo que estás haciendo y corregir el rumbo si es el caso. Cuando las personas conocen lo que estás haciendo e interactuan contigo también aprenden y actúan en consecuencia, cuando se actúa en conjunto para introducir eficiencias y obtener resultados en la empresa entonces se genera la confianza, una confianza que perdura más allá de los límites de una relación laboral.

Cross posting desde mi blog de LInkedIn – https://www.linkedin.com/pulse/la-confianza-un-pilar-para-retener-al-cliente-haaron-gonzalez/

Editando el campo Created By en una lista en SharePoint Server On-Premises con PowerShell

Solo a los administradores de infraestructura nos pasa quizás, que de pronto terminamos accediendo a la Intranet con una cuenta de administrador en vez de utilizar nuestra cuenta de usuario regular. Sucede que con tantos pendientes y tantas ventanas abiertas a veces perdemos de vista con que usuario estamos firmados y terminando operando nuestras aplicaciones internas o listas SharePoint usando una cuenta que no es la esperada.  Posteriormente en los reportes o en las vistas de datos donde filtramos por Created By = [Me] no vemos la información que esperábamos ver y al revisar te das cuenta que los elementos han sido creados con una identidad distintas, tu identidad de administrador. ¿Les ha pasado?

En este post les quiero compartir el código PowerShell para editar el campo Created By en SharePoint a fin de corregir y asignar el usuario correcto. Después de buscar en internet, de leer un par de foros y copiar algo de código, armarlo y probarlo el resultado fue el siguiente:

$web=get-SPWeb “http://portal.tacosdecabeza.com/sites/IT/devprojects”

$list=$web.Lists["Enhancements"]

$userLogin = "TACOLOCO\haaron.gonzalez"

$user = Get-SPUser -Web $web -Limit ALL | ? {$_.userlogin -eq $userLogin}

$userString = "{0};#{1}" -f $user.ID, $user.UserLogin.Tostring()

$item = $list.GetItemById(4505)

$item["Author"] = $userString

$item["Editor"] = $userString  

$item.UpdateOverwriteVersion()

$web.Update()

$web.dispose()

Obviamente este código necesita ser ejecutado dentro de una consola de SharePoint Management Shell en un servidor de la granja, no todos tienen ese gran lujo, para aquellos que sí, espero les sirva.

Saludos!

 

Referencias

Eliminando sitios con listas que exceden el umbral de elementos en SharePoint Online

Desde hace una semana vengo batallando con eliminar un sitio SharePoint que cuenta con cientos de listas de las cuales muchas de ellas rebasan el umbral de 5000 elementos de almacenamiento. Listas con más de 17000 o 37000 registros por mencionar tan solo un ejemplo. Estas listas fueron migradas de SharePoint On-Premises hacia SharePoint Online usando Sharegate.

Utilicé la opción de Copy Content de Sharegate, simplemente para seleccionar los elementos de una lista y borrarlos permanentemente.

Utilicé la opción de Copy Content de Sharegate, simplemente para seleccionar los elementos de una lista y borrarlos permanentemente.

Después de que el negocio aprobó eliminar estas listas y el sitio que ya no aporta valor para el departamento, primeramente me topé con el problema de que no puedes eliminar sub sitios que tienen listas que exceden el umbral de elementos.

The attempted operation is prohibited because it exceeds the list view threshold enforced by the administrator.

En otras palabras, el intento de eliminar el sitio también está rebasando el umbral ya que la operación de eliminar (un procedimiento almacenado de SQL Server llamado proc_RecycleWeb) revisa que los elementos seleccionados para eliminarse no excedan el límite del umbral. Así que ahora es necesario eliminar los elementos y listas de la papelera de reciclaje primeramente y posteriormente intentar eliminar el sitio.

Una opción es dejar que pasen 30 días para que estos sean eliminados de forma automática por el sistema. En caso de que no queramos esperar tanto y necesitemos eliminar la papelera de reciclaje de forma manual podemos usar el comandlet  Get-PnPRecycleBinItem.

Usando PowerShell instalamos los comandlet de Pattern & Practices para SharePoint Online

Install-Module SharePointPnPPowerShellOnline

Connect-PnPOnline -Url "https://denuestrositio.sharepoint.com/sites/qa"

Clear-PnPRecycleBinItem -Force

Aqui mi ejemplo:

Usando PowerShell instalamos los comandlet de Pattern & Practices para SharePoint Online

Ref: https://docs.microsoft.com/en-us/powershell/module/sharepoint-pnp/clear-pnprecyclebinitem?view=sharepoint-ps

Resumen de la sesión Manejo de permisos con Microsoft Flow en SharePoint Online

Buen día, como parte de nuestra iniciativa de aprendizaje que tenemos en a Comunidad SharePoint México el pasado 5 de diciembre del 2018 tuvimos una excelente participación en línea por parte de Rodrigo Bermnejo Portals and collaboration practice leader Digital Delivery Center de Neoris  y miembro de la Comunidad SharePoint Mexico.

En esta sesión veremos cómo administrar permisos de SharePoint usando Microsoft Flow un nuevo motor para integración y manejo de servicios en la nube. Esta sesión será presentada por Rodrigo Leaños Bermejo miembro de la Comunidad SharePoint México
  • Microsoft Flow es una herramienta de optimización de procesos dentro de Office 365.
  • Ayuda a integrar diferentes servicios en la nube disponibles en Office 365.
  • Tienen un funcionamiento similar a las otras aplicaciones en Office 365
    • Trabaja bajo el contexto del usuario que está ejecutando la herramienta
    • Maneja dos tipos de eventos
      • Disparadores (hacen que inicie el flujo)
      • Acciones (hacen que se ejecute el flujo)
    • Como se ha venido anunciando, los flujos de SharePoint Designer eventualmente quedaran deprecados
    • Microsoft Flow representa una nueva forma de integrar flujos de trabajo
    • El contexto del escenario de ejemplo es:
      • Microsoft Dynamics es una suscripción Office 365 al momento de integrarlo con SharePoint crea bibliotecas de documentos y los documentos los empieza a clasificar de acuerdo a la entidad de Dynamics
      • Cada que cambia el proceso de venta nueva entidad se genera y con nueva entidad nueva biblioteca de documentos, entonces se busca que las bibliotecas de documentos cuenten con la misma configuración de permisos. En otras palabras, persistir los permisos entre entidades.
      • Se requiere darles privacidad a los documentos albergados en SharePoint y asociados a una oportunidad de venta en Dynamics.

A continuación, Rodrigo explicó el Flow en general:

  • Utilizo la actividad Manually Trigger a Flow para permitir la creación de un botón dentro de una biblioteca a fin de disparar la ejecución del flujo
  • Utilizo la actividad Send an HTTP request to SharePoint y nos explica que para realizar operaciones en SharePoint estas se hacen utilizando una HTTP request y el API REST de SharePoint para en este caso manipular bibliotecas. En este ejemplo vemos que se rompe la herencia de permisos para el documento con ID = 1 en la biblioteca Documents mediante un request de tipo POST.

  • Posteriormente utilizo otro Send an HTTP Request to SharePoint de tipo POST para asignarle permisos a un usuario en particular

  • Y para finalizar utilizó otro Send an HTTP Request to SharePoint de tipo POST para asignarle un rol al usuario en particular. PrincipalID es el ID del usuario y RoleDefID =1073741826 es el tipo de permiso como “Read”,”Edit” o “Full Control” y la tabla a la que se refiere es:
Permissions level  Role ID
Full Control 1073741829
Contribute 1073741827
Read 1073741826

  • Ya después vimos cómo se pudo probar el funcionamiento del flujo. Revisamos los permisos del documento previo a ejecutar el Flow. Flow nos deja hacer una prueba del flujo y nos dice paso a paso el desencadenamiento de cada función.

Así mismo exploramos la integración de Flow con Dynamics. Rodrigo explico las acciones disponibles. Parte del tiempo de la sesión se dedico a preguntas y respuestas por parte de los asistentes en donde entre todos buscábamos resolver y aportar valor ante cualquier cuestionamiento.

Muy recomendable ver la grabación:

 

Resumen de la sesión Desarrollo básico de aplicaciones PowerApps con listas SharePoint Online

Buen día, como parte de nuestra iniciativa de aprendizaje que tenemos en a Comunidad SharePoint México hoy tuvimos una excelente participación en línea por parte de Oscar Soto Casali de la empresa chilena ActiveTrainer.

DESARROLLO BÁSICO DE APLICACIONES POWERAPPS CON LISTAS SHAREPOINT ONLINE

Él nos demostró la implementación una solución empresarial para la gestión de incidentes utilizada por parte de los empleados de un municipio de su localidad utilizando las tecnologías de la oficina moderna que Office 365 como SharePoint, Microsoft Teams, PowerApps.

Vimos lo siguiente:

  • Un enfoque de solución moderno para la gestión de incidentes
  • El uso de PowerApps como gestor de formulario para la asignación de incidentes
  • El uso de PowerApps como un tablero de control para un efectivo seguimiento de incidentes

  • Una explicación detallada de propiedades, formulas y expresiones PowerApps para construir experiencias de tipo maestro detalle, así como también consumir listas de SharePoint como fuente de datos

  • Se platico también de las razones por las cuales PowerApps representa un enfoque de solución para la construcción de aplicaciones modernas y conectadas que fomentan la productividad de los usuarios

Sin más, aquí la presentación:

Resumen de participación en eventos Office 365 Developer Bootcamp durante el año 2018

Durante los meses de octubre a noviembre Microsoft Corporation impulsó la iniciativa el 2018 Global Office 365 Developer Bootcamp llevándose a cabo en 41 países con más de 3200 asistentes de diferentes roles como programadores, arquitectos, consultores, administradores de TI, directores de Informática y estudiantes. En total fueron 74 eventos de los cuales con el apoyo de Charmaine and Suzanna de Microsoft Corp tuve la oportunidad de organizar/participar en 4 diferentes localidades dentro y fuera del país y en múltiples idiomas.

San Diego, Baja California, Ciudad de Mexico, Mexicali

En cada uno de estos eventos estuve platicando sobre lo que significa pasar de ser un desarrollador SharePoint que construye soluciones para una granja on-premise a un programador que utiliza tecnologías web abiertas y herramientas de código abierto para producir aplicaciones hospedadas sobre la nube bajo Office 365. Me aseguré de mostrar guía paso a paso que permitiera a un programador SharePoint:

  • Conocer las distintas herramientas de trabajo
  • Conocer la estructura de un proyecto SharePoint Framework
  • Conocer los prerrequisitos de configuración en Office 365
  • Conocer como empaquetar y desplegar un webpart de SharePoint Framework

Hoy Office 365 se ha convertido en la oficina moderna de miles de empresas en el mundo y de millones de empleados que día a día utilizan sus servicios para realizar su trabajo desde cualquier lugar y desde cualquier dispositivo. Como desarrollador, puede extender las múltiples herramientas y tecnologías de la plataforma Office 365 para introducir eficiencias modernas y mejorar la productividad de las personas significativamente.

Gracias a los asistentes que nos favorecieron con su atención y seguimos muy al pendiente de cualquier inquietud que puedan tener.

Aquí un resumen:

SharePoint Framework, por dónde empezar

Para los que hemos tenido la oportunidad de programar soluciones SharePoint desde hace años sabemos que en cuanto a desarrollo se refiere la evolución que Microsoft ha tenido hacia la nube nos ha llevado a replantear nuestros paradigmas como profesionales. Aunque seguimos teniendo entornos locales de servidores SharePoint instalados en casa, hoy Office 365 se ha venido posicionando cada vez más como la principal opción para montar una Intranet funcional en tiempo récord y con una ola de funcionalidades satélite que simplemente aportan significativo valor agregado sin mencionar que sería una inversión enorme para cualquier empresa implementar de manera integrada cada tecnología por su cuenta. Costo total de propiedad, costo de mantenimiento, costo de licenciamiento, alta disponibilidad, servicios y administración unificada crean a Office 365 como la opción más viable y rentable para pequeñas y medianas empresas hoy en día. También hay empresas en su mayoría corporativos grandes que por razones de cumplimiento regulatorio forzosamente necesitan contar con entornos de servidores SharePoint funcionando y administrados en casa para albergar sus implementaciones SharePoint y garantizar que sus datos se encuentran en la región, sin embargo, cada vez son menos y Office 365 se abre camino certificándose para cumplir cada vez más con regulaciones y certificaciones de la industria.

Como un profesional de SharePoint con experiencia de trabajar con este producto desde su versión 2003 hasta hoy en día, comprendo perfectamente lo que significa para nosotros actualizarnos y reinventarnos para seguir manteniéndonos vigentes rumbo a la misma dirección a donde se dirige la industria.

Son los clientes que a su vez preocupados por adaptarse al entorno económico, mediático, político y social donde sus productos y servicios se encuentran compitiendo buscan introducir innovaciones y eficiencias internas que los lleven ganar la preferencia de sus clientes, desde esa realidad viene la necesidad de nosotros reinventarnos

Mi objetivo es motivarte a ti profesional de informática (estimado desarrollador SharePoint) que busca encontrar tu lugar en el mundo de la colaboración y la comunicación mediante portales de intranet basados en SharePoint Online y Office 365, hoy te quiero compartir unas lecciones que he tenido la oportunidad de documentar en video referente al desarrollo SharePoint Framework.

Sigue la secuencia de videos y espero que encuentres útil el contenido que a continuación se menciona, no olvides dejar tus comentarios y dudas en el mismo video para enriquecernos todos.

Como crear una suscripción (en idioma ingles) para desarrollo Office 365 – https://www.youtube.com/watch?v=C9eEp1B6A5o 

Como parte del Office 365 Developer Program de Microsoft le permite a un programador solicitar un Tenant o instancia de Office 365 para pruebas y desarrollo durante todo 1 año y sin costo. En este video vemos los pasos para hacer uso de este programa y habilitar una suscripción anual de Office 365

Como configurar tu equipo local para desarrollo Office 365 SharePoint Online – https://www.youtube.com/watch?v=0V7HoDVtn30 

Microsoft decidió utilizar un enfoque de desarrollo basado en tecnologías Open Source para personalizar Office 365 SharePoint Online. En este video mostramos como instalar las tecnologías necesarias para compilar y depurar proyectos de código usando como base tecnologías Open Source.

SharePoint Framework paso a paso, web part multi-lenguaje para nuestra Intranet – https://www.youtube.com/watch?v=StcrK643YXg 

Este video dura más de 45 minutos, pero eso es lo que se requiere para lograr comprender paso a paso que se necesita hacer para crear un webpart de SharePoint Framework que funcione en dos idiomas. En este video veremos una implementación de un sencillo webpart que da la bienvenida al usuario al día y número de la semana actual del año, recuerden existen 52 semanas en el año, este webpart te dice en que semana del año estamos. Utilizaremos un framework de JavaScript llamado Moment.js dedicado a la manipulación y trabajo de fechas con JavaScript. Sobre todo, veremos que partes de nuestro código debemos cambiar para soportar multi-lenguaje y que partes de código configurar para realizar prueb as.

Enlaces de Interés:

Comandos

  • npm install –global –production windows-build-tools
  • npm i -g yo gulp
  • npm install @microsoft/generator-sharepoint@latest -g
  • npm install @microsoft/generator-sharepoint
  • yo @microsoft/sharepoint
  • npm install moment –save
  • gulp bundle –ship
  • gulp package-solution –ship