11 octobre 2023

Corriger les messages "QRKRN2023 Error while parsing data" ou les filtrer avec log4j StringMatchFilter

Vous avez peut être rencontré dans les logs de HRD Query ces messages :
WARN - QRKRN2023 Error while parsing date 58,50
ou
QRKRN3024 Element /RPT/GRP[@level='...']/.../DTL/FLD[@id='...'] has no matching element in the datamodel

Noter qu’il ne faut pas lire « QRKRN2023 Error while parsing date » mais « Error while parsing data » (faute de typo)

Ces dizaines de milliers de messages encombrent parfois les fichiers de logs et provoquent une surcharge d’écriture sur disque. D’autre part ces fichiers log étant à rotation (5 fichiers de 5 mo en standard) - leur remplissage rapide peut faire perdre des messages d’erreur importants plus anciens.

Pour supprimer ces messages il faut corriger les traitements d'édition concernés

En l’occurrence un champ numérique
  • Ne doit pas contenir d’espaces en début
  • Doit avoir un séparateur de décimales sous la forme d’un « . » et non d’une « , »
Dans l’attente d’une correction des éditions HR - et à titre de « solution temporaire », il peut être utile de mettre en place un filtrage des messages par log4j

Dans $SIGACS/query/conf/query_log.properties ajouter les lignes en rouge suivantes, puis redémarrer le serveur de Query batch :

# ========================
# logs configuration file
# ========================

#
# OFF < FATAL < ERROR < WARN < INFO < DEBUG < ALL.
#

log4j.rootLogger = info, consoleappender, fileappender
log4j.logger.com.hraccess = INFO, consoleappender, fileappender
log4j.additivity.com.hraccess = false

# =================================================================================

# By default, the activation of the debug mode causes :
# - The generation of EditingFileConnectorXXXXX.zip, BatchEditingConnectorXXXXX.zip
#   files in the logs directory.
# - The persistence of LYTXXXXX.tmp directories in the work directory
#
# To avoid this behaviour while activating the debug mode uncomment either of
# the following lines.
# =================================================================================

 

#log4j.logger.com.hraccess.log.hrjs.workfiles=off
#log4j.logger.com.hraccess.log.qrkrn.workfiles=off

 

# CONSOLE
log4j.appender.consoleappender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleappender.target=System.out
log4j.appender.consoleappender.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleappender.layout.ConversionPattern=%d{ISO8601} %X{runtime.context} %-5p %c{1} - %m%n

 

# MAIN LOG FILE
log4j.appender.fileappender=org.apache.log4j.RollingFileAppender
log4j.appender.fileappender.File=${hrjmods.log.dir}/qrsrv.log
log4j.appender.fileappender.MaxFileSize=5MB
log4j.appender.fileappender.MaxBackupIndex=5
log4j.appender.fileappender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileappender.layout.ConversionPattern=%d{ISO8601} %X{runtime.context} %-5p - %m%n

# Filtres pour laisser passer QRKRN2023, QRKRN3024 puis autoriser DEBUG INFO WARN ERROR FATAL
log4j.appender.fileappender.filter.01=org.apache.log4j.varia.StringMatchFilter
log4j.appender.fileappender.filter.01.StringToMatch=QRKRN2023
log4j.appender.fileappender.filter.01.AcceptOnMatch=false
log4j.appender.fileappender.filter.02=org.apache.log4j.varia.StringMatchFilter
log4j.appender.fileappender.filter.02.StringToMatch=QRKRN3024
log4j.appender.fileappender.filter.02.AcceptOnMatch=false
log4j.appender.fileappender.filter.11=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.fileappender.filter.11.levelToMatch=DEBUG
log4j.appender.fileappender.filter.11.AcceptOnMatch=true
log4j.appender.fileappender.filter.12=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.fileappender.filter.12.levelToMatch=INFO
log4j.appender.fileappender.filter.12.AcceptOnMatch=true
log4j.appender.fileappender.filter.13=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.fileappender.filter.13.levelToMatch=WARN
log4j.appender.fileappender.filter.13.AcceptOnMatch=true
log4j.appender.fileappender.filter.14=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.fileappender.filter.14.levelToMatch=ERROR
log4j.appender.fileappender.filter.14.AcceptOnMatch=true
log4j.appender.fileappender.filter.15=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.fileappender.filter.15.levelToMatch=FATAL
log4j.appender.fileappender.filter.15.AcceptOnMatch=true
# Filtre pour bloquer tous les messages qui ne sont pas déjà  autorisés
log4j.appender.fileappender.filter.20=org.apache.log4j.varia.DenyAllFilter

 

