AXOPEN

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 :

function GetCurrentDashboardClass(){
var CurrentDashboard = "OpxDashboard".get(GetCurrentDashboardId());
if(CurrentDashboard InstanceOf OpxDashboard){
var Dashboard_Class = CurrentDashboard.Object_class;
var OpxDashboard_Class = "opx" + Dashboard_Class;
return OpxDashboard_Class.findclass().Name.ToString();
}
}
GetCurrentDashboardClass.exportfunction("","String");

Et en 5.3.2.10 on est passé à :

function GetCurrentDashboardClass(void){
var CurrentDashboard = "OpxDashboard".get(GetCurrentDashboardId());
if(CurrentDashboard InstanceOf OpxDashboard){
var Dashboard_Class = CurrentDashboard.Object_class;
var OpxDashboard_Class = "opx" + Dashboard_Class;
return OpxDashboard_Class.findclass().Name.ToString();
}
}
GetCurrentDashboardClass.exportfunction({"string"},"String");

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.