Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WSS] Ajouter une web part dans une page d'un site definition

2 réponses
Avatar
Nicolas
Bonjour à tous,

J'ai developpé une web part qui affiche un menu à partir du contenu d'une
liste SharePoint. Voici un extrait du code de ma web part:

private Menu myMenu;

protected override void CreateChildControls()
{
// Get the current web site
SPWeb spw = SPControl.GetContextWeb(Context);

// Get Menu List
SPList splMenu = spw.Lists["Menu"];

// Create Menu
myMenu = this.createMenu(splMenu);
}

protected override void RenderWebPart(HtmlTextWriter output)
{
EnsureChildControls();

// Display Menu
myMenu.display();
}

Je souhaite l'ajouter dans toutes les pages de mon custom site definition.
Pour ca, j'ai deployé ma web part avec STSADM et j'ai rajouté dans chaque
page de mon site definition:
<%@ Register TagPrefix="WpNs" Namespace="WP" Assembly="MaWebPartMenu" %>
puis a l'endroit ou je veux ajouter ma web part:
<WpNs:MaClasseWPMenu runat="server">
<WebPart xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.microsoft.com/WebPart/v2">
<FrameType>None</FrameType>
</WebPart>
</WpNs:MaClasseWPMenu>

Ce sont les indications de cette page par exemple:
http://weblogs.asp.net/jan/archive/2004/12/21/329107.aspx

La web part fonctionne bien sur toutes les pages mais j'ai cependant deux
petits problèmes:

1. La web part <SharePoint:ListProperty Property="Title" runat="server"/>
qui doit afficher le titre de la liste courante (quand on est sur une page
AllItems.aspx d'une liste par exemple) dans la balise <title> affiche à la
place le titre de ma liste Menu (splMenu).
Du coup, j'utilise le code suivant:

// Get the current web site
SPSite sps = SPControl.GetContextSite(Context);

// Get Menu list
sps.OpenWeb(strServerRelativeUrl).Lists["Menu"];

Et ca fonctionne! Est-ce que vous savez pourquoi je dois faire comme ca?


2. De plus, dans la méthode CreateChildControls() de ma web part, si je veux
libérer les ressources sur mon objet spw avec ce code:

using(SPWeb spw = SPControl.GetContextWeb(Context))
{
// Get Menu List
SPList splMenu = spw.Lists["Menu"];

// Create Menu
myMenu = this.createMenu(splMenu);
}

Alors j'ai cette meme web part <SharePoint:ListProperty Property="Title"
runat="server"/> qui ne fonctionne plus (Erreur: Cannot complete this action.
Please try again) et donc ma page ne s'affiche plus.
Une idée?!


Merci d'avance pour vos conseils. J'aimerai bien comprendre ce qui se passe
et ou j'ai fait une erreur...


Nicolas

2 réponses

Avatar
Renaud Comte
Pour le point un, ca me surprend, il faudrait que je teste...
on dirait que ca influe le contexte du site







Sinon le 2 est un grand classique :)

le Spweb recupéré par le getcontext represente une référence au SPweb utilisé
dans le site dans son contexte d'execution

En le fermant, vous detruisez non pas la variable mais l'objet lui emem et
donc toute les WP s'xecutant ensuite se retrouve sans objet

Les regles de développement SahrePoint sont plus drastique que le simple
dev ASP.Net, il faut en tenir compte et bien comprendre le role de la WPPage
face a la WP comme pour le context ou le cache

Bon courage

Renaud COMTE [MVP]
---------------------------------
http://blogs.developpeur.org/themit/
http://blog.spsclerics.com/

Bonjour à tous,

J'ai developpé une web part qui affiche un menu à partir du contenu
d'une liste SharePoint. Voici un extrait du code de ma web part:

private Menu myMenu;

protected override void CreateChildControls()
{
// Get the current web site
SPWeb spw = SPControl.GetContextWeb(Context);
// Get Menu List
SPList splMenu = spw.Lists["Menu"];
// Create Menu
myMenu = this.createMenu(splMenu);
}
protected override void RenderWebPart(HtmlTextWriter output)
{
EnsureChildControls();
// Display Menu
myMenu.display();
}
Je souhaite l'ajouter dans toutes les pages de mon custom site
definition.
Pour ca, j'ai deployé ma web part avec STSADM et j'ai rajouté dans
chaque
page de mon site definition:
<%@ Register TagPrefix="WpNs" Namespace="WP" Assembly="MaWebPartMenu"
%>
puis a l'endroit ou je veux ajouter ma web part:
<WpNs:MaClasseWPMenu runat="server">
<WebPart xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.microsoft.com/WebPart/v2">
<FrameType>None</FrameType>
</WebPart>
</WpNs:MaClasseWPMenu>

Ce sont les indications de cette page par exemple:
http://weblogs.asp.net/jan/archive/2004/12/21/329107.aspx

La web part fonctionne bien sur toutes les pages mais j'ai cependant
deux petits problèmes:

