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à.

Aucun commentaire: