Catégorie: API

05/06/2009

Permalink 08:17:00, Catégories: Récapitulatif .NET, Récapitulatif, Récapitulatif Office, API, 139 mots   French (FR) , Philippe Vialatte

[.NET][Office] [Sharepoint] Gérer les formules d'une liste

Que se passe-t'il quand, alors que 150 sites ont été déployés a partir d'un Template, on se rends compte qu'une formule ne fonctionne pas correctement ?

(Ne pas répondre: t'avais qu'a utiliser des types de contenu, pour un ensemble de raisons, c'était exclus... ;) )

Parce grosso modo, c'était mon petit truc rigolo de la semaine...

Donc, comme d'habitude, je passe une petite heure dans la msdn, jusqu'a trouver *the* solution, dans les champs de la classe SPFieldCalculated.

Pour ceux qui seraient intéressés par ce genre de manip, cela se fait simplement comme cela :

    SPList list = web.Lists["Liste1"];
   
SPFieldCalculated calc = list.Fields["Column3"] as SPFieldCalculated;
   
calc.Formula = "=IF(Column1=Column2, \"OK\", \"Not OK\")";
   
calc.Update();

Il faut convertir le champ en SPFieldCalculated, car Fields renvoie une collection de SPField, lesquels n'ont pas la colonne Formula.

Vous devez être identifié pour poster un commentaire.

19/05/2009

Permalink 09:41:00, Catégories: Récapitulatif .NET, Récapitulatif, Récapitulatif Office, .Net, SharePoint, API, 554 mots   French (FR) , Philippe Vialatte

[.NET][Office] Créer des sites et des collections de sites avec l'API Sharepoint

(Si une personne suit, oui, je suis en train de me taper un petit outil pour automatiser la création de mes sites...et ca commence a bien marcher)

Dans mes aventures avec l'API, encore un gros arrachage de cheveux en vue ;)

» Lire la suite!

Vous devez être identifié pour poster un commentaire.

18/05/2009

Permalink 10:10:00, Catégories: Récapitulatif .NET, Récapitulatif, SharePoint, API, 324 mots   French (FR) , Philippe Vialatte

[.NET] Petites finesses de l'API Sharepoint

Ca faisait un moment que je n'avais plus fait de développement avec Sharepoint, et en m'y remettant, j'avais oublie deux petites finesses, qui peuvent éventuellement provoquer l'apparition spontanée de cheveux blancs, alors...pour ne plus les oublier

1. BreakRoleInheritance et AllowUnsafeUpdates

Lorsque l'on appelle BreakRoleInheritance, la référence au SPWeb courant est invalidée, ce qui provoque un reset de AllowUnsafeUpdates a false. Ce sera aussi le cas lorsque l'on changera le nom ou l'URL du site (après avoir appelé Update), ou lorsque l'on appellera BreakInheritance(),ResetRoleInheritance(). Par conséquent, a chaque appel a BreakRoleInheritance, il faut penser a sauvegarder préalablement la valeur de dans un booléen, et le remettre a sa valeur d'origine après.

 bool updateRights = _web.AllowUnsafeUpdates;
 
_web.BreakRoleInheritance(false);
 
_web.AllowUnsafeUpdates = updateRights;

2. RunWithElevatedPrivileges et le site courant

RunWithElevatedPrivileges est super utile comme fonction lorsque l'on doit exécuter une portion de code avec des privilèges admin. Le seul petit piège de cette fonction, qui va exécuter une portion de code comme si elle tournait avec l'identifiant du pool d'application, est que, si on essaye de manipuler une référence a un site, a un web ou a une liste récupérée depuis l'extérieur de la zone de privilèges élevés, cette référence aura toujours les droits qu'avaient l'utilisateur AVANT RunWithElevatedPrivileges.

Donc, pour que cela fonctionne correctement, il faudra recharger les sites, web, listes et compagnie depuis l'intérieur de la zone impersonnée...

SPSecurity.RunWithElevatedPrivileges(delegate {  
   using (SPSite site = new SPSite(siteUrl)) {
     
using (SPWeb tmpWeb = site.OpenWeb("/")) {
        
SPList MaListe = tmpWeb.Lists["MaListe"]);
      }
   }
});

ou sinon, si on préfère :

Guid currentWebId = web.ID;
Guid currentSiteId = web.Site.ID;

SPSecurity.RunWithElevatedPrivileges(delegate {   
   using (SPSite site = new SPSite(currentSiteId)) {
      using (SPWeb tmpWeb = site.OpenWeb(currentWebId)) {
         SPList MaListe = tmpWeb.Lists["MaListe"]);
      }
   }
});

Voila, avec un peu de chance, j'y penserais tout de suite la prochaine fois (mais bien sur...)

Vous devez être identifié pour poster un commentaire.

04/05/2009

Permalink 12:29:00, Catégories: Récapitulatif .NET, Récapitulatif Office, SharePoint, API, 269 mots   French (FR) , Philippe Vialatte

