[Isis-fish-user] comment réccuperer une valeur calculée dans une regle dans une autre règle ?
Bonjour bonjour, J'aimerais réutiliser une quantité calculée dans une règle de gestion dans une autre règle (au même pas de temps) sans avoir a la recalculer. Est ce possible ? comment faut il déclarer la variable ? Merci d'avance -- Sigrid LEHUTA ~ ><> ~ Doctorante Département Ecologie et Modèles pour l'Halieutique IFREMER, rue de l'ile d'Yeu BP 21105 44311 Nantes Cedex 03 Tél : +33 (0)2 40 37 41 65
On Fri, 17 Jul 2009 11:45:50 +0200 Sigrid LEHUTA <Sigrid.Lehuta@ifremer.fr> wrote:
Bonjour bonjour, J'aimerais réutiliser une quantité calculée dans une règle de gestion dans une autre règle (au même pas de temps) sans avoir a la recalculer. Est ce possible ? comment faut il déclarer la variable ? Merci d'avance
La solution propre ================== Je pense que le plus simple et le plus propre est de passer par le context. pour mettre une valeur dans le context: context.setValue("MaValeurPourLAutreRegle", 10); http://isis-fish.labs.libre-entreprise.org/isis-fish/apidocs/fr/ifremer/isis...) Pour recuperer la valeur: int MaValeurPourLAutreRegle = Integer.parseInt(context.getValue("MaValeurPourLAutreRegle")); http://isis-fish.labs.libre-entreprise.org/isis-fish/apidocs/fr/ifremer/isis...) Il y a le meme mecanisme sur la regle (setValue/getValue) mais ces valeurs ne sont pas partagees entre les regles, il faut donc passer par le context pour les partager. Par contre fait attention que la regle qui doit fournir la donnee est bien appelee avant l'autre :). Car sinon tu essaieras de recuperer une donnee qui n'existe pas encore et donc NullPointerException :) L'autre solution pas propre et donc ne pas lire :) ================================================== L'autre solution moins propre est de declarer une variable static dans ta regle qui fait le calcul et les autres viennent directement la chercher. Dans la premiere regle (appele pour l'exemple 'LaJolieRegleQuiCalcule'): static public int maValeur = 10; Dans la regle cliente pour recupere la valeur: LaJolieRegleQuiCalcule.maValeur -- Benjamin -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com () campagne du ruban ascii http://www.codelutin.com /\ pour les mails en ascii
bonjour, j ai un petit soucis avec la methode proposee par benjamin : int MaValeurPourLAutreRegle = Integer.parseInt(context.getValue("MaValeurPourLAutreRegle")); ca compile pas ??! C:\Documents and Settings\slehuta\isis-database-3\rules\Paita4_20002007suite_Anchois.java:137: cannot find symbol symbol : method parseInt(java.lang.Object) location: class java.lang.Integer CatchEspTot = Integer.parseInt(context.getValue("CatchEsp")); est ce que c est correct de faire ? : Integer.parseInt(context.getValue("CatchEsp").toString()); et si l objet est un double ? : Double.parseDouble(context.getValue("CatchEsp").toString()); ?? merci d avance ! Benjamin POUSSIN a écrit :
On Fri, 17 Jul 2009 11:45:50 +0200 Sigrid LEHUTA <Sigrid.Lehuta@ifremer.fr> wrote:
Bonjour bonjour, J'aimerais réutiliser une quantité calculée dans une règle de gestion dans une autre règle (au même pas de temps) sans avoir a la recalculer. Est ce possible ? comment faut il déclarer la variable ? Merci d'avance
La solution propre ==================
Je pense que le plus simple et le plus propre est de passer par le context.
pour mettre une valeur dans le context:
context.setValue("MaValeurPourLAutreRegle", 10); http://isis-fish.labs.libre-entreprise.org/isis-fish/apidocs/fr/ifremer/isis...)
Pour recuperer la valeur:
int MaValeurPourLAutreRegle = Integer.parseInt(context.getValue("MaValeurPourLAutreRegle")); http://isis-fish.labs.libre-entreprise.org/isis-fish/apidocs/fr/ifremer/isis...)
Il y a le meme mecanisme sur la regle (setValue/getValue) mais ces valeurs ne sont pas partagees entre les regles, il faut donc passer par le context pour les partager.
Par contre fait attention que la regle qui doit fournir la donnee est bien appelee avant l'autre :). Car sinon tu essaieras de recuperer une donnee qui n'existe pas encore et donc NullPointerException :)
L'autre solution pas propre et donc ne pas lire :) ==================================================
L'autre solution moins propre est de declarer une variable static dans ta regle qui fait le calcul et les autres viennent directement la chercher.
Dans la premiere regle (appele pour l'exemple 'LaJolieRegleQuiCalcule'):
static public int maValeur = 10;
Dans la regle cliente pour recupere la valeur:
LaJolieRegleQuiCalcule.maValeur
-- Benjamin -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com () campagne du ruban ascii http://www.codelutin.com /\ pour les mails en ascii _______________________________________________ Isis-fish-user mailing list Isis-fish-user@lists.labs.libre-entreprise.org http://lists.labs.libre-entreprise.org/mailman/listinfo/isis-fish-user
-- Sigrid LEHUTA ~ ><> ~ Doctorante Département Ecologie et Modèles pour l'Halieutique IFREMER, rue de l'ile d'Yeu BP 21105 44311 Nantes Cedex 03 Tél : +33 (0)2 40 37 41 65 (interne : 8165)
Sigrid LEHUTA a écrit :
bonjour, salut,
j ai un petit soucis avec la methode proposee par benjamin : int MaValeurPourLAutreRegle = Integer.parseInt(context.getValue("MaValeurPourLAutreRegle"));
ca compile pas ??! C:\Documents and Settings\slehuta\isis-database-3\rules\Paita4_20002007suite_Anchois.java:137: cannot find symbol symbol : method parseInt(java.lang.Object) location: class java.lang.Integer CatchEspTot = Integer.parseInt(context.getValue("CatchEsp"));
est ce que c est correct de faire ? : Integer.parseInt(context.getValue("CatchEsp").toString());
et si l objet est un double ? : Double.parseDouble(context.getValue("CatchEsp").toString()); En théorie, ça fonctionne tout le temps oui.
Comment fait tu le context.setValue(x) ? De quel type est le "x" quand tu met une valeur dans le context ?
merci d avance !
-- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
Ok je fais comme ca alors. mon x est un double, voici le code : double CatchEspTot = 0; [...des trucs qui modifient sa valeur] context.setValue("CatchEsp",CatchEspTot); Eric Chatellier a écrit :
Sigrid LEHUTA a écrit :
bonjour, salut,
j ai un petit soucis avec la methode proposee par benjamin : int MaValeurPourLAutreRegle = Integer.parseInt(context.getValue("MaValeurPourLAutreRegle"));
ca compile pas ??! C:\Documents and Settings\slehuta\isis-database-3\rules\Paita4_20002007suite_Anchois.java:137: cannot find symbol symbol : method parseInt(java.lang.Object) location: class java.lang.Integer CatchEspTot = Integer.parseInt(context.getValue("CatchEsp"));
est ce que c est correct de faire ? : Integer.parseInt(context.getValue("CatchEsp").toString());
et si l objet est un double ? : Double.parseDouble(context.getValue("CatchEsp").toString()); En théorie, ça fonctionne tout le temps oui.
Comment fait tu le context.setValue(x) ? De quel type est le "x" quand tu met une valeur dans le context ?
merci d avance !
-- Sigrid LEHUTA ~ ><> ~ Doctorante Département Ecologie et Modèles pour l'Halieutique IFREMER, rue de l'ile d'Yeu BP 21105 44311 Nantes Cedex 03 Tél : +33 (0)2 40 37 41 65 (interne : 8165)
Sigrid LEHUTA a écrit :
Ok je fais comme ca alors.
mon x est un double, voici le code : double CatchEspTot = 0; [...des trucs qui modifient sa valeur] context.setValue("CatchEsp",CatchEspTot); Ok, donc, tu peut faire :
Double.parseDouble(context.getValue("CatchEsp").toString()); L'avantage est que ca fonctionne même si c'est un double, un int, un float... Sinon, si tu es vraiment sûre que c'est toujours un Double, tu peux aussi faire Double CatchEspTot = (Double)context.getValue("CatchEsp"); (a tester) -- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
Suite... ;-) J'utilise la même méthode mais cette fois ci, plus compliqué, l'objet est une list de doubles. comment puis-je la recupérer ? j'ai fait : (qui compile mais est ce que ca marche ??) String strFuelPrice = context.getValue("fuelPrice").toString(); // je suppose que m list en string est comme ca : {1,5,6,3.2} String[] maList = strFuelPrice.split(","); String[] prems = maList[0].split("{"); String[]ders = maList[3].split("}"); double[] fuelprice = StringUtil.toArrayDouble(prems[1], maList[1], maList[2],ders[0]); et ya pas a dire c est pas joli et j aimerais pouvoir faire varier le nombre d'éléments... y'a t'il un moyen de faire ca ?? Merci !! Eric Chatellier <chatellier@codelutin.com> a écrit :
Sigrid LEHUTA a écrit :
bonjour, salut,
j ai un petit soucis avec la methode proposee par benjamin : int MaValeurPourLAutreRegle = Integer.parseInt(context.getValue("MaValeurPourLAutreRegle"));
ca compile pas ??! C:\Documents and Settings\slehuta\isis-database-3\rules\Paita4_20002007suite_Anchois.java:137: cannot find symbol symbol : method parseInt(java.lang.Object) location: class java.lang.Integer CatchEspTot = Integer.parseInt(context.getValue("CatchEsp"));
est ce que c est correct de faire ? : Integer.parseInt(context.getValue("CatchEsp").toString());
et si l objet est un double ? : Double.parseDouble(context.getValue("CatchEsp").toString()); En théorie, ça fonctionne tout le temps oui.
Comment fait tu le context.setValue(x) ? De quel type est le "x" quand tu met une valeur dans le context ?
merci d avance !
-- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
_______________________________________________ Isis-fish-user mailing list Isis-fish-user@lists.labs.libre-entreprise.org http://lists.labs.libre-entreprise.org/mailman/listinfo/isis-fish-user
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Sigrid.Lehuta@ifremer.fr a écrit :
Suite... ;-)
J'utilise la même méthode mais cette fois ci, plus compliqué, l'objet est une list de doubles. comment puis-je la recupérer ? j'ai fait : (qui compile mais est ce que ca marche ??)
String strFuelPrice = context.getValue("fuelPrice").toString(); // je suppose que m list en string est comme ca : {1,5,6,3.2} String[] maList = strFuelPrice.split(","); String[] prems = maList[0].split("{"); String[]ders = maList[3].split("}"); double[] fuelprice = StringUtil.toArrayDouble(prems[1], maList[1], maList[2],ders[0]);
et ya pas a dire c est pas joli et j aimerais pouvoir faire varier le nombre d'éléments... y'a t'il un moyen de faire ca ?? Voilà un code qui est independant du nombre d'éléments :
String strFuelPrice = context.getValue("fuelPrice").toString(); // je suppose que m list en string est comme ca : {1,5,6,3.2} // retrait des {} strFuelPrice = strFuelPrice.substring(1, myList.length() - 1); String[] tabFuelPrice = strFuelPrice.split(","); double[] fuelprice = StringUtil.toArrayDouble(tabFuelPrice);
Merci !! -- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
On Fri, 11 Sep 2009 09:37:22 +0200 Eric Chatellier <chatellier@codelutin.com> wrote: Salut,
Sigrid.Lehuta@ifremer.fr a écrit :
Suite... ;-)
J'utilise la même méthode mais cette fois ci, plus compliqué, l'objet est une list de doubles. comment puis-je la recupérer ? j'ai fait : (qui compile mais est ce que ca marche ??)
String strFuelPrice = context.getValue("fuelPrice").toString(); // je suppose que m list en string est comme ca : {1,5,6,3.2} String[] maList = strFuelPrice.split(","); String[] prems = maList[0].split("{"); String[]ders = maList[3].split("}"); double[] fuelprice = StringUtil.toArrayDouble(prems[1], maList[1], maList[2],ders[0]); ...
Je ne comprend pas bien ce que tu cherches a faire, c toi qui a du mettre "fuelPrice" dans le context avec un context.setValue("fuelPrice", maList); Donc tu devrais faire List<Double> maList = (List<Double>)context.getValue("fuelPrice"); et ensuite tu travails directement avec maList. A moins que lorsque tu dis "list de doubles" tu ne parles pas de List au sens Java :(. Ce qui me ferait dire ca est que le toString d'une liste Java donne des '[' et ']' et non pas des '{' et '}'. Mais dans ce cas la d'ou vient la variable "fuelPrice" qui est dans le context ? (qui la mise la et quel est son type ?) -- Benjamin -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com () campagne du ruban ascii http://www.codelutin.com /\ pour les mails en ascii _______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Benjamin POUSSIN a écrit :
On Fri, 11 Sep 2009 09:37:22 +0200 Eric Chatellier <chatellier@codelutin.com> wrote:
Salut,
Sigrid.Lehuta@ifremer.fr a écrit :
Suite... ;-)
J'utilise la même méthode mais cette fois ci, plus compliqué, l'objet est une list de doubles. comment puis-je la recupérer ? j'ai fait : (qui compile mais est ce que ca marche ??)
String strFuelPrice = context.getValue("fuelPrice").toString(); // je suppose que m list en string est comme ca : {1,5,6,3.2} String[] maList = strFuelPrice.split(","); String[] prems = maList[0].split("{"); String[]ders = maList[3].split("}"); double[] fuelprice = StringUtil.toArrayDouble(prems[1], maList[1], maList[2],ders[0]);
...
Je ne comprend pas bien ce que tu cherches a faire, c toi qui a du mettre "fuelPrice" dans le context avec un context.setValue("fuelPrice", maList);
Donc tu devrais faire
List<Double> maList = (List<Double>)context.getValue("fuelPrice");
et ensuite tu travails directement avec maList.
:-[ Ouais bah ca va, moi j aurais été ravie d'écrire List<Double> maList = (List<Double>)context.getValue("fuelPrice"); mais c'était trop simple, ca n'aurait pas embêté Eric, et puis surtout il aurait fallu savoir que ca s'écrit comme ca !!!!! ;-) (j'avais écrit "(List)context.get..." :-! ) Merci ! (Merci Eric de m'aider dans mes délires syntaxiques ;-))
A moins que lorsque tu dis "list de doubles" tu ne parles pas de List au sens Java :(. Ce qui me ferait dire ca est que le toString d'une liste Java donne des '[' et ']' et non pas des '{' et '}'.
Mais dans ce cas la d'ou vient la variable "fuelPrice" qui est dans le context ? (qui la mise la et quel est son type ?)
-- Benjamin -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com () campagne du ruban ascii http://www.codelutin.com /\ pour les mails en ascii _______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
-- Sigrid LEHUTA ~ ><> ~ Doctorante Département Ecologie et Modèles pour l'Halieutique IFREMER, rue de l'ile d'Yeu BP 21105 44311 Nantes Cedex 03 Tél : +33 (0)2 40 37 41 23 (interne : 8123) _______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Sigrid LEHUTA a écrit :
:-[ Ouais bah ca va, moi j aurais été ravie d'écrire
List<Double> maList = (List<Double>)context.getValue("fuelPrice");
mais c'était trop simple, ca n'aurait pas embêté Eric, et puis surtout il aurait fallu savoir que ca s'écrit comme ca !!!!! ;-) (j'avais écrit "(List)context.get..." :-! )
Merci ! (Merci Eric de m'aider dans mes délires syntaxiques ;-)) Merci benjamin de corriger mes réponses délirantes ;)
-- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com _______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
participants (4)
-
Benjamin POUSSIN -
Eric Chatellier -
Sigrid LEHUTA -
Sigrid.Lehuta@ifremer.fr