IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SharePoint .NET Discussion :

Problème de création de tâches planifiées [Timer Jobs]


Sujet :

SharePoint .NET

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 84
    Points : 62
    Points
    62
    Par défaut Problème de création de tâches planifiées [Timer Jobs]
    Bonjour à tous,

    Je pose pas mal de questions en ce moment et je m'excuse par avance!
    Je recherche activement via les forums, blogs, msdn etc.. mais la j'ai une erreur et je ne comprend pas...

    Donc je veux créer une tâche planifiées [Timer Job] avec SPJobDefinition.
    Je passe une une Feature pour l'activer.

    J'ai donc créer un projet:

    Ma classe où je défini mon Job
    J'ajoute mon feature.xml qui nous permettra d'ajouter notre job
    J'ajoute également une nouvelle classe qui nous permettra d'ajouter notre job lors de l'activation de la feature. (et suppression)

    Une fois que tout est créé et en prenant compte des différents tutos, etc. Je lance mon WPBuilder et créer une solution.

    Je déploie ma feature, je vais sur l'administration centrale de SharePoint pour déployer ma solution et là c'est le drame....^^ erreur!

    Nom : maSolution.wsp
    Type : Solution principale
    Contient des ressources d'applications Web : Non
    Contient un assembly global : Oui
    Contient une stratégie de sécurité d'accès du code : Non
    Type de serveur de déploiement : Serveur Web frontal
    État du déploiement : Erreur
    Déployée sur : Aucun
    Résultats de la dernière opération : Échec de l'installation des fonctionnalités pendant le déploiement de la solution.
    Détails de la dernière opération : VM-MOSSDEV-1 : Échec de la création de l'objet du récepteur de fonctionnalité depuis l'assembly « maSolution, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1c266cb573f4a833 », de type « maSolution.EnregistrementSynchro » pour la fonctionnalité b80d14a9-8b1a-4938-ada3-750a85885b68: System.ArgumentNullException: La valeur ne peut pas être null.
    Nom du paramètre : type
    à System.Activator.CreateInstance(Type type, Boolean nonPublic)
    à System.Activator.CreateInstance(Type type)
    à Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
    J'ai beau cherché, bien regardé mon code, je n'arrive pas a trouver le probleme...snif, et je comprend rien a ce message d'erreur!!

    Le probleme doit provenir de la classe qui hérite de SPFeatureReceiver

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Administration;
    using Microsoft.SharePoint.Utilities;
    using System.Configuration;
     
    namespace maSolution
    {
        class EnregistrementSynchro : SPFeatureReceiver
        {
            private const string STR_Synchro = "Synchronisation Espace Projet - CSIBO";
     
     
     
            public override void FeatureActivated(SPFeatureReceiverProperties properties)
     
        {
     
            //SPSite site = properties.Feature.Parent as SPSite;
            SPSite site =  new SPSite(ConfigurationManager.AppSettings["url_Serveur"]);
     
            // On s'assure de bien supprimer toutes les instances du job avant d'en recréer une nouvelle.
            DeletePreviousJob(site);
     
            // On passe au constructeur, une série de paramètres provenant entre autres, du property bag de la feature
            SynchronisationEPC job = new SynchronisationEPC(STR_Synchro,site.WebApplication);// etc ...);
     
            // Il existe les equivalents en Daily et Weekly Schedule
            SPMinuteSchedule schedule = new SPMinuteSchedule();
     
            // Cette configuration du timer prévoit de le lancer toute les minutes
            schedule.BeginSecond = 0;
            schedule.EndSecond = 59;
            schedule.Interval = 1;
     
            job.Schedule = schedule;
            job.Update();
     
        }
     
            public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
            {
     
                SPSite site = new SPSite(ConfigurationManager.AppSettings["url_Serveur"]);
                DeletePreviousJob(site);
            }
     
            private void DeletePreviousJob(SPSite site)
            {
                foreach (SPJobDefinition jobDefinition in site.WebApplication.JobDefinitions)
                {
     
                    if (jobDefinition.Title == STR_Synchro)
     
                        jobDefinition.Delete();
                }
     
            }
     
            public override void FeatureInstalled(SPFeatureReceiverProperties properties)
            {
                //throw new Exception("The method or operation is not implemented.");
            }
     
            public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
            {
                //throw new Exception("The method or operation is not implemented.");
            }
        }
    }
    Si quelq'un à une idée!Ca serai cool! ^^

    D'avance merci!!

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 107
    Points : 127
    Points
    127
    Par défaut
    J'ai peut-être quelques indices :

    Premièrement met ta classe public (même si je ne pense pas que cela soit le problème)
    Secondement lorsque tu ouvres ton site ouvre le non pas avec l'url que tu récupère dans le web.conf mais plutot via le properties qui est en paramètre de la méthode.
    J'ai déjà eu un problème assez similaire.

  3. #3
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Août 2007
    Messages : 62
    Points : 72
    Points
    72
    Par défaut
    Je ne peux pas te dire avec certitude d'où ça vient, mais je pressent que c'est ce bout de code là :
    ConfigurationManager.AppSettings["url_Serveur"].
    En revanche, je peux t'aider sur la façon de trouver l'erreur. Rien ne t'empêche de mettre un point d'arrêt sur ton job et de t'attacher au process depuis Visual Studio. Si tu as des problème pour t'attacher au process parce qu'il ne se lance pas au bon moment, ou que lorsqu'il se lance c'est déjà trop tard, tu peux très bien ajouter ce bout de code :
    System.Diagnostics.Trace.Assert(false);
    Tu trouveras cette info parmis une tonne d'autres bonnes infos sur cet article d'Andrew Connell.

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 84
    Points : 62
    Points
    62
    Par défaut
    Re!

    Merci pour la rapidité de vos réponses!

    Donc je viens de retester en modifier la ligne qui fait appel au web.config.
    J'ai appelé comme dans les exemples le properties :

    SPSite site = properties.Feature.Parent as SPSite;

    J'ai refait ma solution .wsp, j'ai redéployer, et toujours la meme erreur...snif!
    Je n'arrive pas a trouver où peux se cacher cette erreur!! grrrr

    Je vais réessayer de créer un job de base, sans mon code ajouter....

    (Si vous etes intéressé pour voir l'ensemble de ma solution je vous l'envoi par mp! no prob! lol ^^)

    Merci de vos réponses.

    Et si ca intéresse du monde, j'ai tout une liste de liens concernant les tâches planifiées (job)!

  5. #5
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Août 2007
    Messages : 62
    Points : 72
    Points
    72
    Par défaut
    Pourquoi ne pas tout simplement passer en debug et regarder la collection de listes afin de comparer votre paramètre aux noms de liste existantes ?

  6. #6
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut
    salut,

    en regardant un peu ton code je pense avoir détécté d'où peut provenir l'erreur malgré le fait que le message de l'exception n'est pas clair.
    je remarque que dans ta méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private void DeletePreviousJob(SPSite site)
            {
                foreach (SPJobDefinition jobDefinition in site.WebApplication.JobDefinitions)
                {
     
                    if (jobDefinition.Title == STR_Synchro)
     
                        jobDefinition.Delete();
                }
     
            }
    si tu regardes bien tu boucles sur la collection de jobs et en même temps tu supprimes le job dont le title correspond à STR_Synchro or tu ne peux pas supprimer des éléments dans une collection sur laquelle tu boucles enfin c'est peut être pas la cause de l'erreur mais en tous à mon avis ça te générera une erreur c'est sûr si le code tente d'éxécuter le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jobDefinition.Delete();

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 84
    Points : 62
    Points
    62
    Par défaut
    Hello tout le monde!!

    Encore merci pour vos réponses!
    Je viens vous donner des news de mon avancement ....(et aussi d'un nouveau problème!! lol)

    Donc, j'ai créé une nouvelle feature directement, j'ai ajouter une classe avec le SPJobDefinition.

    J'ai laissé mon code précédent, j'ai déployé...et ca marche!! waouhhhh! Trop fier de moi!
    J'ai mis le HIDDEN à FALSE dans mon xml pour avoir accés direct du site a ma feature pour désactiver et réactiver (mode debug :p)

    Ca marchouille donc jsuis tout fier de moi....mais le job ne se lance pas.. :s:s
    Pourtant il est configuré pour se lancer toutes les minutes mais rien de rien...

    J'ai l'impression que ma fonction : public override void Execute(Guid targetInstanceId) ne se lance jamais....!

    Donc je vais dans ma centrale d'administration => Opérations => Définitions des travaux du minuteur => je clique sur mon Job (tout fier qu'il soit la!) mais :



    Est ce que vous avez une idée d'où pourrai être le problème?

    D'avance merci

    PS: si besoin de mettre une partie du code pour mieux comprendre dites le moi!

  8. #8
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut
    vérifies s'il n'y a pas d'exceptions dans ton eventlog !

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 84
    Points : 62
    Points
    62
    Par défaut
    Bonjour à tous,

    Je remonte le sujet qui date un peu!

    Bon, tout d'abord j'ai réussit à créer des tâches planifiées! (trop bien, trop fier.....^^)

    Je récupère des valeurs dans mon fichier xml, ca marche nickel. Je créé ma solution, je déploi et hop ca fonctionne.

    Maintenant, mon problème (et oui y a toujours un problème avec moi :p), j'insère des valeurs clés dans mon xml, ces valeurs sont des URL, connexion SQL etc...
    Le problème, c'est lorsque je veux déployer mon appli sur un autre serveur, je dois modifier mes liens dans mon feature.xml, regénérer, re-créer une solution!

    C'est qd meme pas top...donc à la place de mettre mes valeurs clés dans mon xml, j'ai voulu passer par le web.config. Comme ça, une unique solution qui va chercher les valeurs directement dans mon web.config et Appsettings.

    Je mets donc dans fonction Execute de mon Job :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    url_Serveur = ConfigurationManager.AppSettings["url_Serveur"];
    NomSite = ConfigurationManager.AppSettings["NomSite"];
    Mais il ne trouve aucune valeur dans mon web.config ?! Alors que les valeurs sont déclarés. Il rentre dedans mais dimension[] = null ?!

    Alors est-il possible d'appeler le fichier web.config avec un timer Job?
    Sinon avez vous une alternative à mon problème?

    EDIT: Dans quel web.config va-t-il chercher les valeurs? Peut etre le problème, j'ai mis les valeurs dans le web.config de ma collection de site où est déployé mon job.

    D'avance merci

Discussions similaires

  1. [Tutoriel] Création de tâches planifiées depuis VBA
    Par Jean-Philippe André dans le forum Access
    Réponses: 1
    Dernier message: 14/11/2009, 00h06
  2. [Batch] Problème Script liste des tâches planifiés de plusieurs serveurs
    Par waner442 dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 26/08/2009, 16h33
  3. Création de Tâches Planifiées
    Par Cartman.inc dans le forum Windows Forms
    Réponses: 6
    Dernier message: 30/04/2008, 11h36
  4. Réponses: 4
    Dernier message: 27/11/2007, 11h47
  5. Réponses: 2
    Dernier message: 27/07/2007, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo