ERP en LOGICIEL LIBRE dédié aux PME-PMI

           Devenez partenaire Principal ou Majeur de Neogia

Documentation Gestion des message d'erreur

Dans le but de permettre à tous les modules d'accéder aux ApplicationLog ( messages d'erreurs) généré par votre application , un écran a été développé. Cet écran est localisé dans : framework/common/widget/ApplicationLogScreens.xml ViewApplicationLog Vous aurez alors besoin d'inclure cet écran. Voici l'exemple d'un écran incluant l'écran ViewApplicationLog

<screen name="ViewApplicationLogPendingScreen">
       <section>
           <actions>
               <set field="descriptionMain" value="Party"/>
               <set field="headerItem" value="Party"/>
               <set field="subComponent"  value="party"/>
               <set field="tabButtonItem" value="MessageLogView"/>
               <set field="partyId" from-field="parameters.partyId"/>
               <set field="fromPage" value="ViewApplicationLogPending"/>
           </actions>
           <widgets>
               <section>
                   <widgets>
                       <decorator-screen name="CommonPartyDecorator"  location="${parameters.mainDecoratorLocation}">
                           <decorator-section name="body">
                           	<include-screen name="ViewApplicationLog" location="component://common/widget/ApplicationLogScreens.xml"/>                            	
                           </decorator-section>
                       </decorator-screen>
                   </widgets>
               </section>
           </widgets>
       </section>
   </screen>

L'écran ViewApplicationLog à deux paramètres optionnels:

 - applicationLogPartyId
 - runId

Le premier paramètre est initialisé avec le "partyId" de l'utilisateur connecté , il permet de voir seulement les ApplicationLog que l'utilisateur possède la permission de vision et qui sont encore au statut "En attente". Le second paramètre est utilisé pour restreindre les ApplicationLog visible, c'est à dire que seulement les ApplicationLog avec le runId specifié seront visible Le runId est l'identifiant de tous les processus lancés par un service. Par exemple si nous lançons le service "calculateMultiProductCost" un runId est généré par la commande :

"runId = delegator.getNextSeqId("ApplicationLog.runId");" 

Ce paramètre est ensuite mis dans le context et toutes les applications lancées par ce service auront ce runId en paramètre :

calculateCostPrice(DispatchContext ctx, String productId, List budgetCodeList, Timestamp dateRef, 
   		                      String currencyUomId, String facilityIdName, String productPricePurposeId, String productStoreGroupId, 
   		                      boolean multiLevelMode, boolean overrideExistingCostPrice, GenericValue userLogin, Locale locale,String runId)

Si aucun de ces paramètres n'a été rempli le formulaire appartenant à l'écran affichera tous les ApplicationLog en base

Quand le paramètre applicationLogPartyId est rempli et que l'utilisateur à la permission de modification une case à cocher est visible à la fin de la ligne. Grâce a la case à cocher en bas du formulaire , il est possible de changer le statut des ApplicationLog ayant étant sélectionné en "Lu" ( Ces ApplicationLog avec ce statut ne seront plus visible )

On peut voir un paramètre supplémentaire dans l'écran ViewApplicationLogPendingScreen : "fromPage" . Ce paramètre est nécessaire pour le formulaire dans le champ "paginate-target" appartenant à l'écran ViewApplicationLog. Il est utilse pour utiliser les flèches ( suivant, précédant ) quand il y a beaucoup d'ApplicationLog en base.

The ApplicationLog contain all this field :

discriminator(String,VARCHAR(20)) :  	
idName(String,VARCHAR(20)) *: 	
logMessage(String,VARCHAR(255)) : 	
logModule(String,VARCHAR(255)) : 	
logTime(java.sql.Timestamp,TIMESTAMP) : 	
runId(String,VARCHAR(20)) : 	
logLevelEnumId(String,VARCHAR(20)) : 	
logCodeIdName(String,VARCHAR(20)) : 	
statusStatusId(String,VARCHAR(20)) : 	
prdtProductId(String,VARCHAR(20)) : 	
partyId(String,VARCHAR(20)) : 	
nFacilityIdName(String,VARCHAR(20)) 

Quand un ApplicationLog a besoin d'être crée vous pouvez utilisez la commande suivante :

ApplicationLog app=ApplicationLogServices.createLog(delegator,"APPLL_ERROR","Manufacturing_PPNE","ManufacturingProductPriceNotExist",module,runId);
               app.setProduct(productId);
               ApplicationLogServices.log(app,false);

"APPLL_ERROR" est le niveau d'erreur d'un ApplicationLog ( il y en a plusieurs : "APPLL_FATAL" ,"APPLL_INFO" , "APPLL_WARNING" , "APPLL_ERROR" ,"APPLL_ALERT" ) Ces niveaux appartiennent aux ApplicationLogLevel donc vous ne pourrez pas utiliser autre chose que ceux pré-cités.

"ManufacturingProductPriceNotExist" est le logMessage

"Manufacturing_PPNE" est le logCodeIdName de l'erreur , il est lié à l'identifiant d'un ApplicationLogCode. Pour utiliser un tel identifiant de code d'erreur vous aurez besoin de le créer manuellement grâce aux "webtools". Autrement dis si vous voulez créer un ApplicationLog ayant pour logCodeIdName "X" alors vous devrez avoir un ApplicationLogCode en base ayant pour identifiant "X" autrement cela ne marchera pas.

Un ApplicationLogCode contient tous les champs suivant :

idName(String,VARCHAR(20)) *:  	 -> le nom de l'identifiant ( lié a logCodeIdName de ApplicationLog) 
description(String,VARCHAR(100)) : 	 -> description de l'erreur ( utilisé seulement lorsque l'uiLabel n'existe pas )
hasTable(String,CHAR(1)) : 	         -> boolean, mettre Y si c'est lié a un log spécifique ( comme MrpRunLog par exemple)
entity(String,VARCHAR(100)) : 	         -> nom de l'entité ayant un log spécifique ( utilisé seulement si hasTable=Y, MrpRunLog for exemple )
uiLabel(String,VARCHAR(100)) : 	 -> nom du label correspondant dans  votre fichier *UiLabel.properties , permet d'avoir une description international  
url(String,VARCHAR(255)) :              -> url qui à généré l'ApplicationLog, permet de retourner au déclenchement de l'erreur grâce à un hyperlien           construit via cet url et les paramètre si il y en a
 

Il y a également 3 "setter" qui peuvent être utile quand le label ou l'url contient des paramètres:

 -setProduct    ->     permet de donner une valeur au champ prdtProductId de l'ApplicationLog
 -setParty      ->     permet de donner une valeur au champ partyId de l'ApplicationLog
 -setNFacility  ->     permet de donner une valeur au champ nFacilityIdName de l'ApplicationLog

Par exemple si votre nom de label est : "error1", la valeur du label est : " l'erreur a été généré à cause de ${prdtProductId} " et que vous avez exécuter le "setter" app.setProduct("MRP_TABLE") le label affiché dans le formulaire sera : l'erreur a été généré à cause de MRP_TABLE

!! ATTENTION vous devrez exécuter "ApplicationLogServices.log(app,false)" pour enregistrer l'ApplicationLog sinon il ne sera pas présent dans la base !!

Si vous N'avez PAS besoin de paramètres ( seulement dans ce cas ! ) dans l'uiLabel ou l'url vous pouvez alors utiliser :

ApplicationLog app=ApplicationLogServices.log(delegator, logLevel, logCodeId, message, logModule, boolean rollbackable, runId)

Cette commande créera automatiquement un ApplicationLog et l'enregistrera dans la base de données.