Cegid XRP Ultimate  |  
I3   Actualisé le 06/10/2022
XLinks - ETL
Thème "Erreurs et avertissements"

Méthode "getFunctionalErrorsCount()"
Méthode "getFunctionalWarningsCount()"
Méthode "getTechnicalErrorsCount()"
Méthode "getTechnicalWarningsCount()"
Méthode "logFunctionalError(String, String, Object...)"
Méthode "logFunctionalErrorWithCause(String, Throwable, String, Object...)"
Méthode "logFunctionalWarning(String, String, Object...)"
Méthode "logFunctionalWarningWithCause(String, Throwable, String, Object...)"
Méthode "throwFunctionalError(String, String, Object...)"
Méthode "throwFunctionalErrorWithCause(String, Throwable, String, Object...)"

   Ensemble des méthodes et macros disponibles dans le thème "Erreurs et avertissements".

   Les anomalies peuvent prendre des formes et des degrés de sévérités divers selon les circonstances. Nous distinguons deux grandes familles : les anomalies fonctionnelles d'une part et les anomalies critiques d'autre part.

   Anomalie fonctionnelle

   Une anomalie qualifiée de fonctionnelle est une anomalie levée volontairement par l'auteur de l'interface suite à la détection d'une incohérence ou d'une non-conformité dans les données traitées. Par exemple, donnée non renseignée, valeur non numérique...

   Anomalie technique

   Les anomalies techniques sont des anomalies dues au dysfonctionnement d'une instruction du programme, la plupart du temps suite à une situation inattendue ou que l'on ne sait pas gérer.
Elle est liée au fonctionnement du moteur et non pas à la logique du programme. L'utilisateur ne peut pas lever d'anomalie technique via une instruction du programme, c'est le moteur qui les génère.

Méthode "getFunctionalErrorsCount()"

Signature
long getFunctionalErrorsCount()

Description
Renvoie le nombre d'erreurs fonctionnelles rencontrées.

Une anomalie qualifiée de fonctionnelle est une anomalie levée volontairement, nécessairement par des instructions dédiées dans le programme, suite à la détection d'une incohérence ou d'une non-conformité dans les données traitées.

Exemple :
Dans cet exemple, nous supposons un flux de données entrant dans la transformation, constitué de tiers (GTIE). Chaque tiers est matérialisé par la balise "TIE" et possède comme attributs ceux de la gestion. Nous effectuons des contrôles sur certains attributs du premier tiers trouvé et levons des erreurs fonctionnelles si les tests révèlent des anomalies par rapport aux valeurs attendues, etc.

//Récupération du premier tiers présent dans le flux
//Pour mémoire, la méthode "selectFirstItem" renvoie une copie de cet élément qui n'inclut pas les éléments fils éventuels. Il s'agit d'une facilité permettant de mémoriser l'ensemble des attributs d'un élément du flux
SelectionItemSnapshot firstData = selectFirstItem("/Query/TIERS");

report("Validation fonctionnelle du tiers [$1]", firstData.attr("numoetie"));

//Test sur le collectif commun
if (xtString.isEmpty(firstData.attr("cocoetie"))) {
  xtError.logFunctionalError("005","Le collectif commun du tiers n'est pas renseigné");
} else {
  report("--> Collectif commun renseigné");
}

//Test sur la devise
if (xtString.isEmpty(firstData.attr("devoetie"))) {
    xtError.logFunctionalError("008","La devise du tiers n'est pas renseignée");
} else {
  report("--> Devise renseignée");
}

//Test sur le collectif 3
if (!"C1".equals(firstData.attr("co3oetie"))) {
    xtError.logFunctionalError("010","Le collectif 3 du tiers n'a pas la valeur attendue [C1]. valeur trouvée [$1]", firstData.attr("co3oetie"));
} else {
  report("--> Collectif 3 renseigné");
}

//Affichage du nombre d'erreurs fonctionnelles
report("Nombre d'erreurs fonctionnelles détectées : $1", xtError.getFunctionalErrorsCount());

