none
Generar un correo diaario desde Sharepoint RRS feed

  • Pregunta

  • Como puedo hacer para enviar un correo diario a un usuario desde SharePoint teniendo en cuenta que antes de parar el correo se debe cumplir una condicion en el flujo de trabajo y esta condicion depende de un campo de estado. por alertas no da porque la alerta no funcion a sobre los campos y la unica opcion es realizar un flujo de trabajo. Agradeceria mucho la colaboracion con este asunto o al menos alguna idea de que puedo hacer para resolver este asunto.

    jueves, 16 de agosto de 2012 14:25

Respuestas

  • Tienes dos opciones o bien en añades que que cuando termine el flujo de trabajo te envie el correo, que para mi es la mejor opción, aunque desconozco cual es la tarea que hace este flujo o las veces que se realiza al cabo del dia, etc.. En el flujo de trabajo es muy sencillo añadir que te envie un mail, es añadir una opción mas a este flujo de trabajo y listo.

    Si esta opción no te es valida se me ocurre es realizar un JOB en sharepoint que te compruebe las condiciones que comentas y en caso afirmativo envie un correo.

    Para implementar un Job en Sharepoint este link del maestro Andrew Cornell esta perfectamente explicado

    Creating Sharepoint Timer Job

    De todas formas caulquier dudas ya comentas.


    Saludos

    
    jueves, 16 de agosto de 2012 15:22
  • Ah!! pues entonces esta claro que la opción que tienes que hacer es la opción dos:  la de crearte un Timer Job dentro de Sharepoint. En el documento que explica el maestro Andrew esta muy bien explicado la unica modificación que tienes que hacer es en lugar del trozo de codigo donde pone actualizar un registro tu necesitarias enviar un mail que lo puedes hacer con el siguiente codigo:

                            StringDictionary headers = headers = new StringDictionary();
                            string cabecera = "";
                            string footer = "";
                            string body = "";
                            Guid idSitio = SPContext.Current.Site.ID;
                            string bodyText = "";
                            bool res = false;
                            
                               
                                headers.Add("to", strDireccionDestino);
                                headers.Add("from", "no_reply@adri.es");
                                headers.Add("content-type", "text/html");
                                headers.Add("subject", "TEMAA DEL MENSAJE ");
                                
    
                                body += "<div>Cuerpo del mensaje</div>";
    
                            
                               mySite = new SPSite(idSitio);
                               myWeb = mySite.OpenWeb(SPContext.Current.Web.ID);
    
    
                               bodyText = cabecera + body + footer;
                               res = false;
    
                               res = SPUtility.SendEmail(myWeb, headers, bodyText);
                           
                                log.Debug("Correo enviado:" + res.ToString());
    
    
                                if (res)
                                {
                                    Mensaje(texto_correcto);
    
                                }
                                else
                                {
                                    Mensaje(texto_incorrecto);
                                }

    Ahora lo que debes de poner antes de enviar el mensaje es que se cumpla la condición que indiques, que con una simple CAML lo puedes hacer.

    Si tienes cualquier duda ya la comentas.

    
    
    viernes, 17 de agosto de 2012 8:19

