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

Développement Sharepoint .NET Discussion :

Modifier par code le contenu d'une webpart Editeur de contenu


Sujet :

Développement Sharepoint .NET

  1. #1
    Membre du Club
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 60
    Points
    60
    Par défaut Modifier par code le contenu d'une webpart Editeur de contenu
    Bonjour,

    Dans le cadre d'une livraison de modification sur un projet SP existant, je dois développer un .exe modifiant le contenu d'une webpart de type Editeur de texte riche (via RadEditor) via le code. Jusque là, j'ai constaté qu'on pouvait modifier les propriétés des webparts d'une page, mais pas le contenu en lui même... Sauriez-vous si c'est possible, et si oui, par quelle propriété attaquer le contenu...

    Pour le moment, j'en suis là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SPWeb web = new SPSite(siteUrl).OpenWeb();
     
    SPLimitedWebPartManager myWebPartManager = web.GetLimitedWebPartManager("FR/accueil/Pages/home.aspx", System.Web.UI.WebControls.WebParts.PersonalizationScope.User);
                    SPLimitedWebPartCollection listWebparts = myWebPartManager.WebParts;
                    foreach (WebPart myWebPart in listWebparts)
                    {
                        Console.WriteLine(">>> " + myWebPart.Title);
                        /* ?????????  */
     
                    }
    J'ai essayé pas mal de chose, sans succès, d'où ce message en désespoir de cause... "Au secours Obi-Wan Kenobi, vous êtes mon seul espoir..."

  2. #2
    Membre du Club
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 60
    Points
    60
    Par défaut
    J'ai un peu avancé sur la question...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SPLimitedWebPartManager myWebPartManager = web.GetLimitedWebPartManager(siteUrl, System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
    SPLimitedWebPartCollection listWebparts = myWebPartManager.WebParts;
    ContentEditorWebPart myWebPart = (ContentEditorWebPart)listWebparts[0];
    XmlElement myXML = myWebPart.Content;
    myXML.InnerText = "<IMG style=\"BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; BORDER-LEFT: 0px solid; BORDER-BOTTOM: 0px solid\" src=\"/SiteCollectionImages/CFG/" + imgName + "\" border=0>";
    web.Update();
    L'exécution de ce code ne provoque aucune erreur, mais ne fait rien non plus. Autrement dit, ma webpart reste inchangée...

    Je précise que quand je fais un Console.Writeline de la commande "myXML.InnerText", avant toute tentative modification, cela me renvoie le contenu actuel de la webpart...

    Si vous avez une idée pour enregistrer la modification, je suis preneur.

    D'avance merci !

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 857
    Points : 884
    Points
    884
    Par défaut
    Un exemple ici et la

  4. #4
    Membre du Club
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Points : 60
    Points
    60
    Par défaut
    Merci beaucoup ! J'ai enfin réussi à résoudre mon problème grâce au 2e lien... Par contre je voulais préciser que j'ai été confronté à quelques soucis, pas prévu par le code du 2e exemple, à savoir qu'en se basant uniquement sur le code en question, l'appli me demandait une extraction de la page au préalable. Ensuite j'ai eu des soucis d'approbation / publication... J'avais avant cela eu du mal à accéder à la page souhaité... enfin bon, tout est réglé. Je vous met ce que ça donne au final :

    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
     
    SPWebCollection webSites = web.Webs;
    foreach (SPWeb webSite in webSites) //Liste des sites (Français / Anglais)
    {
       //Console.WriteLine(">>> " + webSite.Title);
       foreach (SPWeb subWebSite in webSite.Webs) //Accueil / Welcome
       {
          //Console.WriteLine("     >>> " + subWebSite.Title);
          foreach (SPFolder folderItem in subWebSite.Folders)
          {
             if (folderItem.Name == "Pages")
             {
                //Console.WriteLine("          - " + folderItem.Name);
                foreach (SPFile pageItem in folderItem.Files) //Parcours des fichiers du répertoire Pages
                {
                   if (pageItem.ServerRelativeUrl == pageUrl)
                   {
                      SPFile myPage = pageItem;
                      Console.WriteLine("Accès à " + pageUrl + " : OK");
                      try
                      {
                         //Si la page est extraite, on arrête le traitement
                         Console.WriteLine("");
                         Console.WriteLine("Dernière extraction le " + Convert.ToString(myPage.CheckedOutDate));
                         Console.WriteLine("");
                         Console.WriteLine("Merci de publier manuellement la page avant toute nouvelle modification. Aucun travail n'a été effectué.");
                         Console.WriteLine("");
                      }
                      catch
                      { 
                         myPage.CheckOut(); //Extraction de la page
                         using (SPLimitedWebPartManager myWebPartManager = myPage.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared))
                         {
                            if (myWebPartManager != null)
                            {
                               SPLimitedWebPartCollection listWebparts = myWebPartManager.WebParts; //Récupération de la liste des webparts de la page
                               if (listWebparts[0].GetType().ToString().Equals("Microsoft.SharePoint.WebPartPages.ContentEditorWebPart"))
                               {
                                  ContentEditorWebPart myWebPart = (ContentEditorWebPart)listWebparts[0]; //Convertion de la webpart en ContentEditorWebPart
                                  XmlDocument xmlDoc = new XmlDocument(); // Création d'un objet de type XMLDocument qui va contenir le contenu mis à jour de la webpart
                                  XmlElement xmlElement = xmlDoc.CreateElement("MyElement");
                                  xmlElement.InnerText = "<IMG style=\"BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; BORDER-LEFT: 0px solid; BORDER-BOTTOM: 0px solid\" src=\"/SiteCollectionImages/CFG/" + imgName + "\" border=0>";
                                  myWebPart.Content = xmlElement;
                                  myWebPartManager.SaveChanges(myWebPart); //Enregistrement des modifications effectuées sur la webpart
                               }
                            }
                         }
                         myPage.CheckIn("MAJ Webpart du " + DateTime.Now); //Archivage de la page
                         myPage.Approve("MAJ Webpart du " + DateTime.Now); //Approbation / publication de la page
                         Console.WriteLine("Modification de " + pageUrl + " : OK");
                      }
                   }
                }
             }
          }
       }
    }
    Voilà, si à l'avenir ça peut aider quelqu'un !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/05/2014, 20h58
  2. [MySQL] Comparer le contenu d'une variable aux valeurs contenues dans une table
    Par mmlio dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/10/2009, 17h20
  3. Nom du projet modifiable par code ?
    Par AndréPe dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/09/2007, 10h17
  4. Modifier par code l'icone systeme d'Excel 2003
    Par samloba dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/09/2007, 20h36
  5. Réponses: 3
    Dernier message: 11/11/2005, 17h15

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