# THREAD APPENDER
log4j.appender.threadappender=com.hraccess.logging.ThreadFileAppender
log4j.appender.threadappender.Directory=${hrjmods.log.dir}
log4j.appender.threadappender.layout=org.apache.log4j.PatternLayout
log4j.appender.threadappender.layout.ConversionPattern=%d{ISO8601} %X{runtime.context} %-5p - %m%n


4 octobre 2023

eDSN - Erreur : la table d'historique contrat doit être initialisée

Suite à une recopie de données entre bases, eDSN ne démarre plus correctement. Dans les logs on trouve le message : 
Erreur : la table d'historique contrat doit être initialisée si la gestion intégrée des blocs 41 est activée (com.soprahr.edsn.historiquecontrat.cfg)

Pour recharger cette table il faut lancer la commande dsn:init-historique-contrat ou dsn:init-historique-contrat-ext... mais celle ci sera introuvable !? Ceci tient au fait que eDSN est en erreur ...

Les étapes consistent en effet à :
  1. Inhiber la gestion du bloc 41 avec la table historiquecontrat
  2. Redémarrer eDSN
  3. Recharger la table
  4. Réactiver la gestion du bloc 41 avec la table historiquecontrat
  5. Redémarrer eDSN
 
Pour inhiber (respectivement activer) l'option, éditer le fichier edsn-home/conf/com.soprahr.edsn.historiquecontrat.cfg et passer le paramètre enable à false (respectivement true)

Après redémarrage lancer la commande dsn:init-historique-contrat (la version dsn:init-historique-contrat-ext permet de paralléliser) en précisant les périodes de début/fin (respecter la profondeur de rappel en paie)

Dans mon cas la fermeture du VPN a interrompu un premier lancement. La table est donc partiellement alimentée. Il faut donc recommencer et répondre à la question « confirmez-vous … » en avant plan ...

Mais le traitement étant long, il vaut mieux le lancer en arrière-plan pour ne pas subir de nouvelle interruption.

Pour cela on crée un script lanceur à déclencher avec nohup &.  Le "echo oui" est chargé de répondre à la demande de confirmation ... !


init-histo.ksh 
{ echo "dsn:init-historique-contrat-ext -t 5 202208 202308" ; echo oui; } | /hr9dev/edsn-9.1.3/bin/client


nohup ksh init-histo.ksh > init-histo.log 2>&1 &
[1] 25100788


cat init-histo.log 

Espace DSN (9.1.3) - Environnement de Production : non
Apache Karaf Runtime (4.3.9)
...
edsn> dsn:init-historique-contrat-ext -t 5 202208 202308

L'historique des contrats est deja alimente. Confirmez-vous sa reinitialisation (les donnees actuelles seront perdues) ? (oui/non)

oui
Traitement de la periode 202208
Traitement de la periode 202209
Traitement de la periode 202210
Traitement de la periode 202211
Traitement de la periode 202212
Traitement de la periode 202301
Traitement de la periode 202302
Traitement de la periode 202303
Traitement de la periode 202304
Traitement de la periode 202305
Traitement de la periode 202306

Traitement de la periode 202307
Traitement de la periode 202308
Initialisation terminee
edsn>


Puis mise à jour de com.soprahr.edsn.historiquecontrat.cfg (enable = true) et redémarrage de eDSN.

25 septembre 2023

Déclencher Design Center en ligne de commande

 La ligne de commande de Design Center permet de paramétrer un raccourci Windows

  • /I Répertoire du SIGAGIP.INI (description des environnements)
  • /H Répertoire du HRACCESS.INI (paramètres Design Center)

Encadrer les chemins avec des doubles quotes, coller le chemin à la lettre d'option 

Exemple de raccourci :

