Projet

Général

Profil

Actions

Anomalie #3097

fermé

[getParamValue] getParamValue ne marche pas si appelée depuis un document, marche si appelée depuis la famille directement

Ajouté par Emmanuel ESCOLA il y a plus de 13 ans. Mis à jour il y a plus de 13 ans.

Statut:
Intégré
Priorité:
Urgent
Assigné à:
Version cible:
Début:
27/09/2012
Echéance:
% réalisé:

100%

Temps estimé:
Version source:
Solution proposée:

Le problème survint lors lorsque la famille hérite de paramètre d'une autre famille.
Dans le cas où la famille "fille" n'a aucun paramètre défini alors ceux du père ne sont pas récupérés.

Principaux fichiers impactés:
Complexité:
Contrôle:
Thème:
Régression:

Description

Testé en 3.2.12 :

On a un tableau de paramètres pour la famille TESTPARAM :

PARAM param_f_parametres Paramètres N N frame 8000 W 8000
PARAM param_a_criticites param_f_parametres Criticités N N array 8010 W vlabel=none|sorttable=yes
PARAM param_criticite_keys param_a_criticites Clef N N text 8020 W _TEST_PARAM::checkCriticiteKey(param_criticite_keys)
PARAM param_criticite param_a_criticites Criticité N N text 8030 W
PARAM param_seuil param_a_criticites Plafond N N int 8040 W
PARAM param_couleur param_a_criticites Couleur N N color 8050 W

Dans une action on utilise la zone d'édition de paramètres de famille :

[ZONE FDL:EDITFAMILYPARAMETER?famid=TESTPARAM&attrid=PARAM_A_CRITICITES&localSubmit=yes&submitOnChange=yes]

Si on effectue des changements, les changements sont sauvegardés correctement.

Lors du PostModify() sur la famille, on fait un getParamValue pour récupérer le param 'param_seuil' :

Si on le fait directement depuis le document ($this) la valeur retournée est ''
Si on le fait depuis la famille $this->getFamDoc(), la valeur retournée est ''
Si on le fait depuis la famille en faisant un new_doc(idFamille) la valeur retournée est la bonne : '3
6
12
16'


Code php utilisé pour le test :

$famDoc1 = $this->getFamDoc();
$famId = getFamIdFromName("","TESTFAM");
$famDoc2 = new_Doc("",$famId,true);
$paramSeuilsTestFam1 = $famDoc1->getParamValue('param_seuil');
$paramSeuilsTestFam2 = $famDoc2->getParamValue('param_seuil');
$paramSeuils = $this->getParamValue('param_seuil');
error_log(date('Y-m-d H:i:s', time()) . " " . __FILE__ . " : " . __METHOD__ . PHP_EOL . " param fam1 : " . var_export($paramSeuilsTestFam1, true) . PHP_EOL, 3, "debug.log");
error_log(date('Y-m-d H:i:s', time()) . " " . __FILE__ . " : " . __METHOD__ . PHP_EOL . " param fam2 : " . var_export($paramSeuilsTestFam2, true) . PHP_EOL, 3, "debug.log");
error_log(date('Y-m-d H:i:s', time()) . " " . __FILE__ . " : " . __METHOD__ . PHP_EOL . " param doc : " . var_export($paramSeuils, true) . PHP_EOL, 3, "debug.log");

Résultat du error_log :

2012-09-27 15:58:49 /var/www/dynacase/dynacase/FDLGEN/Class.Doc1467.php : _TESTPARAM::updateCriticity
 param fam1 : ''
2012-09-27 15:58:49 /var/www/dynacase/dynacase/FDLGEN/Class.Doc1467.php : _TESTPARAM::updateCriticity
 param fam2 : '3
6
12
16'
2012-09-27 15:58:49 /var/www/dynacase/dynacase/FDLGEN/Class.Doc1467.php : _TESTPARAM::updateCriticity
 param doc : ''

Fichiers

tests_logs (26,2 ko) tests_logs Emmanuel ESCOLA, 28/09/2012 12:39

Mis à jour par Marc Claverie il y a plus de 13 ans

  • Statut changé de Nouveau à À analyser
  • Assigné à mis à Éric Brison
  • Version cible mis à 3.2.1

Mis à jour par Éric Brison il y a plus de 13 ans

Je vois pas trop le rapport entre l'action qui utilise la ZONE EDITPARAMETER et le document.
Dans les exemples "simple" je n'ai pas de soucis.