1. La web part <SharePoint:ListProperty Property="Title"
runat="server"/>
qui doit afficher le titre de la liste courante (quand on est sur une
page
AllItems.aspx d'une liste par exemple) dans la balise <title> affiche
à la
place le titre de ma liste Menu (splMenu).
Du coup, j'utilise le code suivant:
// Get the current web site
SPSite sps = SPControl.GetContextSite(Context);
// Get Menu list
sps.OpenWeb(strServerRelativeUrl).Lists["Menu"];
Et ca fonctionne! Est-ce que vous savez pourquoi je dois faire comme
ca?

2. De plus, dans la méthode CreateChildControls() de ma web part, si
je veux libérer les ressources sur mon objet spw avec ce code:

using(SPWeb spw = SPControl.GetContextWeb(Context))
{
// Get Menu List
SPList splMenu = spw.Lists["Menu"];
// Create Menu
myMenu = this.createMenu(splMenu);
}
Alors j'ai cette meme web part <SharePoint:ListProperty
Property="Title"
runat="server"/> qui ne fonctionne plus (Erreur: Cannot complete this
action.
Please try again) et donc ma page ne s'affiche plus.
Une idée?!
Merci d'avance pour vos conseils. J'aimerai bien comprendre ce qui se
passe et ou j'ai fait une erreur...

Nicolas



Avatar
Nicolas
Je me doutais bien d'un truc dans le genre mais voila les informations
exactes qu'il me manquait donc merci beaucoup...

Pour le point 1, je peux rajouter un détail qui peut être éventuellement
important c'est que sur ma liste Menu (splMenu), je fais dans la suite de mon
code une requête pour filtrer les items de ma liste avec SPQuery. Je vais
revoir en détail ce point...

Merci encore et bravo pour tout ce que vous faites pour le monde SharePoint
;-)

Nicolas


"Renaud Comte" a écrit :

Pour le point un, ca me surprend, il faudrait que je teste...
>>> on dirait que ca influe le contexte du site

Sinon le 2 est un grand classique :)

le Spweb recupéré par le getcontext represente une référence au SPweb utilisé
dans le site dans son contexte d'execution

En le fermant, vous detruisez non pas la variable mais l'objet lui emem et
donc toute les WP s'xecutant ensuite se retrouve sans objet

Les regles de développement SahrePoint sont plus drastique que le simple
dev ASP.Net, il faut en tenir compte et bien comprendre le role de la WPPage
face a la WP comme pour le context ou le cache

Bon courage

Renaud COMTE [MVP]
---------------------------------
http://blogs.developpeur.org/themit/
http://blog.spsclerics.com/

> Bonjour à tous,
>
> J'ai developpé une web part qui affiche un menu à partir du contenu
> d'une liste SharePoint. Voici un extrait du code de ma web part:
>
> private Menu myMenu;
>
> protected override void CreateChildControls()
> {
> // Get the current web site
> SPWeb spw = SPControl.GetContextWeb(Context);
> // Get Menu List
> SPList splMenu = spw.Lists["Menu"];
> // Create Menu
> myMenu = this.createMenu(splMenu);
> }
> protected override void RenderWebPart(HtmlTextWriter output)
> {
> EnsureChildControls();
> // Display Menu
> myMenu.display();
> }
> Je souhaite l'ajouter dans toutes les pages de mon custom site
> definition.
> Pour ca, j'ai deployé ma web part avec STSADM et j'ai rajouté dans
> chaque
> page de mon site definition:
> <%@ Register TagPrefix="WpNs" Namespace="WP" Assembly="MaWebPartMenu"
> %>
> puis a l'endroit ou je veux ajouter ma web part:
> <WpNs:MaClasseWPMenu runat="server">
> <WebPart xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns="http://schemas.microsoft.com/WebPart/v2">
> <FrameType>None</FrameType>
> </WebPart>
> </WpNs:MaClasseWPMenu>
>
> Ce sont les indications de cette page par exemple:
> http://weblogs.asp.net/jan/archive/2004/12/21/329107.aspx
>
> La web part fonctionne bien sur toutes les pages mais j'ai cependant
> deux petits problèmes:
>
> 1. La web part <SharePoint:ListProperty Property="Title"
> runat="server"/>
> qui doit afficher le titre de la liste courante (quand on est sur une
> page
> AllItems.aspx d'une liste par exemple) dans la balise <title> affiche
> à la
> place le titre de ma liste Menu (splMenu).
> Du coup, j'utilise le code suivant:
> // Get the current web site
> SPSite sps = SPControl.GetContextSite(Context);
> // Get Menu list
> sps.OpenWeb(strServerRelativeUrl).Lists["Menu"];
> Et ca fonctionne! Est-ce que vous savez pourquoi je dois faire comme
> ca?
>
> 2. De plus, dans la méthode CreateChildControls() de ma web part, si
> je veux libérer les ressources sur mon objet spw avec ce code:
>
> using(SPWeb spw = SPControl.GetContextWeb(Context))
> {
> // Get Menu List
> SPList splMenu = spw.Lists["Menu"];
> // Create Menu
> myMenu = this.createMenu(splMenu);
> }
> Alors j'ai cette meme web part <SharePoint:ListProperty
> Property="Title"
> runat="server"/> qui ne fonctionne plus (Erreur: Cannot complete this
> action.
> Please try again) et donc ma page ne s'affiche plus.
> Une idée?!
> Merci d'avance pour vos conseils. J'aimerai bien comprendre ce qui se
> passe et ou j'ai fait une erreur...
>
> Nicolas
>