Archives de Catégorie: sharepoint 2007

site template sharepoint 2007

« The template you have chosen is invalid or cannot be found » qui n’a jamais reçu ce message de la part de sharepoint quand il a voulu créer un site basé sur un « site template ». Ben moi ça m’est arrivé il y a pas longtemps et comme d’habitude le message d’erreur est très explicite.

Dans mon cas le site de référence utilisait des formulaires InfoPath et j’avais ajouté une webpart maison, un site assez simple en somme.

voila ce que je faisais:

$stsadm -o addtemplate -filename "template.stp" -title "stp title" -description "site based on site Template"
$stsadm -o execadmsvcjobs
"sleep 30 seconds"
start-sleep -seconds 30

"Creating the sitecollections..."
$stsadm -o gl-createsiteindb -url $url -ownerlogin $name -owneremail $mail -hhurl $webapplication -sitetemplate "stp title" -title "stp title" -dbname $database

après ce petit code exécuté en powershell je recevais le message d’erreur.

L’origine de l’erreur vient que dans le fichier stp il fait référence, dans mon cas, aux fichiers infopath et au webpart ajouté.

La solution que j’ai trouvé fût celle-ci:
Faire un deploy de la solution wsp et ajouter les infopath forms sur le server où l’on va créer la sitecollection basé sur le stp. puis lancer son script de création de sitecollection.

Voila je n’ai plus le problème et je peux créer mon site 😉

Publicités

Ouvrir un lien dans une autre fenêtre depuis une liste de liens

Tous d’abord je tiens à vous souhaiter une bonne année 2011. Cela fait très longtemps que je n’ai pas écris d’article sur mon blog mais les projets, la famille puis la fatigue ont eut raison de mon courage ;-). Une de mes résolutions est d’être plus présent sur mon blog. Ceci étant dit passons au sujet de cet article.

Un truc qui m’a toujours ennuyé, c’est que dans une liste de liens il n’est pas possible par défaut de choisir si un lien est ouvert dans une nouvelle fenêtre ou dans la fenêtre courante. Plusieurs possibilités s’offre à vous, moi j’ai choisi la version la plus simple qui est de placer un javascript dans la page et hop le tour est joué.

Alors comment faire. Via l’application sharepoint Designer ouvrez la page AllItems.aspx de votre liste et ajoutez ce petit script à la fin de votre code dans un asp:content déja existant pour qu’il soit exécuté en dernier sur la page.

<script type="text/javascript">
var thisDomain = window.location.hostname;
var theLinks = document.links;
for (i=0; i < theLinks.length; i++)
{
var thisLink = theLinks(i);
if (thisLink.href.indexOf(thisDomain) == -1 && thisLink.href.indexOf("javascript") == -1)
{
thisLink.target = "_blank";
}
}
</script>

et voila le tour est joué, maintenant tout les liens qui ne pointent pas sur le domaine sont ouvert dans une autre fenêtre. J’espère que ce petit bout de code vous aidera.

A bientôt 😉

Créer un fichier Excel sans Excel avec MyXls

Pour l’instant je suis sur un projet qui mélange InfoPath 2007 avec Sharepoint. Le formulaire InfoPath est utilisé comme template dans une « form Library ».

le gros problème que j’ai rencontré fut la création d’un fichier excel sans excel. La solution fût la librairie MyXls mais la documentation étant très sommaire, j’ai trouvé de l’aide sur un site chinois en chinois, j’ai décidé de faire un petit tuto sur cette librairie très intéressante.

Voici les étapes à suivre pour créer un fichier excel

//Créer un document
XlsDocument doc = new XlsDocument();
//créer une workSheet en lui donnant un nom
Worksheet ws = doc.Workbook.Worksheets.Add("sheetName");

A ce point on a un fichier vide avec une worksheet

Il y a deux façon de créer une cellule, la première est sans style

//Création d'une cellule sans style
rowNumber = 1;
cellNumber = 1;
Cells cells = ws.Cells;
Cell cell = cells.Add(rowNumber, cellNumber, "hello world");

la deuxième façon permet de mettre un style à la cellule et d’appliquer ce style à d’autre cellule si le besoin s’en fait sentir.

//création du style. la cellule aura un bord noir d'une épaisseur de 1
XF cellXF = doc.NewXF();
cellXF.BottomLineColor = Colors.Black;
cellXF.BottomLineStyle = 1;
cellXF.LeftLineColor = Colors.Black;
cellXF.LeftLineStyle = 1;
cellXF.TopLineColor = Colors.Black;
cellXF.TopLineStyle = 1;
cellXF.RightLineColor = Colors.Black;
cellXF.RightLineStyle = 1;

