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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
| /** Get les prompt et set la propriété name **/
var type = getFormWarpRequest()._oLstChoiceslbType;
type.name = "type";
var family = getFormWarpRequest()._oLstChoiceslbFamily;
family.name = "family";
var name = getFormWarpRequest()._oLstChoiceslbName;
name.name = "name";
var ph = getFormWarpRequest()._oLstChoicesProductHierarchy;
var param = getFormWarpRequest()._textEditBoxParameter;
/** Set les event listiner **/
type.onchange = function(){ repopulateFromType(); }
family.onchange = function(){ repopulateFromFamily(); }
name.onchange = function(){ repopulateFromName(); }
/** Function Première **/
function repopulateFromType(){ // Function appeler par un changement de type
validIndex(type); // Set le selected value a All lorsque la ligne pointillé est choisit
cascadeEffect();
rebuildPrompt(family); // Reconstruit le prompt family à partir d'un type de produit
rebuildPrompt(name);
setProperty()
}
function repopulateFromFamily(){ // Function appeler par un changement de family
validIndex(family); // Set le selected value a All lorsque la ligne pointillé est choisit
cascadeEffect();
rebuildPrompt(name);// Reconstruit le prompt name à partir d'une famille de produit
setProperty()
}
function repopulateFromName(){ // Function appeler par un changement de name
validIndex(name);
setProperty()
}
/** Sous Function **/
function cascadeEffect(){ // Disable / enable les prompts pour créer l'effet cascade
if (type.selectedIndex != 0){
family.disabled = false;
} else {
family.selectedIndex = 0;
family.disabled = true;
name.selectedIndex = 0;
name.disabled = true;
}
if (family.selectedIndex != 0){
name.disabled = false;
} else {
name.selectedIndex = 0;
name.disabled = true;
}
}
function getArray(arg){// Crée un tableau contenant les name ou les family d'un produit donné
var arr = [];
var start;
var end;
for (var i = 0; i < ph.length; i++){
if (arg == "name"){
start = ph[i].value.indexOf("~",0) + 1;
end = ph[i].value.indexOf("¯",0);
if(ph[i].value.substring(start ,end ).trim() == family[family.selectedIndex].value.trim()){
arr.push(ph[i].value.substring(ph[i].value.indexOf("¯",0) + 1,ph[i].length).trim());
}
}
if (arg == "family"){
start = 0;
end = ph[i].value.indexOf("~",0);
if (ph[i].value.substring(start ,end ).trim() == type[type.selectedIndex].value.trim()){
arr.push(ph[i].value.substring(ph[i].value.indexOf("~",0) + 1,ph[i].value.indexOf("¯",0)).trim());
}
}
}
return arr;
}
function rebuildPrompt(ctrl){ // Reconstruit la liste des valeurs du prompt passé
ctrl.selectedIndex = -1;
ctrl.length = 0;
var arr = getArray(ctrl.name); //Crée un tableau contenant les family d'un type de produit donné
arr= removeDbles(arr);
ctrl.options[0] = new Option("All","");
ctrl.options[1] = new Option("---------------------------","");
for (var j=0 ; j < arr.length ; j++){
if (arr[j] != undefined && arr[j] !=null && arr[j] != ""){
ctrl.options[j+2] = new Option(arr[j],arr[j]);
}
}
}
function setPromptValues(){ // Redonne la value des selectedValue au dropdownlists après le reprompt
var f = param.value.substring(0,param.value.indexOf("~",0));
var n = param.value.substring(param.value.indexOf("~",0) + 1,param.value.lenght);
if (f != ""){
for (var i = 0; i < family.length ; i++){
if (family[i].value.trim() == f){
family.selectedIndex = i;
}
}
if (n!= ""){
for (var j = 0; j < name.length ; j++){
if (name[j].value.trim() == n){
name.selectedIndex = j;
}
}
}
}
}
function setProperty(){ // met les selectedValues de family et name dans param pour la fonction setPromptValues()
var str;
if(family.selectedIndex != 0){
if(name.selectedIndex != 0){
str = family[family.selectedIndex].value+"~"+name[name.selectedIndex].value;
}
else{
str = family[family.selectedIndex].value+"~";
}
}
else{
str = "";
}
param.value = str;
}
function validIndex(ctrl){ // Set le selected value a All lorsque la ligne pointillé est choisit et fill param
if (ctrl.selectedIndex == 1){
ctrl.selectedIndex = 0
}
}
/** Function Utilitaire **/
String.prototype.trim = function() { // Élimine les espaces vide au bout du String
return this.replace(/^\s+|\s+$/g,"");
}
function removeDbles(arr){ // Élimine les doublons et ordonne un array
var retour = [];
var temp = arr.sort();
for (j = temp.length -1; j >= 0 ; j--){
if (temp[j] != temp[j-1]){
retour.push(temp[j]);
}
}
return retour.sort();
}
/** Onload **/
rebuildPrompt(family);
setPromptValues();
cascadeEffect(); |
Partager