Obtenir le site SharePoint à partir d’un hyperlien vers un objet SSRS

Il y a plusieurs situations où il peut être pratique de connaître l’URL d’un site SharePoint à partir d’un hyperlien ressemblant à http://server/sites/sitecollection/site1/site2/folder1/folder2/report.rdl.

La difficulté réside dans le fait qu’un hyperlien vers un objet SSRS peut contenir plusieurs niveaux de répertoires avant d’arriver au fichier.

Si votre code s’exéucte sur le serveur, c’est plutôt simple:

using (SPSite pSiteCollection = new SPSite(sFileUrl))
{
SPWeb pWeb= pSiteCollection.OpenWeb();
string sWebUrl = pWeb.Url; // Voici l’URL du site SharePoint
}

Cependant, si votre code s’exécute plutôt dans un programme client, vous ne pourrez pas utiliser l’API de SharePoint. Vous devez vous tourner vers les services Web.

Voici un extrait du code que j’ai utilisé. Il y a peut-être une meilleure manière d’y arriver.

J’utilise la méthode GetItemType de ReportService2006 afin de déterminer le type de l’objet (Report, Folder, Site etc.). J’utilise aussi un dictionnaire afin de garder une cache (membre de la classe).

public string GetReportSiteUrl(string sReportUrl)
{
string sSiteUrl = null;
string sFolderOrDLUrl = GetParentUrl(sReportUrl);

if (!String.IsNullOrEmpty(sFolderOrDLUrl))
{
if (mpDicDLSite.ContainsKey(sFolderOrDLUrl))
{
sSiteUrl = mpDicDLSite[sFolderOrDLUrl];
}
else
{
ReportService2006.ItemTypeEnum eItemType = ReportService2006.ItemTypeEnum.Unknown;
ReportService2006.ReportingService2006 pSSRS = this.SSRSWebService;
string sCurUrl = GetParentUrl(sFolderOrDLUrl);

while (!String.IsNullOrEmpty(sCurUrl) && (eItemType = pSSRS.GetItemType(sCurUrl)) != ReportService2006.ItemTypeEnum.Site)
{
sCurUrl = GetParentUrl(sCurUrl);
}

if (!String.IsNullOrEmpty(sCurUrl))
{
sSiteUrl = sCurUrl;
mpDicDLSite.Add(sFolderOrDLUrl, sCurUrl); // Remember
}
}
}

return sSiteUrl;
}

private string GetParentUrl(string sUrl)
{
int nLastSlash = sUrl.LastIndexOf(‘/’);

if (nLastSlash != -1)
{
return sUrl.Substring(0, nLastSlash);
}
else
{
return null;
}
}

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s