J'utilise un webControl au sein d'une page aspx située dans un répertoire du
site exclu.
Ce WebControl nécessite de parcourir l'ensemble des SPWeb pour obtenir leur
titre et leur URL.
Depuis quelque temps j'ai une erreur sur ce type de code:
[DefaultProperty("Text"),
ToolboxData("<{0}:InfoBar runat=server></{0}:InfoBar>")]
public class SiteLinkBar : System.Web.UI.WebControls.WebControl
{
private Guid id;
public SiteLinkBar()
{}
public void SetWebID(Guid id)
{
this.id = id;
}
protected override void Render(HtmlTextWriter output)
{
SPWeb web = null;
try
{
if (this.id.CompareTo(Guid.Empty) == 0)
//web =
Microsoft.SharePoint.WebControls.Navigation.GetContextWeb(System.Web.HttpContext.Current);
web =
Microsoft.SharePoint.WebControls.SPControl.GetContextWeb(this.Context);
else
{
//SPSite site =
Microsoft.SharePoint.WebControls.Navigation.GetContextSite(System.Web.HttpContext.Current);
SPSite site =
Microsoft.SharePoint.WebControls.SPControl.GetContextSite(this.Context);
site.CatchAccessDeniedException = false;
web = site.OpenWeb(this.id);
}
J'ai plus l'habitude de passer par des URL via Openweb et je n'ai jamais eu le moindre soucis
Renaud COMTE [MVP] --------------------------------- http://blogs.developpeur.org/themit/ http://blog.spsclerics.com/
> Bonjour, > > J'utilise un webControl au sein d'une page aspx située dans un > répertoire du > site exclu. > Ce WebControl nécessite de parcourir l'ensemble des SPWeb pour obtenir > leur > titre et leur URL. > Depuis quelque temps j'ai une erreur sur ce type de code: > [DefaultProperty("Text"), > ToolboxData("<{0}:InfoBar runat=server></{0}:InfoBar>")] > public class SiteLinkBar : System.Web.UI.WebControls.WebControl > { > private Guid id; > public SiteLinkBar() > {} > public void SetWebID(Guid id) > { > this.id = id; > } > protected override void Render(HtmlTextWriter output) > { > SPWeb web = null; > try > { > if (this.id.CompareTo(Guid.Empty) == 0) > //web > > Microsoft.SharePoint.WebControls.Navigation.GetContextWeb(System.Web.H > ttpContext.Current); > web > > Microsoft.SharePoint.WebControls.SPControl.GetContextWeb(this.Context) > ; > else > { > //SPSite site > > Microsoft.SharePoint.WebControls.Navigation.GetContextSite(System.Web. > HttpContext.Current); > SPSite site > > Microsoft.SharePoint.WebControls.SPControl.GetContextSite(this.Context > ); > site.CatchAccessDeniedException = false; > web = site.OpenWeb(this.id); > } > string str = "<a > href=""+web.Url+""><u>"+web.Title+"</u></a>"; > while(!web.IsRootWeb) > { > web = web.ParentWeb; > str = "<a > href=""+web.Url+""><u>"+web.Title+"</u></a>" + " > > " + str; > } > output.Write("<div class="ms-formdescription">"); > output.Write(str); > output.Write("</div>"); > } > catch(Exception e) > { > output.Write(HtmlDesign.GetErrorTable(e)); > } > } > ************************************ > L'exception se produit sur "web = site.OpenWeb(this.id);" et retourne > : > - Impossible de terminer cette opération. Essayez de nouveau. > (Source : > Microsoft.SharePoint) > - Pile des appels : > at Microsoft.SharePoint.Library.a.a(String A_0, String& A_1, > String& A_2, String& A_3, Guid& A_4, UInt32& A_5, UInt32& A_6, UInt32& > A_7, > UInt16& A_8, Boolean& A_9, Int16& A_10, UInt32& A_11, Int16& > A_12, > Int16& A_13, Int16& A_14, Int32& A_15, Boolean& A_16, Int32& A_17, > Int16& > A_18, String& A_19, String& A_20, String& A_21, String& A_22, String& > A_23, Int32& A_24, Boolean& A_25, Boolean& A_26) > at Microsoft.SharePoint.SPWeb.g() > at Microsoft.SharePoint.SPWeb..ctor(SPSite A_0, String A_1, > Boolean A_2, Boolean A_3) > at Microsoft.SharePoint.SPSite.OpenWeb(Guid gWebId) > at ....line n > - Exception héritée : > System.Runtime.InteropServices.COMException (0x80004005): > Impossible > de terminer cette opération. > Essayez de nouveau. > at > Microsoft.SharePoint.Library.SPRequestInternalClass.OpenWeb(String > bstrUrl, > String& pbstrServerRelativeUrl, String& pbstrTitle, String& > pbstrDescription, Guid& pguidID, UInt32& > pnAuthorID, > UInt32& pnLanguage, UInt32& pnLocale, UInt16& pnTimeZone, Boolean& > bTime24, > Int16& pnCollation, UInt32& pnCollationLCID, Int16& pnCalendarType, > Int16& > pnAdjustHijriDays, Int16& pnMeetingCount, Int32& plFlags, Boolean& > bConnectedToPortal, Int32& plWebTemplateId, Int16& pnProvisionConfig, > String& pbstrDefaultTheme, String& > pbstrDefaultThemeCSSUrl, String& pbstrAlternateCSSUrl, String& > pbstrCustomJSUrl, String& pbstrAlternateHeaderUrl, Int32& > pAnonymousState, > Boolean& bUserIsSiteAdmin, Boolean& bHasUniquePerm) > at Microsoft.SharePoint.Library.a.a(String A_0, String& > A_1, > String& A_2, String& A_3, Guid& A_4, UInt32& A_5, UInt32& A_6, UInt32& > A_7, > UInt16& A_8, Boolean& A_9, Int16& A_10, UInt32& > A_11, Int16& A_12, Int16& A_13, Int16& A_14, Int32& A_15, Boolean& > A_16, Int32& A_17, Int16& A_18, String& A_19, String& A_20, String& > A_21, String& A_22, String& A_23, Int32& A_24, Boolean& A_25, Boolean& > A_26) ************************************ > > Quelqu'un at'il déjà eu quelque chose de comparable ?. > > Merci > > Cdt, > > SD >
Julien Bakmezdjian [MS]
Bonjour,
Si votre application est dans un dossier exclu, je suis étonné de voir que l'appel à GetContextWeb marche bien... Pour moi, il aurait mieux vallu placer l'application dans le dossier _layouts (l'appli est alors accessible depuis des URLs comme http://serveur/sites/site01/_layouts/app/default.aspx ou http://serveur/sites/site02/_layouts/app/default.aspx). Par ailleurs, tout objet SPWeb ouvert avec un OpenWeb *doit* être fermé à la fin par un .Dispose() (cela n'est *pas* vrai pour des objets ouverts avec GetContextWeb).
Mais je ne suis pas sûr que tout cela soit lié à votre message d'erreur...
Cordialement,
Julien Bakmezdjian
"SD" wrote in message news:
Bonjour,
J'utilise un webControl au sein d'une page aspx située dans un répertoire du site exclu. Ce WebControl nécessite de parcourir l'ensemble des SPWeb pour obtenir leur titre et leur URL. Depuis quelque temps j'ai une erreur sur ce type de code:
[DefaultProperty("Text"), ToolboxData("<{0}:InfoBar runat=server></{0}:InfoBar>")] public class SiteLinkBar : System.Web.UI.WebControls.WebControl { private Guid id; public SiteLinkBar() {} public void SetWebID(Guid id) { this.id = id; } protected override void Render(HtmlTextWriter output) { SPWeb web = null; try { if (this.id.CompareTo(Guid.Empty) == 0) //web = Microsoft.SharePoint.WebControls.Navigation.GetContextWeb(System.Web.HttpContext.Current); web = Microsoft.SharePoint.WebControls.SPControl.GetContextWeb(this.Context); else { //SPSite site = Microsoft.SharePoint.WebControls.Navigation.GetContextSite(System.Web.HttpContext.Current); SPSite site = Microsoft.SharePoint.WebControls.SPControl.GetContextSite(this.Context); site.CatchAccessDeniedException = false; web = site.OpenWeb(this.id); }
Quelqu'un at'il déjà eu quelque chose de comparable ?.
Merci
Cdt,
SD
Bonjour,
Si votre application est dans un dossier exclu, je suis étonné de voir que
l'appel à GetContextWeb marche bien... Pour moi, il aurait mieux vallu
placer l'application dans le dossier _layouts (l'appli est alors accessible
depuis des URLs comme http://serveur/sites/site01/_layouts/app/default.aspx
ou http://serveur/sites/site02/_layouts/app/default.aspx).
Par ailleurs, tout objet SPWeb ouvert avec un OpenWeb *doit* être fermé à la
fin par un .Dispose() (cela n'est *pas* vrai pour des objets ouverts avec
GetContextWeb).
Mais je ne suis pas sûr que tout cela soit lié à votre message d'erreur...
Cordialement,
Julien Bakmezdjian
"SD" <raspoutine65@hotmail.com> wrote in message
news:uc93ayuBGHA.216@TK2MSFTNGP15.phx.gbl...
Bonjour,
J'utilise un webControl au sein d'une page aspx située dans un répertoire
du site exclu.
Ce WebControl nécessite de parcourir l'ensemble des SPWeb pour obtenir
leur titre et leur URL.
Depuis quelque temps j'ai une erreur sur ce type de code:
[DefaultProperty("Text"),
ToolboxData("<{0}:InfoBar runat=server></{0}:InfoBar>")]
public class SiteLinkBar : System.Web.UI.WebControls.WebControl
{
private Guid id;
public SiteLinkBar()
{}
public void SetWebID(Guid id)
{
this.id = id;
}
protected override void Render(HtmlTextWriter output)
{
SPWeb web = null;
try
{
if (this.id.CompareTo(Guid.Empty) == 0)
//web =
Microsoft.SharePoint.WebControls.Navigation.GetContextWeb(System.Web.HttpContext.Current);
web =
Microsoft.SharePoint.WebControls.SPControl.GetContextWeb(this.Context);
else
{
//SPSite site =
Microsoft.SharePoint.WebControls.Navigation.GetContextSite(System.Web.HttpContext.Current);
SPSite site =
Microsoft.SharePoint.WebControls.SPControl.GetContextSite(this.Context);
site.CatchAccessDeniedException = false;
web = site.OpenWeb(this.id);
}
Si votre application est dans un dossier exclu, je suis étonné de voir que l'appel à GetContextWeb marche bien... Pour moi, il aurait mieux vallu placer l'application dans le dossier _layouts (l'appli est alors accessible depuis des URLs comme http://serveur/sites/site01/_layouts/app/default.aspx ou http://serveur/sites/site02/_layouts/app/default.aspx). Par ailleurs, tout objet SPWeb ouvert avec un OpenWeb *doit* être fermé à la fin par un .Dispose() (cela n'est *pas* vrai pour des objets ouverts avec GetContextWeb).
Mais je ne suis pas sûr que tout cela soit lié à votre message d'erreur...
Cordialement,
Julien Bakmezdjian
"SD" wrote in message news:
Bonjour,
J'utilise un webControl au sein d'une page aspx située dans un répertoire du site exclu. Ce WebControl nécessite de parcourir l'ensemble des SPWeb pour obtenir leur titre et leur URL. Depuis quelque temps j'ai une erreur sur ce type de code:
[DefaultProperty("Text"), ToolboxData("<{0}:InfoBar runat=server></{0}:InfoBar>")] public class SiteLinkBar : System.Web.UI.WebControls.WebControl { private Guid id; public SiteLinkBar() {} public void SetWebID(Guid id) { this.id = id; } protected override void Render(HtmlTextWriter output) { SPWeb web = null; try { if (this.id.CompareTo(Guid.Empty) == 0) //web = Microsoft.SharePoint.WebControls.Navigation.GetContextWeb(System.Web.HttpContext.Current); web = Microsoft.SharePoint.WebControls.SPControl.GetContextWeb(this.Context); else { //SPSite site = Microsoft.SharePoint.WebControls.Navigation.GetContextSite(System.Web.HttpContext.Current); SPSite site = Microsoft.SharePoint.WebControls.SPControl.GetContextSite(this.Context); site.CatchAccessDeniedException = false; web = site.OpenWeb(this.id); }