<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'en ai un bizarre aujourd'hui.....
J'ai travaillé avec plusieurs scripts JSL... chacun d'eux a plusieurs appels Open Database()... et si l'Open Database échoue pour une raison quelconque.. J'ai toujours vu des entrées dans le fichier journal concernant le problème...J'ai ensuite emprunté le code de log_execute_sql.jsl que j'ai trouvé quelque part... et j'ai essentiellement lu les 10 dernières lignes du fichier de journal et affiché des boîtes de dialogue pour les utilisateurs si une erreur se produisait....
Chacun de ces scripts est associé à une interface utilisateur....
aujourd'hui, j'ai commencé à travailler avec un nouveau script, et il semble ne pas écrire les erreurs Open Database() dans le journal, mais plutôt lancer des boîtes de dialogue JMP ALERT .. ce qui est plutôt sympa, mais pas assez convivial... et je voudrais utiliser ma fonction pour vérifier les erreurs....
Existe-t-il une méthode pour contrôler si ceux-ci vont dans le journal ou non ??? La seule différence que je peux voir dans ce nouveau script dont j'ai hérité est qu'il n'effectue aucun appel à la base de données avant l'apparition de l'interface utilisateur... Si je fais un appel Open Database() AVANT que la nouvelle fenêtre ne soit rendue et définie/remplie... l'erreur est dans le journal... Intéressant!! comment puis-je lui faire TOUS les écrire dans le journal .. ??
Je vois cela dans JMP9 et JMP12…
C'est un peu étrange, car je ne vois pas ces choses dans plusieurs autres scripts de complément avec lesquels nous avons travaillé ces derniers temps…
En ce qui concerne ce script spécifique… Je ne trouve rien de différent à propos des appels DB (Open Database()), mais si l'interface utilisateur ne s'est pas encore présentée, l'erreur va dans le fichier journal…
Si l'interface utilisateur est présentée et que l'utilisateur interagit avec elle... tout d'un coup, ces erreurs ne sont pas consignées dans le journal, mais sont affichées de manière interactive.
Ce qui bien sûr entraîne d'autres erreurs, car nous n'avons pas pu récupérer l'erreur du journal comme nous l'avons fait pour tous nos autres scripts…
Pendant que je teste, j'ai ajouté un appel DB avant l'apparition de l'interface utilisateur (via new Window()).
Et bien sûr, l’erreur est consignée dans le journal et je peux la piéger….
// Testez la connexion à la base de données et signalez s'il y a une erreur....
// Bizarrement, ce script n'écrit pas TOUTES les erreurs de base de données dans le fichier journal, alors assurons-nous au moins que nous pouvons nous connecter correctement.
dbTestQuery = "sélectionnez SYSDATE depuis dual" ;
si (Version < 11,
dtTest = Ouvrir la base de données (
"DSN="||DSN_NOM||"",
dbTestRequête
);
, /// Sinon, nous pouvons utiliser la directive Invisible ici
dtTest = Ouvrir la base de données (
"DSN="||DSN_NOM||"",
dbTestRequête,
Invisible // Ce DataTable ne sera pas visible, mais s'affichera dans la liste des fenêtres
);
);
_DBError=checkLogForODBCErrors("dbConnectTest");
print("dbTest DBError=" || char( DBErreur)) ;
// ferme la source de données car nous avons déjà récupéré les données de la table
fermer(dtTest, "nosave");
print("Connexion DB fermée : dbTest");
Ensuite, je peux présenter à l'utilisateur un message d'erreur plus significatif, ET l'utiliser après l'appel DB pour vérifier que nous avons eu une erreur ou non…
/*
Vérifiez le fichier journal JMP pour les erreurs après les appels à la base de données
*/
checkLogForODBCErrors = Fonction(,
// OK, nous sommes prêts à partir maintenant.
// clearlog();
// Vérifiez la fenêtre de journal pour les erreurs ODBC
enregistrer contenu = obtenir le journal (-10); // Récupère les 20 dernières lignes du Log
trouvé erreur = 0 ;
// Rechercher les erreurs [ODBC Driver Manager]
// ou
// Rechercher les erreurs [VerticaDSII]
// ou
// Recherchez "Authentification LDAP"
pour (i = 1, i <= nitems(_log_contents), i++,
si (contient (_log_contents , "[Microsoft][ODBC Driver Manager]"), // Recherche de ces erreurs
trouvé erreur = 1 ;
extraErrorMessageText="Veuillez vérifier la configuration de votre source de données ODBC et assurez-vous d'avoir nommé votre DSN=" || DSN_NAME || "." ||
"Vérifiez également que votre nom d'utilisateur et votre mot de passe sont corrects. et les tests de connexion avec succès";
casser();
, // autre
si (contient (_log_contents , "[Vertica][VerticaDSII]"), // Recherche de ces erreurs
trouvé erreur = 1 ;
extraErrorMessageText="Il semble y avoir un problème de connexion à la base de données à l'aide de Data Source Name=" || DSN_NAME || "." ;
casser();
, // AUTRE
si (contient (_log_contents , "Authentification LDAP"), // Recherche de ces erreurs
trouvé erreur = 1 ;
extraErrorMessageText="Veuillez vérifier la configuration de votre source de données ODBC pour DSN : " || DSN_NAME || "." ||
"Et vérifiez que votre nom d'utilisateur et votre mot de passe sont corrects.";
casser();
,
si (contient (_log_contents , "FATAL"), // Recherche de ces erreurs
trouvé erreur = 1 ;
extraErrorMessageText="Veuillez vérifier la configuration de votre source de données ODBC pour DSN : " || DSN_NAME || "." ||
"Et vérifiez que votre nom d'utilisateur et votre mot de passe sont corrects.";
casser();
);
);
);
);
);
si (_found_error,
// alors
// Imprime des informations utiles dans le journal
print("Complément : " || addinName);
print("DSN : " || DSN_NAME);
print("_Caller : " || _Caller);
_nw = nouvelle fenêtre("MFG360 : Erreur DB", << modal,
textbox("L'erreur suivante s'est produite dans " || _Caller || ": "),
zone de texte(""),
zone de texte (_log_contents ),
zone de texte(""),
zone de texte (extraErrorMessageText),
zone de texte(""),
textbox("Si demandé, veuillez envoyer le contenu de la fenêtre du journal JMP au support technique." ||
" Pour voir la fenêtre Journal, cliquez sur Affichage > Journal puis Fenêtre > Journal.")
);
);
trouvé erreur; // Renvoie 1 (Vrai) ou 0 (Faux) ....
);
Je viens d'effectuer un test sur l'un de nos autres scripts en fonction de ce que je découvre… et je vois le même comportement….
Tous les appels de base de données APRÈS que l'interface utilisateur soit opérationnelle, semblent présenter des alertes JMP interactives, mais rien ne va dans le fichier journal.. ??
Cela interrompt en quelque sorte ma gestion des erreurs….. et je devrai ajouter plus de tests de validation pour vérifier le DataTable renvoyé, je suppose….??
À moins qu'il n'existe un moyen de forcer ces erreurs à apparaître dans le journal afin que je puisse fournir des boîtes de dialogue d'erreur plus conviviales…