free(firstData);

Résultat obtenu dans le journal fonctionnel

13:43:02 Validation fonctionnelle du tiers [A00002673]
13:43:02 <ERR num="1" code="005"><message>Le collectif commun du tiers n'est pas renseigné</message></ERR>
13:43:02 --> Devise renseignée
13:43:02 <ERR num="2" code="010"><message>Le collectif 3 du tiers n'a pas la valeur attendue [C1]. valeur trouvée []</message></ERR>
13:43:02 Nombre d'erreurs fonctionnelles détectées : 2

Résultat obtenu dans le journal fonctionnel
<?xml version="1.0" encoding="UTF-8" ?> <Errors>
<ERR num="1" code="005"> <message>Le collectif commun du tiers n'est pas renseigné</message></ERR>
<ERR num="2" code="010"> <message>Le collectif 3 du tiers n'a pas la valeur attendue [C1]. valeur trouvée []</message></ERR>
<Recap count="2/> </Errors>

Résultats
long - Nombre d'erreurs fonctionnelles.

Depuis
1.0

Méthode "getFunctionalWarningsCount()"

Signature
long getFunctionalWarningsCount()

Description
Renvoie le nombre d'avertissements fonctionnels rencontrés.

Exemple :

xtError.logFunctionalWarning("012","This is the first functional warning");
report("Functional warnings count : $1", xtError.getFunctionalWarningsCount());

Résultat dans le journal des traces fonctionnelles

14:15:32 Functional warnings count : 1

Résultat dans le journal des avertissements fonctionnels

<?xml version="1.0" encoding="UTF-8" ?>
<Warnings><?xml version="1.0" encoding="UTF-8" ?>
<Warnings>
<WRN num="1" code="012">
<message>This is the first functional warning</message></WRN>
</Warnings>

Résultats
long - Nombre d'avertissements fonctionnels.

Depuis
1.0

Méthode "getTechnicalErrorsCount()"

Signature
long getTechnicalErrorsCount()

Description
La méthode renvoie le nombre d'erreurs techniques rencontrées.

Exemple :

try {
  // Nous générons ici une erreur de façon artificielle via un "throw".
  // Cela étant, l'idée est ici de capturer toute erreur inattendue qui surviendrait et de la considérer comme une erreur technique.
  throw new NullPointerException ("This is a custom error");
} catch (Throwable t) {
  xtError.logTechnicalErrorWithCause("010",t,"An error occured");
}
// Nous affichons le nombre d'erreurs techniques
report("Nombre d'erreurs techniques [$1]", xtError.getTechnicalErrorsCount());

Le résultat obtenu est le suivant :

Dans le journal des traces fonctionnelles (compte rendu)

16:22:54 <ERR num="1" code="010" class="java.lang.NullPointerException"><cause>This is a custom error</cause><message>An error occured</message></ERR>
16:22:54 Nombre d'erreurs techniques [1]

Dans le journal des traces techniques (rapport)

16:57:49 ...........<ERR num="1" code="010" class="java.lang.NullPointerException"><cause>This is a custom error</cause><message>An error occured</message></ERR>