//Création d’une cellule avec style
rowNumber = 1;
cellNumber = 1;
Cells cells = ws.Cells;
Cell cell = cells.Add(rowNumber, cellNumber, « hello world », cellXF);

il reste encore deux choses à faire pour finir la création de notre premier document excel, un nom et un endroit pour le sauver.

Pour donner un nom il suffit d’utiliser la propriété FileName du document sans extension.

doc.FileName = "hello world";

Pour sauvegarder

doc.Save("c:\", true);

Save a deux paramètres, le premier est l’emplacement où la sauvegarde sera faite, ici, c:\. Le deuxième paramètre est un simple overwrite.

Maintenant j’ai mon document, par contre si j’avais voulu mettre un texte beaucoup plus long comme « Bonjour notre belle planète » j’aurais actuellement un problème de largeur de colonne. Pour résoudre ce problème il faut utiliser ColumnInfo et voici comment l’utiliser.

//doc = mon document excel et ws ma worksheet
ColumnInfo colInfo = new ColumnInfo(doc, ws);
//On indique à partir de quelle colonne on comment à appliquer la largeur et autres infos
colInfo.ColumnIndexStart = 0;
//On indique la dernière colonne où on applique la largeur et autres infos
colInfo.ColumnIndexEnd = 2;
//Je donne une largeur pour la colonne
colInfo.Width = 15 * 256;
//J'ajoute ce format de colonne à la worksheet
ws.AddColumnInfo(colInfo);

Il y a encore d’autres fonctionnalités telle  que mergeArea qui vous permet de fusionner des cellules entres elles.

Voila une première approche de cette librairie, mais si comme moi vous devez l’utiliser  avec sharepoint il serait préférable de télécharger les sources, de les signer puis les compiler.

Références

  • MyXls sur sourceforge, je vous conseil de télécharger les sources au lieu des dll. La version avec un SL est destiné à silverlight. Le seul problème c’est que la doc n’est pas bien fournie.
  • le site chinois où j’ai trouvé des exemples : MyXls

Trouver le titre de votre site dans ProjectProperty

Je voudrais utiliser le titre de mon site qui est déclaré dans  « Site Settings > Title, Description, and Icon » pour cela dans la masterpage j’ai le tag <SharePoint:ProjectProperty ID= »ProjectProperty1″ Property= »Title » runat= »server » />.

le problème, récupérer le titre du site en C#.

Après quelques recherches j’ai trouvé la solution à mon problème.

Il faut faire appel à ProjectProperty qui se trouve dans l’assembly Microsoft.SharePoint.WebControls et l’utiliser comme ceci

var titre = ProjectProperty.GetContextWeb(Context).Title;

Voila un petit article vite fait

Search, Scope, Rules…

Comment créer un scope pour la recherche dans sharepoint avec C# ?

Vous prenez un peu de patience et quasi aucune doc sur le web 😉

Sinon c’est assez simple

On doit d’abord créer un scope

Qu’est-ce qu’un Scope?

Une scope est un conteneur de une ou plusieurs règles qui permet d’affiner le résultat d’une recherche retourné aux utilisateurs.

Scopes scopes = new Scopes(SearchContext.GetContext(SPContext.Current.Web.Site));
var newScope = scopes.AllScopes.Create(« TestScope », string.Empty, null, true, null, ScopeCompilationType.AlwaysCompile);

Une fois le Scope créé il faut lui adjoindre une règle.

Qu’est-ce qu’une règle ?

Une règle définit ce qui se trouve ou non dans le scope,  par exemple des documents, des pages, des listes, etc…

on reprend le scope que l’on vient de créer puis dans Rules on doit choisir le type de règle que l’on veut. Si on point sur une adresse web on utilisera CreateUrlRule,

si on veut une règle sur tous le contenu on utilisera CreateAllContentRule, si on veut une règle base sur une propriété on utilisera CreatePropertyQueryRule.

newScope.Rules.CreateUrlRule(ScopeRuleFilterBehavior.Include, UrlScopeRuleType.Folder, « http://votresite/sousSite/Lists/documents« );

Ici j’ai choisi l’option de pointer sur une adresse web et de mettre un filtre Include ce qui veut dire que tout object  qui correspond à cette règle sera inclut, sauf si cet objet est exclu par une autre règle. On peut voir que je point sur un Folder qui est une liste qui contient les documents sur lesquels je veux faire ma recherche


C’est grâce à l’article sur stsadm que j’ai trouvé comment faire

Référence

Le blog SharePoint Automation de Gary Lapointe

Scope : http://msdn.microsoft.com/fr-fr/library/bb428856.aspx

%d blogueurs aiment cette page :