D'après vos tests, il semble que l'objet en mémoire (getFamDoc) n'a pas le même paramétrage, qu'un nouvel objet famille.

Pouvez-vous me donner plus d'indications sur le contexte ?

   public function postModify()
    {
        $err = parent::postModify();
        if ($err == "") $err = $this->setValue("ent_prix", $this->getCost());
        return $err;
    }
    /**
     * return cost
     * @return float
     */
    public function getCost()
    {
        $nb_adulte = intval($this->getValue("ent_adulte"));
        $nb_enfant = intval($this->getValue("ent_enfant"));
        $prix_adulte = floatval($this->getParamValue("ent_prixadulte"));
        $prix_enfant = floatval($this->getParamValue("ent_prixenfant"));

        $resultat = ($nb_adulte * $prix_adulte) + ($nb_enfant * $prix_enfant);

        return $resultat;
    }

Mis à jour par Emmanuel ESCOLA il y a plus de 13 ans

En refaisant exactement les mêmes tests que hier sur les mêmes documents, cette fois-ci les 3 error_log me retournent les bonnes valeurs.

N'y a-t-il pas un système de cache qui serait utilisé au moment de la sauvegarde des paramètres de famille ?

Faut-il par exemple se délogguer après avior modifié des paramètres de famille ?

Mis à jour par Emmanuel ESCOLA il y a plus de 13 ans

Après d'autres tests en créant un nouveau document, ce cas ne se présente que lorsque le paramètres de famille est setté sans valeurs :

EX : On crée un document qui dans le PostModify() utilise le getParamValue. On a préalablement supprimé toutes les lignes du tableau dans la zone du EDITFAMILYPARAMETER.

Les error_log pour les cas utilisés hier sont :

param fam1 : ''
param fam2 : ''
param doc : ''

Maintenant, on retourne dans la zone du EDITFAMILYPARAMETER et on renseigne des valeurs (4 lignes ajoutées dans le tableau).
On modifie le document qui utilise dans son PostModify() le getParamValue(), et les résultats sont :

param fam1 : ''
param fam2 : '3
6
12
16'
param doc : ''

Mis à jour par Éric Brison il y a plus de 13 ans

J'ai fait des tests avec vos paramètres (sans la contrainte)

Je n'ai eu aucune erreur. Dans tous les cas, j'ai obtenu la bonne réponse pour les trois cas en modifiant depuis l'interface d'administration depuis le document famille

public function postModify()
  {
$n="param_seuil";
$a=$this->getParamValue($n);
$b=$this->getFamDoc()->getParamValue($n);
$ff=new_doc($this->dbaccess, $this->fromid);
$c=$ff->getParamValue($n);
addLogMsg(array("a"=>$a,"b"=>$b,"c"=>$c));
}

Mis à jour par Emmanuel ESCOLA il y a plus de 13 ans

Je pense avoir trouvé d'où ça vient. Je te joins le fichier de tests.

En fait je pense que c'est un problème d'héritage, c'est pour ça que j'ai refait les tests avec des documents de deux familles distinctes :

Dans notre cas, on a une famille RISQUE_DOC_TRAVAIL qui hérite de la famille RISQUE qui elle même hérite de Doc. Les paramètres de famille sont définis dans la famille RISQUE.

Quand on fait les manips décrites précédemment sur la famille RISQUE, le getParamValue retourne les bonnes valeurs que ce soit après avoir modifié les paramètres par "Valeurs par défaut et paramètres" ou par la zone EDITFAMILYPARAMETER.

Par contre, quand on fait les manips sur la famille RISQUE_DOC_TRAVAIL le getParamValue retourne les bonnes valeurs après avoir modifié les paramètres par "Valeurs par défaut et paramètres" mais retourne une valeur vide si on les modifie par la zone EDITFAMILYPARAMETER.

Dans le fichier de tests, doc est le document en cours, famDoc1 est la famille en cours, famDoc2 est la famille RISQUE.

Mis à jour par Éric Brison il y a plus de 13 ans

  • Solution proposée mis à jour (diff)

Mis à jour par Éric Brison il y a plus de 13 ans

  • Statut changé de À analyser à Analysé

Mis à jour par Éric Brison il y a plus de 13 ans

  • Statut changé de Analysé à Intégré
  • % réalisé changé de 0 à 100

Appliqué par commit commit:a6c3f211fccb382efe95e9e9af0684fbaab97fc8.

Actions

Formats disponibles : Atom PDF