Dans le journal des erreurs techniques
<ERR num="1" code="010" class="java.lang.NullPointerException"> <cause>This is a custom error</cause> <message>An error occured</message> <stack> Class java.lang.NullPointerException com.qualiac.embedded.qetl.gtttsty2.TUCONVERSION1, m. main, l. 36 com.qualiac.embedded.qetl.gtttsty2.TUCONVERSION1, m. execute, l. 24 com.qualiac.embedded.qetl.engine.Conversion, m. runDirectives, l. 752 com.qualiac.embedded.qetl.engine.Conversion, m. execute, l. 589 com.qualiac.embedded.qetl.engine.Conversion, m. execute, l. 548 com.qualiac.embedded.qetl.engine.QETLInterface, m. execute, l. 362 com.qualiac.embedded.qetl.engine.QETLInterfaceRunner, m. execute, l. 386 com.qualiac.embedded.qetl.engine.QETLInterfaceRunner, m. runUsingCurrentEngine, l. 265 sun.reflect.NativeMethodAccessorImpl, m. invoke0, l. -2 sun.reflect.NativeMethodAccessorImpl, m. invoke, l. 62 sun.reflect.DelegatingMethodAccessorImpl, m. invoke, l. 43 java.lang.reflect.Method, m. invoke, l. 498 com.qualiac.qetl.engine.QETLInterfaceRunner, m. invokeRunMethod, l. 123 com.qualiac.qetl.engine.QETLInterfaceRunner, m. runUsingEmbeddedEngine, l. 91 com.qualiac.qetl.engine.QLnr, m. runInterface, l. 96 com.qualiac.qetl.engine.QLnr, m. executeImpl, l. 79 com.qualiac.qetl.engine.QETLProcess, m. execute, l. 68 com.qualiac.qetl.engine.QLnr, m. main, l. 56</stack></ERR>
...

Résultats
long - Nombre d'erreurs techniques.

Depuis
1.0

Méthode "getTechnicalWarningsCount()"

Signature
long getTechnicalWarningsCount()

Description
Renvoie le nombre d'avertissements techniques rencontrés.

Pour mémoire, les anomalies techniques sont des anomalies dues au dysfonctionnement d'une instruction du programme. Elle est liée au fonctionnement du moteur et non pas à la logique du programme. L'utilisateur ne peut pas lever d'anomalie technique via une instruction du programme, c'est le moteur qui les génère.

L'avertissement correspond à la détection d'une singularité, mais qui n'a pas nécessairement d'incidence sur la suite de l'exécution. On la signale tout de même afin d'attirer l'attention des opérateurs sur une situation potentiellement pathogène.

Exemple :

report("Technical warnings count : [$1]", xtError.getTechnicalWarningsCount());

Résultat obtenu dans le journal fonctionnel

Technical warnings count : [0]

Résultats
long - Nombre d'avertissements techniques.

Depuis
1.0

Méthode "logFunctionalError(String, String, Object...)"

Signature
void logFunctionalError(String errorCode, String message, Object... msgParams)

Description
Permet d'écrire un nouveau message d'erreur fonctionnelle dans le fichier résultat. Si aucun autre problème n'a été rencontré, le job se terminera à l'état "Terminé" et aura le statut "Erreurs fonctionnelles".

Exemple :
xtError.logFunctionalError("ERR001", "Functional error");    // Display "Functional error" in the result file
xtError.logFunctionalError("ERR001", "Functional error [$1]-[$2]", "ERR", 1); // Display "Functional error [ERR]-[1]" in the result file

Paramètres
String errorCode - Code du message d'erreur.
String message - Message d'erreur.
Object... msgParams - Liste des paramètres du message d'erreur (facultatif).

Depuis
1.0

Méthode "logFunctionalErrorWithCause(String, Throwable, String, Object...)"

Signature
void logFunctionalErrorWithCause(String errorCode, Throwable cause, String message, Object... msgParams)

Description
Permet d'écrire un nouveau message d'erreur fonctionnelle dans le fichier résultat avec une exception que l'on souhaite tracer. Si aucun autre problème n'a été rencontré, le job se terminera à l'état "Terminé" et aura le statut "Erreurs fonctionnelles".

Exemple :
try {
   BigDecimal result = xtNumber.divide(1,0);
   report("Divide successful");
} catch(Throwable e) {
   xtError.logFunctionalErrorWithCause("ERR001", e, "Functional error with cause");
}

Paramètres
String errorCode - Code du message d'erreur.
Throwable cause - Exception à ajouter au message.
String message - Message d'erreur.
Object... msgParams - Liste des paramètres du message d'erreur (facultatif).

Depuis
1.0

