lundi 15 décembre 2008

TopTools 01

Après les LinksList  pour regrouper les liens intéressants et le tout nouveau SharePointations, voici venir les TopTools! :) pour recenser un peu les bon outils à droite à gauche, commençons :

Général

lundi 17 novembre 2008

Anseco

Anseco : ANALYZE SECURITY CONFIG
Petit utilitaire qui permet de lister les comptes utilisateurs dans 4 catégories :
  1. Groupes locaux
  2. Pools d'application IIS
  3. Services Windows
  4. Sites Sharepoint (uniquement sur l'application par défaut sur le port 80)
Utile lorsque que l'on veut comparer ce qui a changé dans les configurations de sécurité entre deux installations d'un programme

A voir sur Codeplex : http://www.codeplex.com/anseco

jeudi 6 novembre 2008

RadioButtonList uncheckable!

Le composant web RadioButtonList ne permet pas, par défaut, de déselectionner une option déjà sélectionnée (c'est lorsque vous cliquez sur une autre option que celle-çi se déselectionne). J'ai donc créé sur Codeplex un contrôle web qui permet cela : Kax.WebControls.RadioButtonList 

Donc très simplement, avec la propriété booléenne "Required" :
  1. True : commportement par défaut d'un RadioButtonList
  2. False :
    Il n'y a pas d'option presélectionnée par défaut
    Vous pouvez déselectionnée un option déjà sélectionnée

jeudi 30 octobre 2008

Sharepoint et le problème du "slow the first request"

Petit détail pénible à la longue, le parametrage initial des pools d'application SharePoint est configuré pour redémarrer quotidiennement.  Le résultat est que le premier utilisateur du jour à se connecter au Sharepoint peut avoir un temps de réponse plus ou moins long lui faisant dire : "p... ça marche pô cteu' m...!!" (si vous avez une ferme plus ou moins importante avec plein de serveurs associés c'est encore pire).

Ce problème que l'on pourrait appeler "slow the first request" est connu, et l'on peut voir ici et là différentes solutions :
Pour ma part, en dehors du fait que l'on peut éventuellement modifier la planification des pools d'application (non recommandé), j'ai choisi l'option de créer un programme associé à une tâche planifiée, chargé de s'exécuter tous les jours afin de lancer une requête web sur les serveurs.
J'en ai profité pour créer un projet sur Codeplex : http://www.codeplex.com/wsr 

++

samedi 18 octobre 2008

[Sharepoint] Impossible de supprimer une application web

Après moults modifications et triturages de Sharepoint, il peut arriver que vous finissiez par obtenir le message suivant lorsque vous souhaitez supprimer une application web :
 
Impossible de supprimer l'un des objets de l'infrastructure administrative de SharePoint, « Nom de l'application », car d'autres objets en dépendent. Mettez à jour tous ces objets dépendants pour qu'ils pointent vers des objets nuls ou d'autres objets, puis réessayez. Les objets suivants sont dépendants : 
 
Le problème étant qu'aucun objet dépendant n'est indiqué. Je vous détaille donc ici la procédure que j'ai trouvée pour remédier à ce problème en commençant par un avertissement : 

Les opérations décritent ici font intervenir des manipulations au niveau de la base de données de configuration SharePoint (SharePoint_Config), ces manipulations doivent être envisagées avec la plus grande prudence et rigueur afin de prévenir toute instabilité de la plateforme. Ces informations sont décritent ici pour information et ne sont nullement supportées par Microsoft. De plus elles n'engagent en aucune manière la responsabilité de son auteur quant à d'éventuels dysfonctionnement (paf! voilà, c'est comme de la nitro en moins liquide :))


après avoir erré dans le désert aride de l'administration centrale (plus de possibilité de suppression ou de création d'application web, pas d'erreur dans les logs...), et avec un peu de recul, je conseillerait d'emblée l'exécution de l'assistant Configuration des produits et technologies SharePoint. Pour mon cas, celui-ci a permis de faire apparaitre, dans le log application du serveur, le message suivant :

The DELETE statement conflicted with the REFERENCE constraint "FK_SiteMap_Application". The conflict occurred in database "SharePoint_Config", table "dbo.SiteMap", column 'ApplicationId'.
The statement has been terminated.

Après avoir exécuté les SQL Server Profiler sur la base SharePoint_Config j'obtiens le nom du coupable, la procédure stockée proc_dropObject avec l'Id (Guid) de l'objet concerné. J'en profite ici pour signaler que Microsoft a publié l'ensemble des spécifications des protocoles SharePoint, ce qui a permit de comprendre les tenants et la aboutissants de cette procédure stockée. Cette ouverture est tout à fait importante et ne concerne pas uniquement Sharepoint, à voir ici : Open Specifications.

Bref, une ligne orpheline existait dans la table SiteMap et empêchait donc la suppression de mon application web (dans la table Objects). J'ai donc exécuté la procédure stocké proc_dropSiteMap avec en paramètre l'Id (Guid) de mon objet. Puis, revenu dans l'administration centrale, j'ai pu procéder à la supression de mon application web sans difficultés dans "Administration centrale > Gestion des applications > Supprimer une application Web"

++

LinksList 07

.NET

SHAREPOINT

mardi 30 septembre 2008

LinksList 06

.NET


SHAREPOINT

Filtrer un champ recherche dans Sharepoint

Une problématique simple :
Vous avez un champ recherche dans une liste.
Vous voulez, lorsque vous ajoutez ou mettez à jour un élément de cette liste, pouvoir filtrer ce champ recherche (par exemple en n'affichant que des personnes ayant un statut particulier dans la liste liée).

Plusieurs méthodes :
  1. Filtered Lookup Lists in SharePoint : dont le principal inconvénient est d'avoir à mettre les mains dans le javascript à chaque fois, mais ça marche.

  2. Les champs calculés :
    avantage > simple et standard,
    inconvénient > solution incomplète, ne gère pas les mises à jours et suppression, vous êtes donc obligé de complèter avec un custom field (cf. point suivant)

    Allons-y avec un exemple :
    1. vous avez une Liste "Personnes" avec un champ "Statut" (liste de choix, ex : "OK", "PAS OK").
    2. Vous avez une seconde liste "Affectation" avec un champ recherche qui pointe vers votre liste "Personnes". A ce stade, toutes les personnes seront affichées dans votre champ recherche sans distinction de statut.
    3. Vous voulez que ne figure que les personnes ayant le statut "OK". Ajoutez un champ Valeur calculée (calcul basé sur d'autres colonnes) dans votre liste "Personnes" avec la formule =SI(Statut="OK";Titre;"") . En un mot, si le statut de l'élément en cours est "OK", la valeur de ce champ calculé sera le titre de l'élément, sinon il est vide.
    4. Dans votre liste affectation, modifiez votre champ recherche pour qu'il pointe vers votre nouveau champ calculé. Ainsi, quand vous créez une affectation, n'apparaisse dans votre liste de personne que ceux ayant le statut "OK". La moitié du chemin est fait, il faut ensuite compléter avec un custom field qui se chargera de la prise en charge des changements (et oui! si vous modifiez par la suite le statut des personnes )

  3. Un custom Field :
    avantage > fait ce que vous voulez, comme vous voulez.
    inconvénient > compliqué
    Les colonnes personnelles (custom field) avec Sharepoint - Club d'entraide des développeurs francophones
    Développer une colonne lookup personnelle avec de l'AJAX - Club d'entraide des développeurs francophones
    Custom Field Types

lundi 25 août 2008

Voir les pièces jointes dans une page DispForm.aspx

Problème connu : lorsque vous personnalisez une page dispform.aspx avec un formulaire de liste personnalisé, il n'est plus possible de visualisez les pièces jointes.
Une solution est détaillée ici : Marc Davis: Retaining Attachment functionality when using the Custom List Form control in SharePoint 2007 or WSS 3.0 .Une fois la crise cardiaque passée, on envisagera plutôt une solution de ce type : Displaying List Attachments in Custom List Forms - Maarten Eekels's SharePoint blog

mardi 12 août 2008

Multilinguisme dans SharePoint

Le multilinguisme dans SharePoint donc, tout d'abord les composants :

pour WSS 3.0,
Windows SharePoint Services 3.0 Language Pack
Windows SharePoint Services 3.0 Language Pack Service Pack 1 (SP1)

et si vous avez MOSS 2007, il faut ajouter :
Office System Language Packs for SharePoint Server 2007
The 2007 Microsoft Office Servers Language Pack Service Pack 1 (SP1)

à prendre en version anglaise uniquement, car comme le dit ce précieux document "Plan for building multilingual solutions by using SharePoint Products and Technologies", il contient tout un bundle de langages différents contrairement aux autres.

à la suite de quoi, vous disposez dans le formulaire de création d'un site SharePoint de la petite ComboBox suivante vous permettant de sélectionner une langue pour votre site. Toute l'interface du nouveau site sera alors traduite dans la langue choisie :



Après l'interface, il nous faut gérer les contenus qui devront faire l'objet de traductions. Il existe dans SharePoint (et non WSS) la fonctionnalité "Variantes" pour gérer ce cas de figure.

Pour simplifier, lorsque vous utilisez les variantes, vous disposer d'un contenu maître et de différents contenus esclaves.
A chaque modification du contenu maître, une copie est soumise aux différents contenus esclaves, copies qui devront faire l'objet d'une adaptation puis d'une validation avant d'être publiée (workflow de publication). Ce système est utilisé pour gérer les problématiques multilangues dans SharePoint, mais pourrait tout aussi bien être utilisé dans d'autres contextes je vous renvoi à ce post utile Re : [MOSS2007] Multilinguisme standard et ses limites - Forums du site MSDN France

Pour implémenter notre variante (un site principal français, une variante anglaise) , nous allons :
  1. Créer un nouveau site SharePoint en utilisant le modèle "Site de publication avec flux de travail"
  2. Puis au niveau de la collection, dans Paramètres du site > Variantes, rechercher votre site et cliquer sur Ok
  3. Dans Paramètres du site > Étiquettes de variantes, nous allons définir notre contenu maître avec par exemple les paramètres suivants :


  4. Nous créons maintenant une variante esclave,


  5. Nous créons la hiérarchie dans Paramètres du site > Étiquettes de variantes > Créer des hiérchachies


Nous sommes prêt à tester l'édition de contenu,
  1. Si l'on revient sur le site initial, on constate qu'une nouvelle version a été automatiquement créée avec nos paramètres linguistiques
  2. Modifier votre page et cliquer sur "Soumettre pour approbation"

  3. Au bout de quelques instants, vous recevez des notifications concernant les tâches de contrôles et d'approbations des modifications. Vous devez bien sur archiver et approuver le contenu source afin que les variantes, une foi les jobs de réplication exécutés, soient mises à jour.

    Pour mon cas personnel, la mise à jour des variantes passe par l'exécution de l'option "Variantes de mises à jour" (mal traduite puisque ce devrait être "Mises à jour des variantes") dans "Outils" de la "Barre d'outils de la modification de la page"


J'ai découvert cet article alors que j'écrivai celui-ci, ils sont donc très proche : Planet MOSS: Multilingual MOSS mais j'espère tout aussi utile :)

lundi 11 août 2008

Ajout bouton Toolbar + Création d'un lien

Voici un code à insérer dans une page SharePoint pour intégrer un bouton dans une barre d'outils standard sans passer par une Custom Action comme ceci :


Cela est utile notamment lorsque vous avez affiché une vue de données sur un élément de liste (ex: tous les produits d'une catégorie donnée) et que vous voulez pouvoir créer une nouvelle donnée en envoyant l'identifiant de l'élément courant (ex: ajouter un nouveau produit pour une catégorie particulière). C'est la cas qui est détaillé ici mais il pourra être adapter pour tout autre cas de figure.

Tout d'abord le "bouton" en lui-même qui est un simple div avec quelques propriétés de classes css et de comportements :
<div id="NewLink" class="ms-menubuttoninactivehover" hoverinactive="ms-menubuttoninactivehover" hoveractive="ms-menubuttonactivehover" onmouseover="MMU_PopMenuIfShowing(this);MMU_EcbTableMouseOverOut(this, true)"></div>

Ensuite vous positionnez le script suivant qui écrira ce qu'il faut dans le div (positionner ce script juste avant la balise </asp:Content> , c'est à dire juste avant la fin du panel qui contient votre div)
<script language="javascript" type="text/javascript">
var qs = location.search.substring(1, location.search.length);
var args = qs.split("&");
var vals = new Object();
for (var i=0; i < args.length; i++)
{
var nameVal = args[i].split("=");
if(nameVal[0]=="ID")
{
var temp = unescape(nameVal[1]).split('+');
nameVal[1] = temp.join(' ');
document.getElementById("NewLink").innerHTML="<a href='VOTRE_URL?ListId="+nameVal[1]+"'>Nouvel Elément</a>"; }
}
</script>
Il faut bien sûr modifier VOTRE_URL et ListId avec, respectivement, l'url de destination ainsi que le nom du paramètre qui sera traité par la page de destination (plus d'infos dans Valeurs par defaut de contrôles dans un formulaire SharePoint)

Et pour finir une petit lien bien pratique pour encoder/decoder les entités html lors de passage de paramètres dans l'url Querystring parameters

vendredi 8 août 2008

Valeurs par defaut de contrôles dans un formulaire SharePoint

Besoin récurrent lors de la manipulation de formulaire Sharepoint, pouvoir positionner automatiquement la valeur d'une combobox selon un identifiant présent dans la querystring (exemple au hasard :))

Une méthode fournie par Microsoft SharePoint Team Blog : Using Javascript to Manipulate a List Form Field consiste à utiliser un script Javascript qui va se charger d'analyser la querystring et de retrouver le contrôle pour l'initialiser avec la valeur qui va bien

prévoyez donc un fichier "script.js" avec le code suivant :

// This javascript sets the default value of a lookup field identified
// by <<FIELD DISPLAY NAME>> to the value stored in the querysting variable
// identified by <<QUERYSTRING VARIABLE NAME>>

// Customize this javascript by replacing <<FIELD DISPLAY NAME>> and
// <<QUERYSTRING VARIABLE NAME>> with appropriate values.
// Then just paste it into NewForm.aspx inside PlaceHolderMain

_spBodyOnLoadFunctionNames.push("fillDefaultValues");

function fillDefaultValues() {
var qs = location.search.substring(1, location.search.length);
var args = qs.split("&");
var vals = new Object();
for (var i=0; i < args.length; i++) {
var nameVal = args[i].split("=");
var temp = unescape(nameVal[1]).split('+');
nameVal[1] = temp.join(' ');
vals[nameVal[0]] = nameVal[1];
}
setLookupFromFieldName("<<FIELD DISPLAY NAME>>", vals["<<QUERYSTRING VARIABLE NAME>>"]);
}

function setLookupFromFieldName(fieldName, value) {
if (value == undefined) return;
var theSelect = getTagFromIdentifierAndTitle("select","Lookup",fieldName);
// if theSelect is null, it means that the target list has more than
// 20 items, and the Lookup is being rendered with an input element
if (theSelect == null) {
var theInput = getTagFromIdentifierAndTitle("input","",fieldName);
ShowDropdown(theInput.id); //this function is provided by SharePoint
var opt=document.getElementById(theInput.opt);
setSelectedOption(opt, value);
OptLoseFocus(opt); //this function is provided by SharePoint
} else {
setSelectedOption(theSelect, value);
}
}

function setSelectedOption(select, value) {
var opts = select.options;
var l = opts.length;
if (select == null) return;
for (var i=0; i < l; i++) {
if (opts[i].value == value) {
select.selectedIndex = i;
return true;
}
}
return false;
}

function getTagFromIdentifierAndTitle(tagName, identifier, title) {
var len = identifier.length;
var tags = document.getElementsByTagName(tagName);
for (var i=0; i < tags.length; i++) {
var tempString = tags[i].id;
if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {
return tags[i];
}
}
return null;
}
Remplacer les valeurs <<FIELD DISPLAY NAME>> et <<QUERYSTRING VARIABLE NAME>> par vos valeurs.
Insérer , via SharePoint designer par exemple, la ligne suivante dans votre page :
<script language="javascript" src="script.js"></script>
Selon les cas cela demandera un d'adaptation mais l'essentiel est là.

jeudi 7 août 2008

Intellisense SharePoint dans Visual Studio

La petite astuce qui mange pas de pain et permet d'augmenter votre intellisense!! :)

Copier
"C:\Program Files\Fichiers communs\Microsoft Shared\web server extensions\12\TEMPLATE\XML\wss.xsd"
dans
"c:\program files\Microsoft Visual Studio 8\XML\Schemas"
Bien sûr, modifier les chemins selon votre configuration

Importer correctement un fichier html

Avec cette petite méthode vous pouvez downloader un fichier HTML avec un encodage correct sans tous les caractères spéciaux et autres entité html

internal string Download(string source, string destination)
{

HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create(source);
string chemin = string.Empty;

using (WebResponse Response = WebRequestObject.GetResponse())
{
using (Stream WebStream = Response.GetResponseStream())
{
System.Text.Encoding encod = System.Text.Encoding.GetEncoding("iso-8859-1");
using (StreamReader Reader = new StreamReader(WebStream,encod))
{
string nom = "NomDuFichier";
chemin = Path.Combine(destination, nom);
using (StreamWriter sw = new StreamWriter(chemin))
{
sw.Write(HttpUtility.HtmlDecode(Reader.ReadToEnd()));
}
}

}

}
return chemin;

}

lundi 4 août 2008

LinksList 04

.NET
  1. “How Do I?” Videos — Data Platform Development
  2. LINQ to Objects : l'envers du décor
  3. Développement avec Visual Studio Tools pour Office
  4. LINQ To SQL Tutorial
  5. Utiliser LINQ to SQL (Partie 1)
  6. LINQ to SQL (Partie 2 - Définition de nos classes du modèle de données)
  7. [.NET] Comprendre la philosophie des exceptions sous .NET
  8. [Silverlight] Comment bien débuter avec Silverlight 2.0 ?

SHAREPOINT
  1. SitePoint CSS Reference
  2. Créer une activité personnelle pour les workflows Sharepoint Designer
  3. Introduction to data calculations
  4. Aide de l'Administration centrale (Office SharePoint Server 2007)
  5. Notes: 70-541 MCTS SharePoint Services 3.0 - Application Development
  6. Paul Andrew : MSSharePointDeveloper Content
  7. Docs Table
  8. patterns & practices SharePoint Guidance

Tout pour les Customs Actions...

...et notamment pour créer une Custom Action (CA) uniquement pour une liste précise.
  1. Créer une feature spécifique de la liste concernée à l'aide de SharePoint Solution Generator (option "Définition de liste")
  2. Dans le dossier "12\TEMPLATE\FEATURES\{Votre Feature}\{Votre Feature}", ouvrir le fichier "ListDefinition.xml" et modifier l'argument Type du noeud ListTemplate avec un chiffre supérieur à 10000
  3. Dans le dossier "12\TEMPLATE\FEATURES\{Votre Custom Action}", ouvrir "elements.xml" et modifier l'argument RegistrationId du noeud CustomAction avec le chiffre que vous avez choisi à l'étape numéro 2
  4. iisreset
Quelques liens pour la route :
Creating Menu Item for a Specific List/Document Library Template
Sharepoint 2007 : Les Custom Actions
CustomAction Element (Custom Action)
How to: Add Actions to the User Interface

mercredi 9 juillet 2008

KB948109 et OFFICESERVERS

Le contexte

Le tout commence avec une mise à jour Windows Update qui foire, la KB948109 précisement, mais cela pourrait arriver, je pense, pour tout un tas d'autres. Pour mon cas, non comptant d'échouer, cette mise à jour fait tomber l'instance SQL Server "OFFICESERVERS" qui héberge les Shared Services, bref...

La résolution ce problème passe par une installation correcte du correctif. Après examen, je découvre que l'instance Sql Server "OFFICESERVERS" est en version 9.0.3042 alors que les autres, qui ont pu appliquer le KB, était au départ en version 9.0.3054 .
Cette fameuse KB948109 devant nous faire arriver en version 9.0.3068 (gloups).

La manoeuvre va donc consister à télécharger le correctif KB934458 pour que "OFFICESERVERS" passe de la 3042 à la 3054 puis la KB948109 pour passer de la 3054 à la 3068.

Là, on se dit : cool, ya plus qu'à... et ben non!! Le problème c'est que, si on reflechit bien, pourquoi cette fameuse instance était-elle restée en 3042 ? Et bien tout simplement parce que le premier correctif n'avait pu s'installer correctement, et que l'on peut passer à côté de ça car les applications liées à cette instance fonctionnaient toujours correctement.
Cette Instance considère donc qu'une installation la concernant à été interrompue, et mettra en erreur tout autre installation à venir.

C'est à partir de là que ça devient amusant...

La résolution


  1. Dans "Ajout/Suppression de programmes" > "Microsoft SQL Server 2005" > "Modifier"
  2. Sélectionner l'instance "OFFICESERVERS", puis "Moteur de base de données"
  3. L'assistant d'installation de SQL Server se lance, il faut alors poursuivre jusqu'à ce que l'assistant propose quelque chose comme "Reprendre l'installation interrompue" (je ne me souviens plus de l'intitulé exact) ce qui prouve q'une mise à jour (par exemple) n'a pu se faire correctement (Sinon nous aurions "Changer les composants installés").
  4. A partir de là, deux possibilités :
    1. Vous disposez du programme d'installation initial, et là, pas de problème, il faut poursuivre jusqu'à la fin de la procédure.
    2. Vous ne disposez pas du programme intial et ,en conséquence, le programme vous demande le chemin pour le fichier "sqlrun_sql.msi" :
      1. Annuler l'assistant
      2. Télécharger la dernière version de SQL Server
      3. Lancer l'installation, et récupérer l'ensemble du dossier temporaire décompressé (moins le petit fichier temp qui bloque la copie)
      4. Annuler l'installation
      5. Vous voilà avec les fichiers d'installation de SQL Server et le fameux fichier "sqlrun_sql.msi"
      6. Recommencer à partir du "1".

        Tout cela car la maintenance ne peut se faire à partir d'une installation simple (a priori), je veux dire lancée à partir du setup.exe . Et que l'on ne peut avoir en même temps une opération de maintenance sur une installation existante (Ajout/Suppression) et une instance d'installation en cours (setup.exe)... ouf!
  5. Une fois cette procédure passée vous pouvez installer vos KB.
  6. Mais est-ce réellement terminé ?
  7. .... suspens....
  8. et bien non!!!!
  9. Surgit de nulle part, Le message suivant apparaît "L'erreur était [Microsoft] [SQL Native Client] [SQL Server] Syntaxe incorrecte vers '='"
  10. râhhhh!!!
  11. Direction http://support.microsoft.com/kb/935371/fr et le passage suivant :
Pour contourner ce problème, procédez comme suit :

Pour contourner ce problème, procédez comme suit :
1. Dans un éditeur de texte tel que le Bloc-notes, ouvrez le fichier Sysdbupg.sql. Ce fichier se trouve dans le dossier suivant:
InstallationPath\MSSQL.1\MSSQL\Install
Remarque : InstallationPath représente le chemin d'accès d'installation.
2. Recherchez la ligne suivante de code.

SELECT @certificate_name = QUOTENAME(@certificate_name, '''')

3. Remplacez la ligne de code que vous avez localisée à l'étape 2 à l'aide de la ligne suivante de code.

SELECT @certificate_name = '''' + REPLACE(@certificate_name, '''', '''''') + ''''

4. Enregistrez la modification, puis puis quittez l'Éditeur.
5. Dans la boîte de dialogue Message d'erreur, cliquez sur Réessayer .


Pour ma part, il existait 4 fichiers "Sysdbupg.sql" à modifier
  1. Recommençage
  2. Installage
  3. Réussisage!!
Voilà, c'était long, fastidieux mais je tenais tout de même à faire ce post :))

vendredi 27 juin 2008

Plantage Firefox 3 avec Silverlight

Le nouveau Firefox 3 ne fonctionne pas (ou très mal) avec Silverlight si celui-ci est déjà installé.
Pour résoudre le problème :
  1. Ajout/Suppression de programme
  2. Désinstaller Microsoft Silverlight
  3. Lancer Firefox 3
  4. Aller sur le site de Silverlight ou Channel9
  5. Relancer l'installation de Silverlight

lundi 23 juin 2008

Paramétrages de sites MySite

Pour afficher le détail des utilisateurs dans les sites SharePoint, il existe une grande différence entre Wss et Moss :
  1. WSS gère une liste Sharepoint classique dont on peut configurer les colonnes. Lorsque l'on clique sur un utilisateur, les informations détaillées s'affiche dans la page userdisp.aspx
  2. MOSS intègre la notion de sites personnels ("Mon Site" ou "MySite") et la page userdisp.aspx redirige alors vers la collection de sites personnels qui a été définie dans "Administration de services partagés > Paramètres du site Mon site"
En cas de dysfonctionnement ou tout simplement si l'on souhaite migrer vers une nouvelle collection de sites personnels il faut :
  1. Créer une nouvelle application web
  2. Créer une collection de site dans la nouvelle application en utilisant le modèle "Entreprise" > "Hôte de sites Mon site"
  3. Une fois l'application créée et en allant sur sa page d'accueil, cliquer sur "Définir comme Hôte de sites Mon site" ou aller dans "Administration de services partagés > Paramètres du site Mon site" pour configurer la nouvelle Ur
Quelques liens complémentaires :
  1. Créer un emplacement d’hébergement de sites Mon site
  2. Gérer les emplacements d’hébergement de sites Mon site
  3. Getting Redirection to My Site Profiles to Work
  4. [MOSS 2007] Redirection, userdisp.aspx et MySite

vendredi 20 juin 2008

Les thèmes dans Moss

D'abord quelques liens :

La base :
  1. [MSDN] How to: Customize Themes
  2. [MSDN] Cascading Style Sheets Class Definitions for Windows SharePoint Services
  3. [ASP-PHP] Créer un thème graphique pour WSS V3
Les chti' détails :
  1. CSS Options with Master Pages et sa traduction explicative SharePoint 2007 : Navigateurs Web, Css et Outils pour customiser le look de SharePoint (Partie 2)
  2. SharePoint 2007 Design Tip: Import your CSS for SharePoint Themes
    Très intéressant, puisqu'il permet de vous affranchir de ré appliquer le thème à chaque modification
  3. A theme with the name "ThemeID 1011" and version already exists on the server
    Un autre lien spécifique à un problème rencontré lors de manipulations et tests qui aboutissent à cette l'erreur
Le complément :

De ce que j'ai pu expérimenté, le moyen le plus sur pour réinitialiser complètement un thème est de procéder de la manière suivante :
  1. Ouvrir SharePoint Designer et Supprimer le dossier du thème concerné dans "_themes". Cela supprime la version en cache du thème (ghost)
  2. Faire un iisreset.
    Et d'une manière générale, en faire un à chaque modification du thème dans le dossier C:\Program Files\Fichiers communs\Microsoft Shared\web server extensions\12\TEMPLATE\THEMES
Si l'on a juste besoin de modifier la css, on peut procèder de la manière suivante :
  1. Modifier directement le fichier {votre thème}1011-65001.css depuis SharePoint Designer dans le dossier _theme/votre thème

  2. Répercuter ces modifications dans le fichier "theme.css" du dossier C:\Program Files\Fichiers communs\Microsoft Shared\web server extensions\12\TEMPLATE\THEMES\VOTRE THEME"
La troisième solution étant celle déjà citée SharePoint 2007 Design Tip: Import your CSS for SharePoint Themes pour rendre cela plus flexible

lundi 9 juin 2008

Infos technos

Ci dessous les choses que j'ai retenu ces derniers temps

  1. Managed Extensibility Framework (MEF)
    "fournit aux développeurs un outil d'ajouter facilement à l'extensibilité de leurs applications et avec un impact minimal sur les code" ... comment bien faire des plugins dans nos programmes
  2. Microsoft’s Parallel Computing Platform (PCP)
    Comment optimiser et profiter des architectures multiprocesseurs
  3. Pex: Automated Exploratory Testing for .NET
    Encore dans les labos de Krosoft, cet outil devrait permettre de produire automatiquement les tests unitaires et de suggérer les corrections nécessaires
  4. Windows PowerShell
    Le nouveau Shell de Microsoft qu'il va bien falloir se farcir :)
  5. Velocity
    "Velocity a pour vocation de fournir un cache objet distribué multi-CLR." ... La CLR, dans un cache mondial, disponible partout et qui se nourrit de vos objets (mouhaha)
  6. live.sysinternals.com
    les indispensables accessibles depuis le net (Informations)
  7. Blocking Unwanted Parasites with a Hosts File
    La plus primaire (au sens simple et fiable) des sécurités, comment avoir un fichier Host blindé.

jeudi 5 juin 2008

Génération de la classe d'accès aux données avec SqlMetal

Avec les nouvelles versions Visual Studio 2008 (Express et consorts) arrivent de nouveaux outils permettant de manipuler les données. Si l'on dispose d'une version complète de Visual Studio 2008, on a le Concepteur Objet/Relationnel (Concepteur O/R) permettant de manipuler graphiquement notre mapping.
Mais il existe la solution du "pauvre", lorsque l'on dispose des versions Express, où l'on peut utiliser l'outil en ligne de commande SqlMetal.exe
disponible par défaut dans :
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin
Ainsi, avec la base de données exemple Northwind, vous exécuter la commande suivante :
sqlmetal /server:"SERVEUR" /database:northwind /code:"C:\northwind.cs"
le code source d'accès aux données exploitable par Linq est généré.
Ensuite c'est simple :
  1. Création d'une nouveau projet console
  2. Ajout de la référence "System.Data.Linq"
  3. Code source d'une classe Minimale :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exemple
{
class Program
{
static void Main(string[] args)
{
string cnx = @"Server=SERVEUR;Database=Northwind;Trusted_Connection=yes;";
Northwind db = new Northwind(cnx);
foreach (var client in db.Customers)
{
Console.WriteLine("{0}, {1}, {2}", client.CustomerID, client.CompanyName, client.Orders.Count);
}
Console.ReadLine();
}
}
}

Personnellement je trouve ça génial, mais ça n'engage que moi ;)

jeudi 29 mai 2008

Trucs et astuces VBA Excel

Quelques aides mémoires utiles pour Développement Macro VBA que je n'aurais pas à chercher :

Détecter un simple clic
Entre le SelectionChange et le DoubleClick il n'existe pas dans Excel (à ma connaissance :)) de moyen de capturer le simple clic dans une cellule (entendu par là, que le fait de faire un simple clic dans la cellule déjà sélectionné doit lever l'évenement).
L'astuce la plus fonctionnelle consiste lors du SelectionChange, qui est au moins déclenché la première fois, de faire son traitement et de terminer par :
ThisWorkbook.Worksheets(feuilleB).Range("B" & Target.row & ",Z" & Target.row).Select
Afin de modifier la sélection en cours (ici on sélectionne la cellule B et Z de la ligne en cours), ce qui fait que lors du prochain clic, SelectionChange sera forcément levé


Permettre de manipuler les plans avec les feuilles protégées
La protection d'une feuille entraine par défaut le fait qu'il n'est plus possible d'utiliser le mode plan permettant de manipuler les données en arbre, il faut alors affiner sa protection :
Sheets(feuilleB).EnableOutlining = activate
Sheets(feuilleB).Protect "", userInterfaceOnly:=activate

Ouvrir, refermer les niveaux d'un plan en VBA
Dans la continuité de l'astuce précédente et toujours sur les plans , voici le code VBA vous permettant de déployer ou replier les niveaux par programmation :
Sub expandCollapse()
'Expand niveau 2
MsgBox "Expand niveau 2"
Sheets(3).Outline.ShowLevels RowLevels:=2
'Collapse niveau 2
MsgBox "Collapse niveau 2"
Sheets(3).Outline.ShowLevels RowLevels:=1
End Sub

mardi 22 avril 2008

Installer BDC Definition Editor

une installation du BDC Definition Editor (fourni dans le SDK MOSS) ne peut se faire par défaut sur des postes autre que anglais. C'est bête, surtout lorsque l'on en voit la cause :

Unexpected Error has occured Error is 'Create failed User 'BUILTIN\Users' ->An exception occured while executing a Transact SQL statement or batch ->Windows NT user or group 'BUILTIN\Users' not found Check the name again.

L'astuce suivante permet toutefois de contourner cette limitation :
1. Renommer le groupe local "Utilisateur" en "Users"
2. Installer BDC Definition Editor
3. Renommer le groupe local "Users" en "Utilisateur"

infos complémentaires ici : http://forums.microsoft.com/MSDN-FR/ShowPost.aspx?PostID=2123800&SiteID=12


En attendant une mise à jour du SDK...

lundi 14 avril 2008

Du problème des dates dans la CAML Query

Pour utiliser les dates dans vos CAML Query par exemple pour faire des opérations avec comme référence la date du jour (date du jour -/+ N),

vous pouvez soit vous la jouer "Je connais l'API par coeur" pour obtenir le format correct avec :
SPUtility.CreateISO8601DateTimeFromSystemDateTime(System.DateTime.Now)

http://www.u2u.info/Blogs/Patrick/Lists/Posts/Post.aspx?ID=1313

ou bien, simple et efficace directement dans la requête avec :
<Value Type='DateTime' IncludeTimeValue='FALSE'><Today OffsetDays='{0}'/></Value>

http://geekswithblogs.net/naijacoder/archive/2007/11/20/117017.aspx

Object reference not set to an instance of an object

Erreur récurrente rencontrée dans le développement SharePoint avec Visual Studio avec VSeWSS 1.1. Il faut donc absolument connaitre le lien suivant http://www.wsswiki.com/Visual_Studio_Extensions_For_WSS_3.0 pour comprendre et utiliser le Missing Feature Utility (au moins je saurais où le trouver ;))

mardi 1 avril 2008

BDC et AdventureWorks 2005

les excellents tutoriels MSDN sur les Business Data Catalog (BDC) SharePoint [http://msdn2.microsoft.com/en-us/library/ms519241.aspx] fonctionnent avec la base exemple AdventureWorks2000, mais ceux disposant de la version 2005 de cette base s'exposent à quelques petits soucis :)

J' ai donc adapté le fichier BDC avec les requêtes qui vont bien dans le fichier disponible ici : http://www.boulatin.fr/boulatek/AdventureWorks.xml

Il suffit d'adapter les comptes utilisateurs pour les noeuds

<AccessControlEntry Principal="COMPTE">
<AccessControlEntry Principal="COMPTE">

Ainsi que le nom de votre serveur SQL

<Property Name="RdbConnection Data Source" Type="System.String">SERVEUR SQL</Property>


Si ça peut aider...


Impossible de mettre à jour les étendues (scope) dans la liste déroulante de recherche MOSS 2007

Après de multiples manipulations sur les scopes ou étendues SharePoint, il peut arriver d'être dans l'impossibilité de mettre à jour les étendues disponibles depuis la zone de recherche SharePoint.

Le problème est simple puisqu'il faut recréer ou modifier le groupe d'affichage qui gère la liste déroulante. Le truc c'est que le nom du groupe d'affichage pour un serveur français doit impérativement être :
"Liste déroulante de recherche"

Ça à l'air de rien, mais quand on l'a pas on peut perdre pas mal de temps ;)

Ce post allemand (sic) en parle aussi : http://patrikluca.blogspot.com/2008/02/all-sites-search-scopes-missing-in.html

Accès refusé sur stsadm -o restore

Lors de la restauration d'une collection de site, ce désagréable message d'erreur peut apparaitre :

Accès refusé. (Exception de HRESULT : 0x80070005 (E_ACCESSDENIED))

Il faut simplement s'assurer que le compte qui procède à la restauration est administrateur sur la collection de site

des informations complémentaires ici :
http://farhanfaiz.wordpress.com/2008/02/06/
moss-back-up-and-restore-web-sites-using-microsoft-office-sharepoint-designer-2007

lundi 24 mars 2008

Petites astuces virtuelles

Voilà deux astuces pour animer ce beau lundi de Pâques :)

  1. Comment désactiver les infos bulles (énervantes) qui apparaissent ici et là sur Windows ("Votre programme est toujours en cours d'éxécution..." "Vous êtes connecté" etc...) ?

    1. Regedit
    2. HKEY_CURRENT_USER\Software\Microsoft\Windows
      \CurrentVersion\Explorer\Advanced
    3. Créer une nouvelle valeur DWORD
      1. Nom : EnableBalloonTips
      2. Valeur : 0
    4. Plus d' infos et plein d' autres astuces sur ce lien http://1computerguy.com/windowsxp_tips.htm#balloon_tips

  2. Comment se réconcilier avec Internet Explorer (enfin presque) ?

    A l' adresse suivante http://www.computerworld.com/action/article.do?
    command=viewArticleBasic&articleId=9052178&pageNumber=2
    on trouve quelques astuces intéressantes pour optimiser et mieux utiliser IE. La plus intéressante est celle concernant la vitesse d' affichage des pages web, il est vrai que cela booste pas mal l'affichage :

    1. Regedit
    2. HKEY_CURRENT_USER\Software\Microsoft\Windows
      \CurrentVersion\InternetSettings
    3. Nouvelle clé DWORD
      1. Nom : MaxConnectionsPer1_0Server
      2. Valeur : 10
    4. Nouvelle clé DWORD
      1. Nom : MaxConnectionsPerServer
      2. Valeur : 10

mercredi 12 mars 2008

SharePoint et RssViewer

PROBLEME

Lors de l' utilisation du WebPart RSSViewer, celui ne fonctionne pas correctement, n'affiche pas les informations etc... alors que par ailleurs le flux semble correct (ex : affichage correct dans IE).
Le problème réside sans doute dans le fait que l' intranet utilise un proxy et qu' il faut configurer SharePoint pour qu' il l' utilise.

SOLUTION

Il faut donc ouvrir le web.config de l' application concernée et trouver la section suivante :

<system.net>
<defaultProxy>
<proxy autoDetect="true" />
</defaultProxy>
</system.net>
puis renseigner les informations du proxy :
<system.net>
<defaultProxy>
<proxy usesystemdefault="false" proxyaddress="http://{NOM DU PROXY}:{NUMERO DE PORT}" bypassonlocal="true" />
</defaultProxy>
</system.net>

informations complémentaires : http://blogs.msdn.com/adamhems/archive/2006/06/13/629761.aspx


mardi 11 mars 2008

Astuce Debugging SharePoint

un truc bien utile pour éviter quelques iisreset :

lors d' une séance de débogage (rien à voir avec la relaxation), il est courant d' avoir plusieurs processus w3wp.exe en cours sans savoir lequel on doit s' attacher pour débogger notre composant.

Il suffit alors d' exécuter en ligne de commande iisapp pour obtenir la liste des applications web en cours avec leurs numéros d' identifiant et ainsi d' identifier le process qui nous intéresse.

L' autre astuce intéressante est le raccourci clavier Ctrl+Alt+U pour obtenir pour la liste des modules chargés et voir si les fichiers pdb sont correctement chargés.

plus d' infos ici : http://wss.made4the.net/Lists/Posts/Post.aspx?List=33975e7e%2D77dc%2D4ddc%2D8109%2Daea98b7cc618&ID=654

yepa!

dimanche 9 mars 2008

Petit test Windows Live Writer

et oui je suis comme vous! nous sommes sans doute quelques dizaines de milliers à avoir télécharger la dernière version de Messenger qui vous installe tout un bazar (enfin si on le veut bien :)).

Et donc je vois ce Windows Live Writer qui me donne l' occasion de dépoussiérer mon http://boulatin.spaces.live.com et en poussant le bouchon, je me dis... et si c' était possible avec cet utilitaire de mettre à jour mon Boulatek (issu du moteur de blog Google) ?!

et bien c' est possible! Et c' est même vachement bien, car un seul outil pour gérer tout vos blogs (et agréable qui plus est) ça vaut le coup.

Pour télécharger Windows Live Writer
Le blog de l' équipe

A vos blogs...

jeudi 6 mars 2008

Tendances

Dans le style bref et laconique préféré du boulatin, Petites infos glanées ici et là pouvant intéresser les technos geek... (ça lui prends de temps en temps) :

  1. Concernant les navigateurs webs
    1. Internet Explorer 8 Beta 1
    2. Un étonnant Safari 3 Beta pour la rapidité (repose sur le moteur open source WebKit) malgré des petits soucis de sécurité soulevés par PayPal ... à suivre tout de même

  2. Sortie de SilverLight 2.0 (beta 1) concurrent de Flash qui devrait rapidement monter en puissance vu les efforts fournis par Microsoft en ce moment (SharePoint Conference 2008, MIX08) : pour en savoir plus et télécharger le plug-in http://silverlight.net , et également Silverlight Blueprint for SharePoint

  3. L'agitation qui gagne les opérateurs mobiles, concernant "L'Internet illimité", devrait voir des offres de plus en plus intéressantes cette année (pour un service qui demande à prouver sa pertinence en dehors du fun ;) ) Orange commence avec Ten, voulant devancer SFR qui promet des forfaits mystères pour le 12/03 (Mercredi prochain) ...

  4. A noter deux concours sympathiques :
    1. Skin Ton Phone pour proposer un Skin de Windows Mobile 6, pour ceux qui veulent se lancer mieux vaut avoir
      1. Visual Studio 2005 ou les versions Express et gratuites
      2. Mais également le SDK Windows Mobile 6 et tous les émulateurs qu'il faut (et oui tout le monde n'a pas le dernier HTC :))
      3. Centre Windows Mobile
    2. Concours CodeS-SourceS Windows Home Server pour proposer un add-in pour le serveur maison de Krosoft; mais là, désolé j'ai pas d'émulateur à vous proposer :) , bonne chance!

Sincères boulates