SharePoint au Quotidien

 

Retour page Accueil
Remonter

 

 

 

 

 

 

 

 

Utilisation et Déploiement des

‘Dashboards’[1] Personnels


Julien Lefebvre (ho.jlefebvre@cma-cgm.com)
Janvier 2003

 

Introduction.

Le but de ce document est d’expliquer comment utiliser les "Dashboards Personnels / Tableau de Bord " de Sharepoint pour implémenter facilement un système de Tableau de Bord personnalisable par l’utilisateur.

NOTE : J’utilise une version anglaise de Sharepoint Portal Server donc veuillez m’excuser si j’utilise certains mots anglais.

 

Comment créer un "Dashboard Personnel".

Quand vous êtes coordinateur d’un Workspace Sharepoint vous pouvez créer votre " Tableau de Bord Personnel". Dans l’onglet ‘Management’ sous ‘Personal Dashboards’ apparaît un lien ‘Create a new personal dashboard’. Ce lien permet de créer un Dashboard différent des dashboards traditionnels. Première différences le Tableau de Bord /Dashboard est créé dans le sous-répertoire ‘Dashboards’ de votre workspace. Ensuite le Tableau de Bord / Dashboard qui vient d’être créé est entièrement vierge comme si on venait de créé un workspace vide.

Le script qui va vous être présenté permet de créer un ‘Tableau de Bord Personnel’ correspondant au login de l’utilisateur à partir d’un ‘Tableau de Bord’ modèle.

Le Tableau de Bord sera créé dans un répertoire correspondant au domaine de l’utilisateur, le nom du Tableau de Bord correspondra à son login.

Exemple : M. Dupond appartenant au domaine MyDomain avec le login ldupond aura son ‘Tableau de Bord Personnel’ dans :

http://servername/workspace/dashboards/mydomain/ldupond/

Le principe est simple, nous allons utiliser un script qui permet à l’utilisateur de créer son ‘Tableau de Bord Personnel’.

 

Création d’un "Dashboard Personnel" par script.

Le script ci-dessous permet de créer un ‘Dashboard Personnel’ correspondant au login de l’utilisateur à partir d’un ‘Dashboard’ modèle. Le Dashboard sera créé dans un répertoire correspondant au domaine de l’utilisateur, le nom du Dashboard correspondra à son login.

Exemple : M. Dupond appartenant au domaine MyDomain avec le login ldupond aura son ‘Dashboard Personnel’ dans :

http://servername/workspace/dashboards/mydomain/ldupond/

Attention : M. Dupond doit avoir les droits coordinateurs sur le répertoire mydomain avant l’exécution du script. Ces droits doivent exister que sur le répertoire mydomain et l’accès en lecture au répertoire dashboard pour M. Dupond doit être enlevé. Le Script par la suite modifiera les sécurités des sous répertoires de mydomain pour ne donner l’accès qu’à son propriétaire. Ainsi les droits de coordinateurs attribués à M. Dupond n’auront aucune influence sur le reste du site.

Code:

On Error Resume Next

Err.Clear

sServerName = "myserver"

urlSample = "http://servername/workspace/dashboards/modele"

sLogonUser = Request.ServerVariables("LOGON_USER")

