none
Tmer Job Mail RRS feed

  • Pregunta

  • Hola a todos buscando una solución a un desarrollo que tengo pendiente de encontré la
    respuesta a todas mis dudas
    les resumo. Con un timer Job quiero enviar ciertos correos en un tiempo específico Juan
    Carlos Gonzalez en post pasados planteo lo siguiente:

    Tienes varias opciones:
     •Usar una acción o actividad que te permita esperar hasta una fecha concreta o un cierto período de tiempo...en SharePoint Designer tienes las siguientes acciones para ello: Detener durante, Detener hasta fecha y Esperar a que el campo cambie en el elemento actual.
    •Lo mismo, pero mediante un flujo de trabajo creado con Visual Studio...ten en cuenta que los flujos se apoyan en WF (Workflow Foundation) que te aporta todo lo necesario para modelar el escenario que planteas.
     •O bien hacer un Timer Job que se ejecute cada cierto tiempo, se recorra la lista de tareas y genere los avisos.
     
    Saludos

    Comienza con este que te dice como usar las actividades que te comentaba de SharePoint Designer:
    http://geeks.ms/blogs/ciin/archive/2010/12/29/sharepoint-2010-como-crear-un-casi-timer-job-con-cero-desarrollo.aspx

    Propuesto como respuesta Juan Carlos González

    Con el Work
    flow funciona perfecto pero necesito crearlo con un timer job <o:p></o:p>

    gracias de ante mano <o:p></o:p>

    Araujopa<o:p></o:p>


    miércoles, 12 de septiembre de 2012 14:20

Respuestas

Todas las respuestas

  • Hola Araujopa!!

    Esta cuestion que planteas ya la comente en el siguiente post de crear un correo desde Sharepoint .

    En el te envio un link en la que explica como te tienes que crear un Timer Job desde Codigo y posteriormente los pasos para enviar un mail por código si lo unes tienes la solucion.

    Cualquier duda ya comentas... Pero una pregunta porque no es valido la solución que te aporta Juan Carlos?

    
    miércoles, 12 de septiembre de 2012 15:06
  • por que aca lo quieren con un timer Job no es mio es mi manager
    miércoles, 12 de septiembre de 2012 15:15
  • Hola la verdad no entiendo nada de esto soy nuevo con este tema de SharePoint Ayud Adrian

     me explico que es lo que deo hacer

    te copio el requerimiento

      • Come up with 2 html templates of the email which will go out to the sponsors.This email template will have the name of the contract as a hyperlink along with the keydate.
        1. The first template is the email which goes out every month or every few days. The email will be divided into sections like next 5 days, next 15 days, next 30 days etc.
        2. The second template is the email which goes out to the sponsor 5 days before the key date of a contract. The email will consolidate all the contracts that come up for renewal 5 days later.
      • Timer job in 2010 which will read the contract data using the SharePoint web services in 2007 to generate these emails.
    • Editado ARAUJOPA miércoles, 12 de septiembre de 2012 15:25
    miércoles, 12 de septiembre de 2012 15:23
  • Ok,  Pero aun asi hay cosas que no entiendo porque el Timer Job lo vas a implementar en 2010 si los datos los vas a obtener de un Sharepoint 2007, lo mas logico seria implementar el Job en 2007 y de esa forma te evitas el consumo del WebService y te puedes evitar una fuente de posibles poblemas.

    Para el desarrollo de este Timer Jobe aparte de unos conocimientos sobre Sharepoint te hara falta conocimientos sobre .Net ya sea C# (preferiblemente) o Visual Basic. Si es asi lo que quieres comentamelo y te intento guiar en una solución aproximada.

    Saludos.

    miércoles, 12 de septiembre de 2012 15:46
  • hola la idea es haerlo con C# yo tengo conocimientos en SharePoint

    miércoles, 12 de septiembre de 2012 17:01
  • Ayuda
    miércoles, 12 de septiembre de 2012 20:48
  • En primer lugar te quedas un proyecto  de sharepoint en blanco, yo por tema de estructura me creo una carpeta Job  donde le añado una clase  TimerJob.cs como la siguiente

    using Microsoft.SharePoint.Administration;
    using Jobs.Helpers;
    using System;
    using Microsoft.SharePoint;
    using Jobs.Process;
    
    namespace Jobs.Jobs
    {
        class TimerJob : SPJobDefinition
        {
             public SyncrhoMovistar() : base()
            {
    
            }
    
             public TimerJob(string jobName, SPService service, SPServer server, SPJobLockType targetType)
                 : base(jobName, service, server, targetType)           
            {
    
            }
    
            public TimerJob(string jobName, SPWebApplication webApplication)
                : base(jobName, webApplication, null, SPJobLockType.ContentDatabase)
            {
                this.Title = "Job de enviar mail";
            }
    
            public override void Execute(Guid contentDbId)
            {
                using (SPSite site = new SPSite("http://" + ApplicationDirectory.Common.SiteUrl))
                {
                    JobProcess.ActivateJob(site);
                }            
            }
        }
    }

    El siguiente proceso lo que hago es me creo otra clase de tipo JobProcess y me creare una función ActivateJob en la que añadire la funcionalidad que quiera (es decir en tu caso realizare las busquedas en el WebService de MOSS 2007 y enviare el mail. El código para enviar el Mail en Sharepoint2010 te puede valer el siguiente:

     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);
                                }

    Despues a continuación te hace falta que añadir un evento a la Feature que se hace de la siguiente forma:

    Una vez añadio el receptor de eventos tienes que descomentar la función que es cuando se active la Feature y cuando se desactive y tienes que poner un codigo tal que asi:

     public override void FeatureActivated(SPFeatureReceiverProperties properties)
            {
                
    
                    SPSite site = properties.Feature.Parent as SPSite;
    
    
      
                    TaskJob taskLoggerJob = new TaskJob(ApplicationDirectory.Job.JobName, site.WebApplication);
    
                    SPDailySchedule schedule = new SPDailySchedule();
                    schedule.BeginHour = 20;
                    schedule.EndHour = 21;
    
                    taskLoggerJob.Schedule = schedule;
    
                    taskLoggerJob.Properties.Add("site", site.Url);
       
                    taskLoggerJob.Update();
           
           

    En este caso he programado que el Job se ejecute todos los dias a las 20:00 esto posteriormente lo puedes modificar desde la administración central.

    Una vez realizado esto despliegas la Feature sobre el sitio en Sharepoint y activas esta caracteristica. Y si todo va bien ya tienes el Job funcionando.

    Como consejo yo antes de añadirlo al Job llamo a la función que me he implementado desde un WebPart y compruebo su funcionamiento y a continuación cuando ya lo tengo depurado lo añado al Timer Job,.

    Espero haberte servido de ayuda.

    jueves, 13 de septiembre de 2012 7:45
  • Hola Adrian tengo las siguiente duda :

    1 Cuando hablas de crear otra clase de tipo JobProcess como lo hago ?

    jueves, 13 de septiembre de 2012 14:09
  • A añadir un fichero de datos .cs a la solución que nos acabamos de crear

    • Marcado como respuesta ARAUJOPA jueves, 13 de septiembre de 2012 18:51
    jueves, 13 de septiembre de 2012 15:49
  • No adiran no he podido el crear TimerJob.cs  me esta generando un monton de errores en

    using Jobs.Helpers;

    using Jobs.Process

    tambien en  la linea

    public SyncrhoMovistar() : base()

    JobProcess.ActivateJob(site);


    jueves, 13 de septiembre de 2012 17:13
  • Perfecto Gracias
    jueves, 13 de septiembre de 2012 18:52