"C:\Program Files (x86)\Sopra HR Software\Design Center\hrstudio.exe" /H"%USERPROFILE%\Documents\Program Data\HR Access Solutions"

Il est possible de demander une connexion automatique :

  • /U Utilisateur
  • /P Mot de passe
  • /E Code associé à l'environnement (chapitres du SIGAGIP.INI)

"C:\Program Files (x86)\Sopra HR Software\Design Center\hrstudio.exe" /UDIGIX /PDIGIXPWD /EPPCLIUNO

La ligne de commande permet aussi de déclencher une macro contenant des commandes enregistrées avec Design Center ou créées de toute pièce (plus de détails dans le compagnon, ou directement via le fichier Compagnon/F_MACROS.htm dans le répertoire de Design Center)

  • /M Code macro
Par exemple pour lancer une publication :

"C:\Program Files (x86)\Sopra HR Software\Design Center\hrstudio.exe" ... /MPUB_TA0FR

Des comptes rendus sont créés dans le répertoire des macros (le chemin modifiable via le menu Outils/Options, onglet Avancé) :

  • <NomduScript>.trc1 : contenu de la barre d'état

  • <NomduScript>.trc2 : compte rendu d'exécution du script


28 juillet 2023

OpenHR, HRaSpace, 4You eDSN evMedia ne démarrent pas & Java - ZipException: Invalid CEN header

Alban m'informe que suite à un upgrade Java les applicatifs HR (Web, OpenHR) comme Karaf (4You, eDSN 9.0, evMedia, simulateur M2M) peuvent se trouver bloqués au démarrage.

Exemple de message dans le Karaf.log :

SEVERE: Could not launch framework
java.lang.RuntimeException: Error installing bundle listed in startup.properties with url: mvn:org.apache.karaf.features/org.apache.karaf.features.core/4.3.7 and sta
        at org.apache.karaf.main.Main.installAndStartBundles(Main.java:613)
        at org.apache.karaf.main.Main.launch(Main.java:308)
        at org.apache.karaf.main.Main.main(Main.java:183)
        at com.soprahr.evm.main.Main.main(Main.java:130)
Caused by: org.osgi.framework.BundleException: Unable to cache bundle: mvn:org.apache.karaf.features/org.apache.karaf.features.core/4.3.7
        at org.apache.felix.framework.Felix.installBundle(Felix.java:3231)
        at org.apache.felix.framework.BundleContextImpl.installBundle(BundleContextImpl.java:147)
        at org.apache.karaf.main.Main.installAndStartBundles(Main.java:606)
        ... 3 more
Caused by: java.util.zip.ZipException: Invalid CEN header (invalid zip64 extra data field size)
        at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1730)
        at java.base/java.util.zip.ZipFile$Source.checkExtraFields(ZipFile.java:1262)


Ceci est lié à un nouveau contrôle réalisé par les JVM des derniers updates Java 11 ou 17 de juillet 2023.

java -version

openjdk version "11.0.20" 2023-07-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.20.0.8-1) (build 11.0.20+8-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.20.0.8-1) (build 11.0.20+8-LTS, mixed mode, sharing)

ou

java version "17.0.8" 2023-07-18 LTS
Java(TM) SE Runtime Environment (build 17.0.8+9-LTS-211)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+9-LTS-211, mixed mode, sharing)


Pour inhiber ce contrôle il est nécessaire d'ajouter à la ligne de commande Java (en général via la variable JAVA_OPTS ou EXTRA_JAVA_OPTS dans le script setenv) le paramètre suivant :

-Djdk.util.zip.disableZip64ExtraFieldValidation=true



15 juin 2023

Oracle - Create database / env Linux - Importance du characterset

En cas de migration technique, prendre soin de bien choisir le « character set » de la base de données et de bien contrôler l'environnement Linux. Sans quoi lors de la bascule des données des caractères comme £ ou § utilisés par HR Access peuvent être dénaturés.

Commande de test côté Linux :

env|grep -E "LC_|NLS"
locale charmap
locale -a|grep fr_FR


Commande de test côté Oracle :

select * from nls_database_parameters where parameter like '%CHARACTERSET%' or parameter like '%LANGUAGE%';


Par exemple :

LINUX