iSlash = InStr(sLogonUser, "\")

If Not iSlash = 0 Then

      sDomainName = UCase(Left(sLogonUser, iSlash - 1))

      sLogonUser = UCase(Mid(sLogonUser, iSlash + 1))

End If

strFolderPath = "http://" & Request.ServerVariables("HTTP_HOST") & "/" & "workspace" & "/Dashboards/" & sDomainName & "/" & sLogonUser

Set Folder = CreateObject("CDO.KnowledgeFolder")

Folder.DataSource.Open urlSample

Folder.Copy(strFolderPath)

Set Folder = nothing

ReplacePermission Replace(strFolderPath, Request.ServerVariables("HTTP_HOST"), sServerName), CStr(Request.ServerVariables("LOGON_USER"))

Sub ReplacePermission (FolderPath, UserName)

      Set toFolder = CreateObject ("CDO.KnowledgeFolder")

      toFolder.DataSource.Open FolderPath, ,adModeReadWrite

      toFolder.RolesAreInherited = 0

      arPermissions = Array("MyDomain\AdminServer", UserName)

      toFolder.CoOrdinators = arPermissions

      toFolder.DataSource.Save

      set toFolder = Nothing

End Sub


 

Restriction des droits d’un utilisateur sur son "Dashboard Personnel".

Suite à l’exécution du script ci-dessus l’utilisateur possède un ‘Dashboard Personnel’ dont-il est coordinateur. Le problème est de restreindre les droits de l’utilisateur pour qu’il ne puisse pas modifier le contenu des Webparts ou certaines propriétés de son dashboard. Pour cela nous allons intercepter l’appel des fichiers XSL pour leur donner des fichiers restreignant les droits de l’utilisateur.

Les fichiers dashboard.asp appelle le fichier dbview_ie.xsl ou dbview.xsl en fonction du type de navigateur (IE 5.5+ ou non).

 

Code appelant les fichiers XSL :

If ((lBrowserType And BROWSER_IE) > 0 And (( GetBrowserType() And BROWSER_MAJORVERMASK) >= BROWSER_IE5 )) Then    

      ' Add a node for IE 5.5 identification

      If ((lBrowserType And BROWSER_MINORVERMASK) >= 5) Then

            Dim nodeIE55

            Set nodeIE55 = xmlDashboard.createElement( "BrowserIE55OrGreater" )

            nodeSettings.appendChild nodeIE55

      End If

      ' Use our up-level XSL: dbview_ie.xsl

      CreateFreeThreadedXMLDOMFromFile "dbview_ie.xsl", xslView

Else

      ' Use our downlevel XSL: dbview.xsl.

      CreateFreeThreadedXMLDOMFromFile "dbview.xsl", xslView

End If

 

Le principe est simple, nous effectuons un test avant l’appel de la function ‘CreateFreeThreadedXMLDOMFromFile’ qui vérifie si l’utilisateur fait partie groupe des administrateurs du portail.

 

Code modifié :

If ((lBrowserType And BROWSER_IE) > 0 And (( GetBrowserType() And BROWSER_MAJORVERMASK) >= BROWSER_IE5 )) Then    

      ' Add a node for IE 5.5 identification

      If ((lBrowserType And BROWSER_MINORVERMASK) >= 5) Then

            Dim nodeIE55

            Set nodeIE55 = xmlDashboard.createElement( "BrowserIE55OrGreater" )

            nodeSettings.appendChild nodeIE55

      End If

      ' Use our up-level XSL: dbview_ie.xsl

 

      'Test si la page appelé est un dashboard personnel

If Left(UCase(Request.ServerVariables("URL")), 21) = UCase("/workspace/Dashboards") Then

            sLogonUser = Request.ServerVariables("LOGON_USER")

            iSlash = InStr(sLogonUser, "\")

            If Not iSlash = 0 Then

                  sDomainName = UCase(Left(sLogonUser, iSlash - 1))

                  sLogonUser = UCase(Mid(sLogonUser, iSlash + 1))

            End If           

            If IsMemberOf(sDomainName, sLogonUser, "AdminPortail") Then

'l’utilisateur fait parti des administrateur du portail on appelle le fichier classique de mise en page

 

CreateFreeThreadedXMLDOMFromFile "dbview_ie.xsl", xslView

            Else

'l’utilisateur ne fait pas parti des administrateur du portail on appelle une version restreinte du fichier de mise en page du dashboard

 

CreateFreeThreadedXMLDOMFromFile "dbview_ie.xsl", xslView

            End If

      Else

CreateFreeThreadedXMLDOMFromFile "dbview_ie_restricted.xsl", xslView

      End If

Else

      ' Use our downlevel XSL: dbview.xsl.

      'Test si la page appelé est un dashboard personnel

If Left(UCase(Request.ServerVariables("URL")), 21) = UCase("/workspace/Dashboards") Then

 

            sLogonUser = Request.ServerVariables("LOGON_USER")

            iSlash = InStr(sLogonUser, "\")

 

            If Not iSlash = 0 Then

                  sDomainName = UCase(Left(sLogonUser, iSlash - 1))

                  sLogonUser = UCase(Mid(sLogonUser, iSlash + 1))

            End If           

 

            If IsMemberOf(sDomainName, sLogonUser, "AdminPortail") Then

'l’utilisateur fait parti des administrateur du portail on appelle le fichier classique de mise en page

 

                  CreateFreeThreadedXMLDOMFromFile "dbview.xsl", xslView

            Else

'l’utilisateur ne fait pas parti des administrateur du portail on appelle une version restreinte du fichier de mise en page du dashboard

 

                  CreateFreeThreadedXMLDOMFromFile "dbview_restricted.xsl", xslView

            End If

      Else

                  CreateFreeThreadedXMLDOMFromFile "dbview.xsl", xslView

      End If

End If

 

Les fichiers "dbview_restricted.xsl" et "dbview_ie_restricted.xsl" correspondent aux fichiers de mise en page du "Dashboard Personnel" de l’utilisateur. Ces fichiers peuvent donc par exemple supprimer le lien ‘Settings’ pour que l’utilisateur ne puisses pas modifier les propriétés de son Dashboard.

De même, il est conseillé de faire le même système concernant le fichier "dbcontent.asp" qui appelle le fichier de mise en page "dbcontent.xsl" et effectuer le même test pour appeler un fichier "dbcontent_restricted.xsl" pour la visualisation du contenu du Dashboard de l’utilisateur. Pour ma part, le fichier "dbcontent_restricted.xsl" affiche uniquement la liste des webparts sans pouvoir entrer dans le détail ainsi que les liens vers les catalogues de webparts disponibles (cf copie d’écran ci-dessous). Il est recommandé de ne pas laissé à l’utilisateur la possibilité de modifier ses webparts ou d’en créé de nouvelles pour des raisons de sécurité.

Aperçu de la page Content visible par l’utilisateur

 

Note : Vous pouvez créé un catalogue de webparts que vous laissez à disposition de l’utilisateur pour son "Dashboard Personnel" (cf Documentation Microsoft ‘Deploying: Creating a Corporate Web Part Catalog’).


 

Détection automatique de l’existence du "Dashboard Personnel".

Maintenant que vous avez le script de création du "Dashboard Personnel" de l’utilisateur et que vous avez restreint les possibilités de modification de ce Dashboard il reste à créé une webpart proposant à l’utilisateur de créer ce Dashboard.

Le code teste si le Dashboard existe, s’il existe il propose le lien permettant d’y accéder sinon il propose un lien permettant de le créer.

 

Code permettant de tester si le Dashboard existe :

On Error Resume Next

Err.Clear

 

sLogonUser = Request.ServerVariables("LOGON_USER")

iSlash = InStr(sLogonUser, "\")

 

If Not iSlash = 0 Then

      sDomainName = UCase(Left(sLogonUser, iSlash - 1))

      sLogonUser = UCase(Mid(sLogonUser, iSlash + 1))

End If

 

strFolderPath = "http://" & Request.ServerVariables("HTTP_HOST") & "/" & "workspace" & "/Dashboards/" & sDomainName & "/" & sLogonUser

 

Set oFolder = CreateObject("CDO.KnowledgeFolder")

oFolder.DataSource.Open strFolderPath

     

If (Hex(Err.Number) = 80040E19) OR (Hex(Err.Number) = 80040E98) Then

      CheckFolderExists = 0

Else

      CheckFolderExists = 1

End If

 


 

[1] Tableau de bord

 

EROL / truc : 21-févr.-2004 19:05:19 +0100

 

Retour page Accueil ] Remonter ]

Envoyez un courrier électronique à EROL GIRAUDY (attention nospam dans l'E-mail) pour toute question ou remarque concernant ce site Web et visitez la rubrique Condition Utilisation et CNIL. Copyright © 2002 EROL (les sigles et logos ci-après sont la propriété de : Microsoft, Supinfo, Adobe, Compaq, HP, Sybari, Veritas, Moreover, K-map, Vyapin, Plumtree, Ixos, TooStore, K-Map, eRoom, DocKIT,NQL, Only4gurus, Nsius, Sharepointexperts, Iora, Erol, KCura, FrontPages, Nsi, Frontlook, IBuySpyPortal, moreover, slipstick, networknowledge, clubsps.org )
Dernière modification : samedi, 21. février 2004 19:05