27 avril 2006

Comment ouvrir des document de SharePoint dans une nouvelle fenêtre

Objet
Documentation sur la modification effectuée sur le portail, pour permettre aux utilisateurs du portail d’ouvrir les documents dans une nouvelle fenêtre du navigateur.

1 Contexte
Actuellement tous les documents de SharePoint exceptés ceux issus de la gamme Microsoft Office, s’ouvrent dans la fenêtre courante. Cette fonctionnalité de SharePoint pose des désagréments aux utilisateurs. En effet, ces derniers en fermant le document, ferme le navigateur, et perde tous « l’historique » de navigation.
2 Solutions envisagées
Plusieurs solutions ont été envisagées :
2.1 Clef de registre
Supprimer la clef de registre correspondant à l’extension du document dans l’entrée suivante [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Content Type\] au niveau du poste client. Cette modification sera à déployer par script + GPO sur les postes clients.

Cette solution est la plus couramment utilisée.

Plus d’infos :
Handling MIME Types in Internet Explorer
MIME Type Detection in Internet Explorer
2.2 Contrôle ActiveX
SharePoint offre une solution pour que les documents soient éditables et ouvrables par des applications tierces. Cette solution est utilisée notamment pour les documents issus de la gamme Microsoft Office. En effet, le contrôle ActiveX gérant les extensions Office, est déployé dans la dll OWSSUPP.DLL à l’emplacement Local_Drive :\Program Files\Microsoft Office\OFFICE11 directory.

Cette solution est assez complexe à mettre en œuvre, et il existe aucun exemple (autre que celui de Microsoft) implémentant cette solution.

Plus d’infos :
Adding a Document Template, File Type, and Editing Application to a Site Definition
OpenDocuments Control

2.3 Modification d’un script SharePoint
Lorsqu’un utilisateur clique sur un lien hypertexte d’une bibliothèque de document, un évènement onclick est levé et attrapé par la fonction DispDocItemEx du fichier javascript ows.js.

Cette solution est la plus simple à mettre en place.
3 Solution retenue
La solution retenue consiste à la modification du fichier javascript ows.js.
3.1 Implémentation
L’implémentation est très simple. Il suffit de réaliser dans le corps de la fonction une condition qui vérifie l’extension du fichier, ensuite il suffit de spécifier la propriété target à l’objet qui a envoyé l’évènement.

Voici un exemple :

function DispDocItemEx(ele, fTransformServiceOn, fShouldTransformExtension, fTransformHandleUrl, strProgId)
{
if (!browseris.ie || !browseris.win32)
{
itemTable = FindSTSMenuTable(ele);
if (itemTable == null)
return true;
var createCtx = new Function("setupMenuContext(" +
itemTable.getAttribute("CTXName") + ");");
createCtx();
var RootFolder = GetRootFolder(currentCtx);
if (itemTable.getAttribute("FSObjType") != 1 &&
currentCtx.displayFormUrl != null)
{
ele.href = currentCtx.displayFormUrl+"?ID="+
itemTable.getAttribute("ItemId") +
"&Source=" + GetSource() + RootFolder;
}
return true;
}

var stsOpen;
var szHref;
var szExt;
var fRet;
var ele;
var tblFileDlg = document.getElementById("FileDialogViewTable");
if (tblFileDlg != null)
{
event.cancelBubble = false;
event.returnValue = false;
return;
}
szHref = ele.href;
szExt = SzExtension(szHref);
if (szExt == "pdf")
{
ele.target = "_blank";
}
if(strProgId != '')
stsOpen = StsOpenEnsureEx(strProgId);
if (stsOpen == null)
{
if (fTransformServiceOn == 'TRUE' &&
fShouldTransformExtension == 'TRUE' &&
fTransformHandleUrl == 'TRUE')
{
itemTable = FindSTSMenuTable(ele);
if (itemTable == null)
return;
event.cancelBubble = true;
event.returnValue = false;
var getHttpRoot = new Function("return " + itemTable.getAttribute("CTXName") + ".HttpRoot;");
GoToPage(getHttpRoot() + "/_layouts/" + L_Language_Text +
"/htmltrverify.aspx?doc=" + escapeProperly(szHref));
}
return;
}
fRet = stsOpen.ViewDocument2(window, szHref);
stsOpen = null;
if (fRet)
{
event.cancelBubble = true;
event.returnValue = false;
}
return;
}

3 commentaires:

Anonyme a dit…

Alors, ce bout de script...moi ca me sauve la peau ! c'est vrai, je ne développe pas mais ca ne m'empeche pas de faire du site.
heureusement qu'il y a des gens comme toi pour aider les pauvres néophytes. MERCIIIII !!!

Anonyme a dit…

Merci beaucoup,
Un expert sharepoint s'y est cassé les dents.
Félicitations.

J'ai besoin d'experts Sharepoint pour des dvpts plus lourds, si c'est possible, merci de me contacter sur cooletouf@hotmail.com

Unknown a dit…

Merci pour ce bout de script qui m'a bien aidé, mais seulement, je viens de migrer sur WSS 3.0, et la, le fichier ows.js est tout à fait différent, donc je ne sais pas comment m'y prendre pour récupérer cette fonctionnalité.

Pouvez vous m'aider ?

Merci