LC_COLLATE=fr_FR@euro
LC_CTYPE=fr_FR@euro
NLS_DATE_FORMAT=YYYY-MM-DD-HH24.MI.SS
NLS_LANG=.WE8MSWIN1252
ISO-8859-15
fr_FR
fr_FR@euro
fr_FR.iso88591
fr_FR.iso885915@euro
fr_FR.utf8


ORACLE

NLS_DATE_LANGUAGE FRENCH
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET WE8MSWIN1252
NLS_LANGUAGE FRENCH

Il faut que les deux paramètres soient identiques.

1 juin 2023

Référentiel CNIL / Données a caractère personnel dans les SIRH

 La CNIL a publié en 2019 un référentiel relatif aux traitements de données a caractère personnel mis en œuvre aux fins de gestion du personnel.

https://www.cnil.fr/sites/default/files/atoms/files/referentiel_grh_novembre_2019_0.pdf

Ce document recense notamment les délais de conservation des données (chapitre 7).

« Les données à caractère personnel ne doivent être conservées sous une forme permettant l’identification des personnes que le temps strictement nécessaire à la réalisation des finalités poursuivies »



Dans la pratique HR Access, les archives de paie, de rappel, et périodes DSN persistent dans la base active ... à juste titre puisqu'elles sont (au moins pour les 12 à 24 premiers mois) toujours interrogées.


Au delà de 5 à 6 ans, ces archives doivent normalement être purgées.

On trouve aussi des règles de sécurité (chapitre 10) à mettre en œuvre. 

« Soit l’organisme adopte les mesures suivantes, soit il justifie de leur équivalence ou du fait de ne pas avoir besoin ou pouvoir y recourir »

Par exemple :


On notera aussi :
  • Tester sur des données fictives ou anonymisées
  • Limiter les flux réseau au strict nécessaire
  • Installer sans délai les mises à jour critiques 
  • Limiter l’accès aux outils et interfaces d’administration aux seules personnes habilitées
  • Chiffrer les données avant leur envoi à un organisme extérieur
  • Prévoir et tester régulièrement la continuité d'activité
  • Détruire les archives obsolètes de manière sécurisée 

Concernant l'authentification des utilisateurs, un peu de lecture :



17 octobre 2022

Mettre un fichier ou un Blob en pièce jointe d'un mail HR Access

Les traitements HR Access mettent à disposition un opérateur SML pour permettre l'envoi de mail. On place ces traitements dans BNL pour être certain que la demande de mise à jour a passé tous les contrôles et a été acceptée.

Il est possible de trouver des informations dans le guide "Concepts" (Fonction de messagerie), dans le compagnon (Comment envoyer un mail par traitement applicatif ?), dans l'aide sur les traitements (Exemple de traitement utilisant les contextes de BCE) et dans quelques traitements présents sur l'environnement (AN 02U0SM, AI 04X5SM ).

En revanche on ne trouve pas d'information claire concernant l'ajout de pièce jointe.

Ci dessous quelques pistes :

  • La zone WPCE-PJMAIL fait référence au chemin d'un fichier. Fichier présent sur le serveur hébergeant le serveurs HRD Query en toute logique (c'est ce dernier qui se charge des envois). Ceci est a priori peu pratique. Toutefois un collègue m'a informé qu'il était possible de faire référence à un document archivé en indiquant un chemin de cette forme (ici ARCHIVE correspond au nom du volume d'archivage dans l'objet Topologie HRS) :

01 U-FILENAME.                   
05 U-FILENAME01 PIC X(22) VALUES
   "ARCHIVE://ARCHIVE//NJ6".     
05 U-FILENAME02 PIC X(26) VALUES
   "//D2BL//1111//WELCOME.DOCX".

  • La zone WPCE-BJMAIL fait le lien avec un Blob, ce qui est aussi très intéressant. Après quelques tentatives, une collègue à compris comment employer cette zone : il faut préciser dans les variables WPCE-MAIL-NUDOSS CDSTDO CDINFO CDRUBR NULIGN la clef BL10 identifiant le Blob à joindre ...

Pour le reste, attention aux volumes.
Quant à l'envoi par mail de données nominatives sensibles ...

DiableDiable