Méthode "logFunctionalWarning(String, String, Object...)"

Signature
void logFunctionalWarning(String warningCode, String message, Object... msgParams)

Description
Permet d'écrire un nouveau message d'avertissement fonctionnel dans le fichier résultat.

Exemple :
xtError.logFunctionalWarning("WRN001", "Functional warning");   // Display "Functional warning" in the result file
xtError.logFunctionalWarning("WRN001", "Functional warning [$1]-[$2]", "WRN", 1);
// Display "Functional warning [WRN]-[1]" in the result file

Paramètres
String warningCode - Code du message d'avertissement.
String message - Message d'avertissement.
Object... msgParams - Liste des paramètres du message d'avertissement (facultatif).

Depuis
1.0

Méthode "logFunctionalWarningWithCause(String, Throwable, String, Object...)"

Signature
void logFunctionalWarningWithCause(String warningCode, Throwable cause, String message, Object... msgParams)

Description
Permet d'écrire un nouveau message d'avertissement fonctionnel dans le fichier résultat avec une exception que l'on souhaite tracer.

Exemple :
try {
   BigDecimal result = xtNumber.divide(1,0);
   report("Divide successful");
} catch(Throwable e) {
   xtError.logFunctionalWarningWithCause("WRN001", e, "Functional warning with cause");
}

Paramètres
String warningCode - Code du message d'avertissement.
Throwable cause - Exception à ajouter au message.
String message - Message d'avertissement.
Object... msgParams - Liste des paramètres du message d'avertissement (facultatif).

Depuis
1.0

Méthode "throwFunctionalError(String, String, Object...)"

Signature
void throwFunctionalError(String errorCode, String message, Object... msgParams)

Description
Une anomalie qualifiée de fonctionnelle est une anomalie levée volontairement, nécessairement par des instructions dédiées dans le programme, suite à la détection d'une incohérence ou d'une non-conformité dans les données traitées.

Cette méthode permet de lancer une exception de type FunctionalError. Si cette exception n'est pas stoppée (mécanique de try / catch), l'interface se terminera à l'état T mais signalera une erreur fonctionnelle.

Exemple :

xtError.throwFunctionalError("021","Test erreur fonctionnelle bloquante");

Dans le compte rendu fonctionnel

14:59:47 <ERR num="1" code="021" class="com.qualiac.embedded.qetl.service.FunctionalError"><cause>Test erreur fonctionnelle bloquante</cause><message>PROGRAM WAS STOPPED BY A FATAL FUNCTIONNAL ERROR : [[CODE:021] Test erreur fonctionnelle bloquante]</message></ERR>

Paramètres
String errorCode - Code du message d'erreur.
String message - Message d'erreur.
Object... msgParams - Liste des paramètres du message d'erreur (facultatif).

Exceptions
FunctionalError

Depuis
1.0

Méthode "throwFunctionalErrorWithCause(String, Throwable, String, Object...)"

Signature
void throwFunctionalError(String errorCode, Throwable cause, String message, Object... msgParams)

Description
Une anomalie qualifiée de fonctionnelle est une anomalie levée volontairement, nécessairement par des instructions dédiées dans le programme, suite à la détection d'une incohérence ou d'une non-conformité dans les données traitées.

Permet de lancer une exception de type FunctionalError en s'appuyant sur une autre exception origine. Si cette exception n'est pas gérée par le programme, le job se terminera en erreur avec le statut "Erreurs fonctionnelle".

Exemple :

try {
   BigDecimal result = xtNumber.divide(1,0);
   report("Divide successful");
} catch(Throwable e1) {
   report("Divide error");
   xtError.throwFunctionalErrorWithCause("ERR010", e1, "Functional error");
}

Paramètres
String errorCode - Code du message d'erreur.
Throwable cause - Exception à ajouter au message.
String message - Message d'erreur.
Object... msgParams - Liste des paramètres du message d'erreur (facultatif).

Exceptions
FunctionalError

Depuis
1.0