[.NET][Office] [Sharepoint]Gérer les pièces jointes d'un SPListItem

Comme la question avait été posée sur le forum, une petite fonction pour gérer les pièces jointes a un Item.

Avec Sharepoint, les objets de type SPListItem ont une propriété en lecture seule Attachments, qui retourne un objet de type SPAttachmentCollection

public SPAttachmentCollection Attachments { get; }

Ajouter ou supprimer une nouvelle pièce jointe se fait assez simplement, du moment que l'on a un tableau de byte, soit :

    SPListItem item;
   
byte[] content;
   
string name;

   
item.Attachments.AddNow(name, content);
   
// utiliser AddNow permets de ne pas avoir à appeler item.Update(); 
    item.Attachments.DeleteNow(name);
   
// utiliser DeleteNow permets de ne pas avoir à appeler item.Update();

Attacher le contenu d'un fichier venant du site Sharepoint se fait aussi assez simplement :

   SPFile file = myWeb.Folders("monDossier").Files("Monfichier");
   string fileName = file.Name;
   byte[] fileContent = file.OpenBinary();

La ou cela devient beaucoup plus rigolo, c'est lorsque l'on veut lister les attachments...

En effet, si on fais un foreach sur les attachements, on ne vas pas retourner des objets SPAttachment (par exemple), ni même SPFile, mais...le nom du fichier :-\

Apres un peu de recherche, ces items sont stockés dans un sous-répertoire de la liste, nommé Attachments, les fichiers étant exactement stockes dans un répertoire identifié par l'ID de l'item de la liste concerné. On peut donc y accéder ainsi :

    SPFolder folder = site.Folders("Lists").
        SubFolders(listItem.ParentList.Title).
        SubFolders("Attachments").
        SubFolders(listItem.ID.ToString());

   
foreach (SPFile file in folder.Files) {
       
// manipulations diverses et variées sur les fichiers
    }

(NB. : Ca a l'air trivial comme ca, mais à l'époque, ca m'a couté pas mal de cheveux ;) )

Vous devez être identifié pour poster un commentaire.

30/03/2009

Permalink 10:22:00, Catégories: Récapitulatif .NET, Récapitulatif, SharePoint, API, 146 mots   French (FR) , Philippe Vialatte

[.NET] [Sharepoint] Enumérer les répertoires d'une liste documentaire

Je me suis récemment un peu pris la tête sur un problème, en apparence simple, mais pour lequel l'API m'a enduit d'erreur.

Mon problème  de base était simple, je voulais juste lister les répertoires d'une liste de documents (pour supprimer des droits, si vous voulez tout savoir ;) ).

Pour cela, je jettes un oeil a l'API, je vois un joli list.Folders...sauf que List.Folders renvoie une liste...d'items :-\.

Après quelques essais, la bonne propriété est donc la propriété SubFolders du RootFolder de notre liste, pour un résultat final ressemblant a cela:

foreach (SPList list in SPContext.Current.Web.Lists) {
   
if (list.BaseType == SPBaseType.DocumentLibrary) {
       
if (list.Title == reportsLib || list.Title == importLib) {
           
foreach (SPFolder folder in list.RootFolder.SubFolders) {
               
try
                   
RemoveFolderPermissionsForGroup(siteAddress, folder, groupName);
                }
catch (Exception ex) {
                   
LogFactory.LogError("Could not remove " + groupName + " from folder", ex);
                }
            }
        }
    }
}

Vous devez être identifié pour poster un commentaire.

11/02/2009

Permalink 13:41:00, Catégories: Récapitulatif .NET, .Net, SharePoint, API, Admin, 445 mots   French (FR) , Philippe Vialatte

[.NET] [Sharepoint] mise a jour des droits des utilisateurs sur n sites

Mon petit problème de la semaine en SharePoint a été le suivant...

A 9h du matin, le lundi, un ensemble d'utilisateurs a...change de groupe AD...

Attention, leur groupe AD n'a pas été renommé, mais pour des raisons d'organisation, ces utilisateurs ont été bougés d'un groupe AD a l'autre. Or, ce groupe AD avait la responsabilité d'administrer n sites Sharepoint...joie

Ma mission, que je n'avais pas d'autre choix que d'accepter, a donc été de supprimer le groupe précédent du groupe défini comme owner des sites, et de le remplacer par un autre groupe...sur une cinquantaine de sites...

» Lire la suite!

Vous devez être identifié pour poster un commentaire.

Liste des blogs

Blog de Philippe Vialatte

Ce blog contient:
- des bouts de code
- quelques news
- des états d'âme

....et des fois, quelque chose d'intéressant ;)

Blog roll

Profil MVP

Réseaux sociaux



Catégories


Rechercher

<  Mai 2012  >
Lun Mar Mer Jeu Ven Sam Dim
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Syndiquez ce blog XML

Articles :

Commentaires :

 
 
 
 
Partenaires

Hébergement Web