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
lundi 25 août 2008
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 :
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 :
- Créer un nouveau site SharePoint en utilisant le modèle "Site de publication avec flux de travail"
- Puis au niveau de la collection, dans Paramètres du site > Variantes, rechercher votre site et cliquer sur Ok
- Dans Paramètres du site > Étiquettes de variantes, nous allons définir notre contenu maître avec par exemple les paramètres suivants :
- Nous créons maintenant une variante esclave,
- Nous créons la hiérarchie dans Paramètres du site > Étiquettes de variantes > Créer des hiérchachies
- Si l'on revient sur le site initial, on constate qu'une nouvelle version a été automatiquement créée avec nos paramètres linguistiques
- Modifier votre page et cliquer sur "Soumettre pour approbation"
- 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"
Libellés :
Sharepoint
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 :
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)
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
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">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)
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>
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
Libellés :
Sharepoint
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 :
Insérer , via SharePoint designer par exemple, la ligne suivante dans votre page :
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 :
Remplacer les valeurs <<FIELD DISPLAY NAME>> et <<QUERYSTRING VARIABLE NAME>> par vos valeurs.// 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;
}
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à.
Libellés :
Sharepoint
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
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
Libellés :
Astuces,
Sharepoint
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
SHAREPOINT
- “How Do I?” Videos — Data Platform Development
- LINQ to Objects : l'envers du décor
- Développement avec Visual Studio Tools pour Office
- LINQ To SQL Tutorial
- Utiliser LINQ to SQL (Partie 1)
- LINQ to SQL (Partie 2 - Définition de nos classes du modèle de données)
- [.NET] Comprendre la philosophie des exceptions sous .NET
- [Silverlight] Comment bien débuter avec Silverlight 2.0 ?
SHAREPOINT
- SitePoint CSS Reference
- Créer une activité personnelle pour les workflows Sharepoint Designer
- Introduction to data calculations
- Aide de l'Administration centrale (Office SharePoint Server 2007)
- Notes: 70-541 MCTS SharePoint Services 3.0 - Application Development
- Paul Andrew : MSSharePointDeveloper Content
- Docs Table
- patterns & practices SharePoint Guidance
Libellés :
LinksList
Tout pour les Customs Actions...
...et notamment pour créer une Custom Action (CA) uniquement pour une liste précise.
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
- Créer une feature spécifique de la liste concernée à l'aide de SharePoint Solution Generator (option "Définition de liste")
- 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
- 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
- iisreset
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
Libellés :
Sharepoint
Inscription à :
Articles (Atom)