Dans cet article


Offres d'emploi

Tags

Planisware : erreur sur l’évaluation du FORMULA_CACHE

Planisware : erreur sur l’évaluation du FORMULA_CACHE

Problématique

Lors d’une montée de version applicative sous Planisware (standard Processes ou paramétrage spécifique) on a parfois des erreurs d’évaluation de formules au démarrage. En effet, si l’on a par exemple modifié le format des arguments d’une fonction et que celle-ce a déjà été évaluée et stockée dans la table FORMULA_CACHE, on aura à chaque démarrage des erreurs dans les logs.

Exemple d’erreur :

[02/01/2015 10:08:35.296] - Main process - Formule incorrecte: GetCurrentDashboardClass() = "DATASET" de type BOOLEAN sur l'entité Rapport, erreur: Mauvais nombre d'arguments à l'appel de la fonction GETCURRENTDASHBOARDCLASS

Dans cet exemple c’est la modification des arguments de la fonction GetCurrentDashboardClass() entre Processes 5.3.2.7 et 5.3.2.10 qui est à l’origine de cette erreur. Ce genre d’erreur apparait lorsque Planisware charge le contenu de la table FORMULA_CACHE.

En 5.3.2.7 on avait :

<span >GetCurrentDashboardClass</span>(){</span>
<span >get</span>(<
wbr />GetCurrentDashboardId());</span>
<span >if(CurrentDashboard InstanceOf OpxDashboard){</span>
<span >var Dashboard_Class = CurrentDashboard.Object_class;</span>
<span  + Dashboard_Class;</span>
<span >return OpxDashboard_Class.findclass()<
wbr />.Name.ToString();</span>
<span >}</span>
<span >}</span>
<span </span>);</span>

Et en 5.3.2.10 on est passé à :

<span >GetCurrentDashboardClass</span>(void)<
wbr />{</span>
<span >get</span>(<
wbr />GetCurrentDashboardId());</span>
<span >if(CurrentDashboard InstanceOf OpxDashboard){</span>
<span >var Dashboard_Class = CurrentDashboard.Object_class;</span>
<span  + Dashboard_Class;</span>
<span >return OpxDashboard_Class.findclass()<
wbr />.Name.ToString();</span>
<span >}</span>
<span >}</span>
<span </span>);</span>

Comme cette fonction est utilisée dans des formules qui ont été évaluées en 5.3.2.7 et stockées dans le FORMULA_CACHE une fois passé en 5.3.2.10 on aura donc des erreurs au démarrage comme indiqué plus haut.

 

Solution proposée

La solution qui nous semble la plus simple est celle consistant à prévoir une purge de la table FORMULA_CACHE après chaque montée de version, application arrêtée et avant de redémarrer les services.

Sous Oracle, cette purge peut être réalisée dans le schéma de base de données de l’application Planisware via la commande suivante :

SQL> truncate table FORMULA_CACHE;

Elle aura pour effet de supprimer le cache d’évaluation des formules qui sera reconstitué automatiquement au démarrage et au cours de l’utilisation de l’application.

Remarque :

Cette solution ne remplace bien entendu pas la purge du cache Planisware qui est impérative lorsque l’on modifie le paramétrage et/ou le noyau Planisware.

L'équipe AXOPEN

Voir aussi les articles suivants

Description Lorsque l’on travaille sur des objets scripts OPX2 au bout d’un certain nombre de vérifications/exécutions des scripts il arrive fréquemment que le client lourd P5 affiche un message d’erreur. du type suivant : Cause Il s’agit globalement d’un problème de saturation mémoire car le client lourd présente des difficultés à libérer/recycler la mémoire RAM utilisée. Résolution La solution la plus simple et la plus radicale est de réaliser les opérations suivantes :
Lire l'article

OJS : le caractère « retour chariot »

OJS : le caractère « retour chariot »

Le 28/05/2014 par Thibault Gonin

Problématique Lors de développements spécifiques en OPX2 Javascript (sous Planisware) on peut être amené à utiliser le caractère « retour chariot » ou « retour à la ligne ». A quoi sert-il sous Planisware ? Ce caractère spécial se traduit en OJS sous la forme suivante : "get_char".callmacro(10) Le nombre ’10’ utilisé comme argument de la fonction correspond au code ASCII du retour à la ligne. Utilisation On peut être ammené à rechercher ce caractère dans différents cas comme par exemple :
Lire l'article

Planisware : comment utiliser le script de suppression des transactions inutiles ?
Introduction Planisware génère des transactions liées à l’utilisation du progiciel (créations, modifications, suppressions, calculs etc..). Ces transactions permettant notamment de synchroniser les données modifiées d’un processus Planisware aux autres. Elles permettent aussi une traçabilité technique des actions réalisées dans l’application. Cependant pour limiter la volumétrie de la table des transactions il est nécessaire de supprimer les transactions dites « inutiles », c’est à dire toutes celles qui concernent pas la dernière modification d’un objet Planisware.
Lire l'article