Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Cognos
Cognos Forum d'entraide Cognos : Impromptu, Powerplay, transformer,...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/09/2011, 21h20   #1
Invité de passage
 
Homme
Développeur informatique
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 4
Points : 4
Par défaut Set ? Parameter ? from javascript

problème à l'origine: Je voulais créer trois prompt en cascade qui ne force pas la page à ce charger entre chaque sélection.

Solution trouvé:Gérer l'effet cascade manuellement avec le javascript. Bien que mon code ne soit pas identique, mon site de référence est le suivant:
http://www.ibm.com/developerworks/da...n/page583.html

Nouveau problème:Les ?parametres? que mes prompts doivent modifier ne sont pas affecté par mes prompts une fois qu'ils ont été modifier par le script.

Question: Comment dois-je faire pour modifier mes ?parametres? manuellement par JavaScript? J'ai lu qu'il était possible d'y accéder par p_<ParameterName> mais j'ai pas réussi à le faire fonctionner.

Exemple du code que j'ai asseillé: alert(p_Name);
soulmed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 15h39   #2
Invité de passage
 
Homme
Développeur informatique
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 4
Points : 4
Citation:
Envoyé par soulmed Voir le message
problème à l'origine: Je voulais créer trois prompt en cascade qui ne force pas la page à ce charger entre chaque sélection.

Solution trouvé:Gérer l'effet cascade manuellement avec le javascript. Bien que mon code ne soit pas identique, mon site de référence est le suivant:
http://www.ibm.com/developerworks/da...n/page583.html

Nouveau problème:Les ?parametres? que mes prompts doivent modifier ne sont pas affecté par mes prompts une fois qu'ils ont été modifier par le script.

Question: Comment dois-je faire pour modifier mes ?parametres? manuellement par JavaScript? J'ai lu qu'il était possible d'y accéder par p_<ParameterName> mais j'ai pas réussi à le faire fonctionner.

Exemple du code que j'ai asseillé: alert(p_Name);
J'ai découvert que je n'ai pas le problème quand j'ouvre le rapport dans Firefox. Il semblerait que le bug provienne de Internet Exploreur. J'aurais besoin de savoir comment le browser influence le passage de parametre mais surtout de savoir comment contourné ce bug.
soulmed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 22h02   #3
Invité de passage
 
Homme
Développeur informatique
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 4
Points : 4
Par défaut Je progresse...

Mes parametres fonctionne maintenant. Mon trouble était dans l'ordre que mon script s'exécutait. Mon dernier petit bug qu'il me reste à résoudre pour le bon fonctionnement de l'application c'est la persistance de l'information. Je m'explique:

Sur 3 dropdownlist, 2 sont reconstuit par mon script. Le premier (généré par Cognos) garde la valeur choisit par l'utilisateur une fois le reprompt fait. Toutefois, les 2 autres (reconstuit par mon script) revienne à la valeur All (qui est l'entête de ma liste).

Sauriez-vous de quelle fasson je peut allé chercher la valeur d'un ?parametre? afin de l'attribuer à mon selectedValue de mon prompt?
soulmed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 21h19   #4
Invité de passage
 
Homme
Développeur informatique
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 4
Points : 4
Par défaut Solution :

J'ai fini par y arriver.... J'ai résolut mon problème de persistance avec un hidden textbox. Voici le code complet et functionnel. Si vous trouvez moyen de l'optimiser, S.V.P. faite comme moi et prenez 2 minute pour partager l'info.

Code :
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();
soulmed est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h51.


 
 
 
 
Partenaires

Hébergement Web