Todas las respuestas

  • Tienes dos opciones o bien en añades que que cuando termine el flujo de trabajo te envie el correo, que para mi es la mejor opción, aunque desconozco cual es la tarea que hace este flujo o las veces que se realiza al cabo del dia, etc.. En el flujo de trabajo es muy sencillo añadir que te envie un mail, es añadir una opción mas a este flujo de trabajo y listo.

    Si esta opción no te es valida se me ocurre es realizar un JOB en sharepoint que te compruebe las condiciones que comentas y en caso afirmativo envie un correo.

    Para implementar un Job en Sharepoint este link del maestro Andrew Cornell esta perfectamente explicado

    Creating Sharepoint Timer Job

    De todas formas caulquier dudas ya comentas.


    Saludos

    
    jueves, 16 de agosto de 2012 15:22
  • Muchas gracias Adrian por la respuesta, se que puedo en el sharepoint generar un flujo para que me envie un correo pero lo que necesito es que el flujo haga las veces de alerta. Me explico en Sharepoint puedo crear alertas las cuales se pueden enviar diariamente, Semanalmente o mensualmente segun lo establezca el criterio, pero la alerta no trabaja directamente sobre el elemento mientras qeu el flujo si se enfoca en el elemento, entonces lo que yo quiero es que si el campo Estado es igual a pendiente, envie un correo electronico diario que le recuerde al usuario que la tarea esta pendiente, es mas que todo por eso y las alertas vuelvo y repito no trabajan directamente sobre el elemento o en este caso sobre el estado del Elemento. Agradezco si me puedes colaborar con este tema.

    jueves, 16 de agosto de 2012 18:54
  • Ah!! pues entonces esta claro que la opción que tienes que hacer es la opción dos:  la de crearte un Timer Job dentro de Sharepoint. En el documento que explica el maestro Andrew esta muy bien explicado la unica modificación que tienes que hacer es en lugar del trozo de codigo donde pone actualizar un registro tu necesitarias enviar un mail que lo puedes hacer con el siguiente codigo:

                            StringDictionary headers = headers = new StringDictionary();
                            string cabecera = "";
                            string footer = "";
                            string body = "";
                            Guid idSitio = SPContext.Current.Site.ID;
                            string bodyText = "";
                            bool res = false;
                            
                               
                                headers.Add("to", strDireccionDestino);
                                headers.Add("from", "no_reply@adri.es");
                                headers.Add("content-type", "text/html");
                                headers.Add("subject", "TEMAA DEL MENSAJE ");
                                
    
                                body += "<div>Cuerpo del mensaje</div>";
    
                            
                               mySite = new SPSite(idSitio);
                               myWeb = mySite.OpenWeb(SPContext.Current.Web.ID);
    
    
                               bodyText = cabecera + body + footer;
                               res = false;
    
                               res = SPUtility.SendEmail(myWeb, headers, bodyText);
                           
                                log.Debug("Correo enviado:" + res.ToString());
    
    
                                if (res)
                                {
                                    Mensaje(texto_correcto);
    
                                }
                                else
                                {
                                    Mensaje(texto_incorrecto);
                                }

    Ahora lo que debes de poner antes de enviar el mensaje es que se cumpla la condición que indiques, que con una simple CAML lo puedes hacer.

    Si tienes cualquier duda ya la comentas.

    
    
    viernes, 17 de agosto de 2012 8:19
  • te pregunto he tratado de manipular los campos de sahrepoint por medio de su Id pero he fallado en el intento, cuando voy a validar por medio de un javascript o cuando voy a asignarle alguna propiedad especial a algun campo no reconoce el id, por ejemplo yo utilizo

    var prueba=document.getElementById("ff2") por decir algo pero cuando intento hacer algo tan sencillo como modificar el estilo del objeto no realiza ninguna operacion no hace nada el codigo si me puedes decir como puedo hacer para utilizar el id de un objeto dentro de sharepoint?

    lo que necesito con esto es validar si digamos una caja de texto esta vacia entonces que muestre un error, me podrias colaborar con este tema tambien, apenas estoy empezando con el desarrollo en sharepoint y en C# el dominio atravez del id es mas sencillo

    jueves, 23 de agosto de 2012 15:23
  • ¿Pero en que parte estas realizando la validación?

    Me explico estas desarrollando un formulario propio o estas utilizando el formulario que hace por defecto Sharepoint.

    Dependiendo de una cosa u otra hay bastantes alternativas y no creo que sea una buena opción utilizar el JavaScript,  si estas editando un formulario propio de los de Sharepoint, puedes poner la validación en la definición del campo dentro de la lista. Cuando das de alta un campo te sale una sitio que pone validación y hay introduces la condición que quieres poner.

    Si por el contrario lo que estas desarrollando es un codigo en .Net atraves de C#, el ID no te lo obtiene porque en el tiempo de diseño no lo tienes, ya que tu estas poniendo ID de ASP y cuando lo despliegas en la solucion ese ID ha cambiado, aqui te pongo un ejemplo de como obtener el ID de un componente de ASP para que lo puedas utilizar en tu desarrollo.

     $(function () {
    	        $('#<%=ddlEmpleado.ClientID  %>').combobox();
    	        $("#toggle").click(function () {
    	            $("#combobox").toggle();
    	        });
    	    });


    Si es cualquier otra cosa ya lo comentas. Un saludo

    jueves, 23 de agosto de 2012 15:35
  • Estoy modificando un formulario propio de sharepoint lo edito en sharepoint designer

    <script type="text/javascript">

    function prueba()

    var dc=document.getElementById("ff11{$pos}");

    dc.style.background=red;

    </script>

    donde ff11{$pos} es el id por defecto que me arroja el sharepoint, entonces esto en una pagina html con otro id generado manualmente funciona e incluso generando un objeto de prueba un txt, un btn, etc dentro de sharepoint funciona lo que no me da es el ID del campo

    <sharepoint:formfield runat="server" id="ff11{$pos}" y el resto> y necesito esto para validar informacion de un formulario ya que no es sino preguntar por los campos cuando se utiliza la funcion _spOnBodyFunctionLoad()si me puedes ayudar con el id que arroja el sharepoint gracias.

    jueves, 23 de agosto de 2012 16:28
  • Hola Juan,

    En primer lugar no tienes que buscar por ese ff1{$pos} ese codigo es en ASP.Net y cuando genera el codigo html que es en el momento de ejecución y para que lo interprete el navegador cambia a y te pondra un churro parecido al siguiente "ctl00_m_g_f76b9b6f_28ca_4b51_b04e_8d022a384a2b_ff11_ctl00_ctl00_TextField".

    Lo que tienes que hacer es algo parecido a este codigo que te pongo para que te funcione:

    <script type="text/javascript"> 
    	
    	_spBodyOnLoadFunctionNames.push('MyFunction'); 
    	
    
    var dc= getfield("input","eltitulo");
    
    	function getField(fieldType,fieldTitle) {  
    	    var docTags = document.getElementsByTagName(fieldType);  
    	    for (var i=0; i < docTags.length; i++) {  
    	        if (docTags[i].title == fieldTitle) {
    	            return docTags[i]  
    	        }  
    	    }  
    	}
    
    
    
    
    </script>

    Ese script lo que te hace es te busco el tipo input y dentro de todos los inputs que tengas en la pagina busca el que se llame como tu columna. Y de esta forma tendras acceso a la entrada que tu quieres.

    De todas formas no se el tipo de validación que quieres hacer, pero si es una validación simple la puedes hacer directamente desde la lista de sharepoint en la parte de validación.

    Saludos

    
    
    
    
    viernes, 24 de agosto de 2012 9:43
  • Muchas gracias Adrian voy a hacer eso y a capacitarme un poco mas en cuanto a las validaciones desde las columnas de Sharepoint
    viernes, 24 de agosto de 2012 13:54