none
création d'un pdf a la validation d'un document dans la bibliotheque de document RRS feed

  • Question

  • Bonjour.
    J'ai un problème et je commence a croire que c'est pas possible a résoudre.(je travaille avec un SharePoint 2003).
    Je souhaite convertir les fichiers en PDF lors de leur validation (approbation) et les léser normal quand ils sont rejeté ou en attente.


    J’ai fais un assembly (dll) en C# avec Visual 2003 qui créé un PDF quand un fichier de ma bibliothèque de document est modifier.


    Je suis tout près du bute mais ce n’est pas encore sa, par ce que la je vais créer un PDF à chaque foi qu’il est modifier même quand il est rejeter, dommage...


    1- Comment je peux faire pour savoir le nom, le chemin, le statut (approuver, rejeter,…) d’un fichier qui vient d’aitre modifier ?


    2- Si ce n’est pas possible avec Visual 2003 est ce que je peu le faire possible avec le Visual 2005 ?


    3- Si ce n’est pas possible avec le SharePoint 2003 est ce que je peu le faire avec le SharePoint 2007 ?


    Merci

    Cordialement

                    Dr_sharepoint

    mercredi 21 novembre 2007 09:20

Toutes les réponses

  • Je ne sais pas si c'est faisable en sharepoint 2003 mais en 2007, tu pourrais, dans un event handler, récupérer l'élément et donc comparer si status est égal à approuver. Si c'est le cas tu fais ton traitement...

     

    Je ne sais pas si c'est celà que tu veux faire...

     

    Je pense que ça devrai donner un truc dans le genre :

     

    Extrait de code

    SPListItem item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);

    if (item["Status"].ToString().ToLower().Equals("approuver"))

    {

    // Converir le doc en pdf...

    }

     

     

     

    mercredi 21 novembre 2007 10:03
  • Merci Bocoup je croi enfin que je touche au bute.mais voila mon code:

     

    Extrait de code

    using System.IO;

    using Microsoft.SharePoint;

    public class MonEventSink : IListEventSink

    {

    StreamWriter sw = null;

    public void OnEvent(SPListEvent theEvent)

    {

    FileStream fs;Microsoft.SharePoint.SPListItem element;

    // now, do something special based on the type of event fired

    switch (theEvent.Type)

    {

    case SPListEventType.CheckIn:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\CheckIn.txt");

    fs.Close();

    break;

    case SPListEventType.Invalid:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\Invalid.txt");

    fs.Close();

    break;

    case SPListEventType.CheckOut:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\CheckOut.txt");

    fs.Close();

    break;

    case SPListEventType.Copy:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\Copy.txt");

    fs.Close();

    break;

    case SPListEventType.Delete:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\Delete.txt");

    fs.Close();

    break;

    case SPListEventType.Move:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\Move.txt");

    fs.Close();

    break;

    case SPListEventType.UncheckOut:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\UncheckOut.txt");

    fs.Close();

    break;

    case SPListEventType.Update:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\Update.txt");

    sw = new StreamWriter(fs);

     

    sw.Write(element.File.Name.ToString());

     

    if (element["Status"].ToString().ToLower().Equals("approuver"))

    {sw.Write("Approuver_I_am_a_KILLER");}

    fs.Close();

    break;

    }

    }

    }

     

     

     

    et voila mon érreur que je ne comprent pas

     

    ! C:\Documents and Settings\mgaloseau\Mes documents\Visual Studio Projects\Mon_premier_evenement\MonEventSink.cs(62): Utilisation d'une variable locale non assignée 'element'


     

    La dépendance 'Microsoft.SharePoint.Dsp' est introuvable.

    La dépendance 'Microsoft.SharePoint.Security' est introuvable.
    La dépendance 'Microsoft.SharePoint.Library' est introuvable.
    mercredi 21 novembre 2007 10:59
  •  

    Désoler en faite je suis un gros boulet. voici mon code :

     

    Extrait de code

    using System.IO;

    using Microsoft.SharePoint;

    public class MonEventSink : IListEventSink

    {

    StreamWriter sw = null;

    FileStream fs;

    Microsoft.SharePoint.SPListItem element;

    public void OnEvent(SPListEvent theEvent)

    {

    // now, do something special based on the type of event fired

    switch (theEvent.Type)

    {

    case SPListEventType.CheckIn:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\CheckIn.txt");

    fs.Close();

    break;

    case SPListEventType.Invalid:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\Invalid.txt");

    fs.Close();

    break;

    case SPListEventType.CheckOut:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\CheckOut.txt");

    fs.Close();

    break;

    case SPListEventType.Copy:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\Copy.txt");

    fs.Close();

    break;

    case SPListEventType.Delete:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\Delete.txt");

    fs.Close();

    break;

    case SPListEventType.Move:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\Move.txt");

    fs.Close();

    break;

    case SPListEventType.UncheckOut:

    //Création d'un fichier vide.

    fs = File.Create(@"C:\UncheckOut.txt");

    fs.Close();

    break;

    case SPListEventType.Update:

    fs = File.Create(@"C:\Update.txt");

    sw = new StreamWriter(fs);

    sw.Write("Propriéter de l'élément modifier");

    sw.Write(element["Status"].ToString().ToLower());

     

    if (element["Status"].ToString().ToLower().Equals("approuver"))

    {sw.Write("Approuver_I_am_a_KILLER");}

     

    sw.Close();

    fs.Close();

    break;

    }

    }

    }

     

     

     

    j'ai pas d'erreur à la compilation mais quand je le déploi sur mon sharepoint;

     

    sa sa marche :

    Extrait de code

    sw.Write("Propriéter de l'élément modifier");

     

     

    mais sa :

    Extrait de code

    if (element["Status"].ToString().ToLower().Equals("approuver"))

    {sw.Write("Approuver_I_am_a_KILLER");}

     

     

    ou sa :

    Extrait de code

    sw.Write(element["Status"].ToString().ToLower());

     

     

    sa me créé un fichier vide que je ne peux pas ouvrir car il y a un prossésus qui l'utilise.je redémare le pc et la je peu ouvrire le fichier mais il est vide.

    Pouvez vous m'aider?

     

    en faite j'imagine que c'est à cose que j'ai pas mi sa :

     

    Extrait de code

    web.Lists[properties.ListId].GetItemById(properties.ListItemId);

     

     

    par ce que je c pas ce que c'est et dans quelle librairi je peu trouver "web".

    Merci

    Cordialement

    mercredi 21 novembre 2007 13:14
  • En effet, tu utilises la variable element alors que tu ne l'assigne nul par. tu devrais avoir une ligne dans ton code du genre :

     

    Extrait de code

    SPListItem element = web.Lists[properties.ListId].GetItemById(properties.ListItemId);

     

     

    Pour dire que element pointe sur ton document en question, sinon il est nul...

     

    Sinon pour les dépendences, essaie de les rajouter à ton projet (add reference) et ensuite de faire les unsing qu'il faut.

     

    J'espère que ça t'aidera ;-)

    mercredi 21 novembre 2007 13:19
  • Merci bocoup. (Tu répon bocoup trop vite pour moi j'ai même pas le temps de finir de coriger ma question que tu y a répondu lol) bref merci. en effai tu m'aide bocoup sa marche presque mais c'est quoi :

    web.Lists[properties.ListId].GetItemById(properties.ListItemId);

     

    ou je trouve Web?sa vien d'ou?c'est dans sharepoint?sharepoint2003?

    mercredi 21 novembre 2007 13:25
  • voici le code que j'utiliserai :

     

    Extrait de code

    namespace VerifDoc

    {

    public class VerifDoc : SPItemEventReceiver

    {

    public override void ItemUpdated(SPItemEventProperties properties)

    {

    base.ItemUpdated(properties);

    SPSecurity.RunWithElevatedPrivileges(delegate()

    {

    SPSite site = new SPSite(properties.SiteId);

    SPWeb web = site.OpenWeb(properties.RelativeWebUrl);

    SPListItem item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);

    if (item["status"].ToString().ToLower().Equals("approuver"))

    {

    // PDF

    }

    });

    }

    }

    }

     

     

     

    Attention : vérifiez ce que retourne item["status"].ToString()... Je pense que ça retourne 0,1 ou 2. Il faudrait vérifier pour être sur qu'il passe bien dans le if
    mercredi 21 novembre 2007 13:25
  • mais element ne prend rien !!!

    vous n'affectez pas de valeur à element !

    vous le declarez sans lui affecter une valeur

     

    mercredi 21 novembre 2007 13:28
  • ah je vois qu'aprilia a repondu avant moi ...

    bon ben voila Smile

     

    mercredi 21 novembre 2007 13:30
  •  

    [citation] ah je vois qu'aprilia a repondu avant moi ...

    bon ben voila  [/citation]

     

    Oui, d'ailleur c'est assez pénible, je ne vois pas les dernier message posté sur le forum... Même en actualisant... Il faut que je modifie un message à moi dans le sujet pour ensuite voir les nouveau message posté. Puis quand je reviens sur la discussion de nouveau plus rien...

     

    Bug ou incohérence sur le forum de msdn???

     

    mercredi 21 novembre 2007 13:46
  •  

    Le problème c’est que « SPItemEventReceiver » je ce n’est pas d’où sa viens c’est peu aitre que pour SharePoint 2007 par ce que moi j’ai pas !

    SPItemEventProperties , ItemUpdated et SPSecurity j’ai pas non plus.

     

    la seul dll que j'ai ajouter a mon projet c'est Microsoft.SharePoint.dll

    Merci a vous.

    mercredi 21 novembre 2007 13:46
  • C'est un exemple, tu peux t'en inspirer...

     

    Je suppose que toi dans ton code, tu peux récupérer l'élément qui déclenche l'évenement avec ton Event (cherche dans ta variable "theEvent")...

     

    Il te manque plus que cette étape. tu dois récupérer l'élément qui à fait se déclencher dans ta variable "element".

     

    Bonne chance

     

    mercredi 21 novembre 2007 14:03
  • j'ai suivi ton conseille et j'arrive a sa

     

    Extrait de code

     

    using System.IO;

    using Microsoft.SharePoint;

    public class MonEventSink : IListEventSink

    {

    StreamWriter sw = null;

    FileStream fs = null;

     

    public void OnEvent(SPListEvent theEvent)

    {

    // now, do something special based on the type of event fired

    if (theEvent.Type==SPListEventType.Update)

    {

    //SPItemEventReceiver

    fs = File.Create(@"C:\Update.txt");

    sw = new StreamWriter(fs);

    sw.Write("url du site : \n");

    sw.Write(theEvent.WebUrl);

    sw.Write(theEvent.PropertiesAfter.Values.ToString());

     

    Microsoft.SharePoint.SPSite site = new SPSite(theEvent.WebUrl);

    Microsoft.SharePoint.SPWeb Web = site.OpenWeb(theEvent.WebUrl);

    Microsoft.SharePoint.SPListItem Item = Web.Lists[theEvent.ListID].GetItemById(1);

     

    if (Item["status"].ToString().ToLower().Equals("approuver"))

    {

    sw.Write("PropertiesAfter : \n");

    sw.Write(Item["status"].ToString());

    }

     

    sw.Close();

    fs.Close();

    }

    }

    }

     

     

    sa marche pas! sa compile mais à l'éxecution sa créé un fichier vide qu'un autre prossessus utilise

    mais sa avence pasque avec :

    Extrait de code
    theEvent.WebUrl

     

    j'ai l'url du site

     

    et avec

    Extrait de code

    theEvent.UrlAfter

     

     

    j'ai le nom et le chemain du fichier à convertir.sa c'est vraiment cool.merci
    mercredi 21 novembre 2007 15:05
  • Essaie de tracer pour voir ce qui fonctionne pas :

     

    Extrait de code

    using System.IO;

    using Microsoft.SharePoint;

    public class MonEventSink : IListEventSink

    {

    StreamWriter sw = null;

    FileStream fs = null;

     

    public void OnEvent(SPListEvent theEvent)

    {

    // now, do something special based on the type of event fired

     

     

    fs = File.Create(@"C:\Update.txt");

    sw = new StreamWriter(fs);

     

    sw.WriteLine("Passage 1");

     

    if (theEvent.Type==SPListEventType.Update)

    {

    //SPItemEventReceiver

     

    sw.Write("url du site : \n");

    sw.Write(theEvent.WebUrl);

    sw.Write(theEvent.PropertiesAfter.Values.ToString());

     

    Microsoft.SharePoint.SPSite site = new SPSite(theEvent.WebUrl);

    Microsoft.SharePoint.SPWeb Web = site.OpenWeb(theEvent.WebUrl);

    Microsoft.SharePoint.SPListItem Item = Web.Lists[theEvent.ListID].GetItemById(1);

     

    sw.WriteLine("Passage 2");

    sw.WriteLine(Item["status"].ToString()) // pour voir ce qu'il y a dedans

    if (Item["status"].ToString().ToLower().Equals("approuver"))

    {

     

    sw.WriteLine("Passage 3");

     

    sw.Write("PropertiesAfter : \n");

    sw.Write(Item["status"].ToString());

    }

     

    sw.Close();

    fs.Close();

    }

    }

    }

     

     

    Tu verra ou ça passe par rapport au résultat de ton fichier puisqu'il n'est pas dit qu'il passe dans ta boucle ;-)

    mercredi 21 novembre 2007 15:31
  •  

    c le premier truc que j'ai trouvé en recherchant sur google event handle sharepoint ...
    mercredi 21 novembre 2007 17:06
  • ah non désolé ca c pour MOSS 2007 pas pour sps 2003

     

    @aprilia : oui apparemment il y a un bug sur le forum .. Tongue Tied

     

    mercredi 21 novembre 2007 17:13
  • Merci aprilia769. j'ai ésséiller de faire se que tu ma di mais le fichier qui a été créé reste vide.je vai instaler visual 2005 je réssairai appret. Merci. merci aussi a  Aymennnn

    jeudi 22 novembre 2007 08:05
  • De rien, donc il y a un soucis autre part si ton fichier reste vide...

     

     

     

    jeudi 22 novembre 2007 08:27