Affichage des articles dont le libellé est HRAccess. Afficher tous les articles
Affichage des articles dont le libellé est HRAccess. Afficher tous les articles

28 juillet 2025

Personnaliser le Makefile pour conserver les sources des programmes Cobol

Lors des générations, HR Access rédige puis compile les programmes exécutables. Puis les sources sont détruits. Il peut être intéressant de conserver ces sources pour :

  • Relecture de code
  • Recompilation après adaptations manuelles
  • Recompilation après migration technique

Pour cela, on pourra par exemple :

  • Créer un répertoire $SIGACS/prod/cbl
  • Adapter le fichier $SIGACS/adm/cfg/Makefile pour y ajouter une copie et compression du source


Par exemple sur ce chapitre (à reproduire sur les autre en adaptant les suffixes) :

#-----------------------------------------------------------------
#       Build the dynamically loadable module from a .pco
#       Pro*Cobol program.
#

.pco.gnt: $(*).pco
        @echo "--- "
        @echo "---    $(*).pco  -->  $(*).gnt "
        @echo "--- "
        @echo "$(PROCOB) $(PROFLAGS) iname=$(*).pco oname=$(*).cbl"

        @cp $(*).pco ${SIGACS}/prod/cbl; gzip -f $(*).pco

        @cd `dirname $(*)`; $(PROCOB) $(PROFLAGS) iname=$(*).pco oname=$(*).cbl
        @$(COB_VAR) cd `dirname $(*)` ; $(COB) -vP -u $(COBFLAGS) $(*).cbl
        @chmod 775 $(*).gnt

A noter : dans le Makefile les commandes doivent être précédées de tabulations (et non d'espaces)

6 juin 2025

OPHRS3003 I/O error when pre-processing message

OpenHR semble démarré, 

Mais un ce message d'erreur apparaît quand on lance le serveur de Query ou HRaSpace :

2025-06-06T08:34:20,897 INFO  [        ][               ][main] - OPHRS1001 Starting OpenHR server - Release 7.40.06003.00000 
2025-06-06T08:34:20,901 INFO  [        ][               ][main] - OPHRS1002 Loading configuration from file </hr9dev/openhr/conf/dispatcher.properties>
2025-06-06T08:34:20,914 INFO  [        ][               ][main] - HR component versions:
   hr-openhr-api=2.0.2
   hrapplication=7.40.06003.00000
 
2025-06-06T08:34:20,914 INFO  [        ][               ][main] - System properties:
   file.encoding=ISO-8859-1
   file.separator=/
   hr.bootjars.dirs=/hr9dev/openhr/lib/boot
   hr.jars.dirs=/hr9dev/openhr/lib
...
2025-06-06T08:20:13,809 INFO  [        ][               ][main] - OPHRS1011 Server's configuration is 
... 
    hr_design.executable=RTSDGN TYBXBHR
...
2025-06-06T08:34:20,918 INFO  [        ][               ][main] - OPHRS1030 HR Design Server address has been automatically set to <127.0.0.1>.
2025-06-06T08:34:20,919 INFO  [        ][               ][main] - OPHRS1080 HR Design server's encoding is <ISO8859-15>
2025-06-06T08:34:20,926 INFO  [        ][               ][main] - OPHRS1051 Registered service <RemoteService>
2025-06-06T08:34:20,927 INFO  [        ][               ][main] - OPHRS1051 Registered service <LocalService>
2025-06-06T08:34:20,927 INFO  [        ][               ][main] - OPHRS1050 MessageDispatcher successfully initialized
2025-06-06T08:34:20,944 INFO  [00000001][xxx.xxx.xxx.xxx][MessageProcessor-1] - OPHRS1070 Service <Default>: pool size set to <5> instances
2025-06-06T08:34:20,945 INFO  [00000001][xxx.xxx.xxx.xxx][MessageProcessor-1] - OPHRS1071 Service <Default>: idle time-out set to <200> second(s)
2025-06-06T08:34:20,945 INFO  [00000001][xxx.xxx.xxx.xxx][MessageProcessor-1] - OPHRS1072 Service <Default>: working time-out set to <2000> second(s)
2025-06-06T08:34:20,945 INFO  [00000001][xxx.xxx.xxx.xxx][MessageProcessor-1] - OPHRS1073 Service <Default>: maximum retry count set to <1>
2025-06-06T08:34:20,945 INFO  [00000001][xxx.xxx.xxx.xxx][MessageProcessor-1] - OPHRS1074 Service <Default>: delay before retry set to <1> second(s)
2025-06-06T08:34:20,945 INFO  [00000001][xxx.xxx.xxx.xxx][MessageProcessor-1] - OPHRS1075 Service <Default>: message's maximal wait time (in queue) is <10> second(s)
2025-06-06T08:34:20,946 INFO  [00000001][xxx.xxx.xxx.xxx][MessageProcessor-1] - OPHRS1077 Queued a new message for service <Default>
2025-06-06T08:34:45,281 ERROR [00000003][172.18.236.29  ][MessageProcessor-2] - OPHRS3003 I/O error when pre-processing message (Client: <172.18.236.29/43318>)
com.hraccess.commons.io.InvalidBlockSizeException: Found an invalid input block size of 808464432 bytes
        at com.hraccess.commons.io.CompressedBlockInputStream.readAndDecompress(CompressedBlockInputStream.java:92) ~[hr-kernel-3.0.0.jar:?]
        at com.hraccess.commons.io.CompressedBlockInputStream.read(CompressedBlockInputStream.java:185) ~[hr-kernel-3.0.0.jar:?]
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:270) ~[?:?]
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:313) ~[?:?]
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) ~[?:?]
...
 


Un premier constat est la présence d'une erreur de type I/O (accès en lecture/écriture)

On constate aussi que l'erreur se produit 15 secondes après la fin du "démarrage" de OpenHR (en fait, le démarrage de HRD Query : ce dernier invoque OpenHR pour obtenir des informations qui lui sont nécessaires).


Si l'on compare les logs OpenHR avec celles d'un autre environnement, on constate que le démarrage OpenHR de l'environnement incidenté est incomplet. Il devrait se poursuivre par un :

OPHRS1004 HR Design server version is <7.000>
Loading XML bean definitions from file [/logi/hraccess90/hr9de5/openhr/conf/services.xml]
Loading XML bean definitions from file [/logi/hraccess90/hr9de5/openhr/conf/security.xml]
OPHRS1109 Servers context initialized
OPHRS1013 Merged configuration is
... 

 

Et surtout par un message :

OPHRS1999 OpenHR server is ready for business (Release <7.000>)

En l'occurrence, OpenHR devrait démarrer l'exécutable RTSDGN

Les trois origines possible de l'erreur que j'ai rencontrées sont :

  • Mauvais paramétrage : dans le fichier openhr/conf/dispatcher.properties le paramètre hr_design.executable contenait les mots clefs "RTSDGN $HRPREFBHR" issus du livrable de l'éditeur. Il a suffit de corriger la configuration pour indiquer "RTSDGN TYBXBHR".
  • Mauvaise recomplation : dans $SIGACS/bin l'exécutable RTSDGN provenait de la copie depuis une machine dont les binaires n'étaient pas compatible. Il a fallu recompiler les programmes C, regénérer les programmes Cobol, relinker le RTSDGN.
  • Absence de licence : la licence Cobol nécessaire à l'exécution des programmes a été perdue ou est obsolète. Exécutez une chaine batch pour le constater : un message explicite se retrouvera dans les logs. Nous avions une licence de test dont la date de fin était dépassée. Il a fallu en installer une nouvelle.

(On peut aussi imaginer un problème d'accès lié aux droits Unix)

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


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


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 :



4 juillet 2022

HRaSpace - Téléchargement des états construits - Proposer un "Enregistrer sous ..."

J’ai discuté avec Lionel d'un problème que j'avais rencontré chez un client : lors du téléchargement de fichiers ZIPs que nous archivions via un script spécifique, pour que HRaSpace propose un "Enregistrer sous", il avait fallu suffixer le zip en « .csv » ...

Cela a été reproduit, compris et solutionné. Explication :

Dans l'écran AA P83Q01, Script onClick on trouve la Fonction hrDownloadResultQuery

  

Extrait du script :

var site = hrGetValue( _O("RU","ZO3QIDDIAG","1"), hrEvent.occRank);

if (hrTrimLeftRight(site)=="") site = hrGetValue( _O("RU","ZO00IDDIAG","1"), hrEvent.occRank);

hrDownloadResultQuery( site, hrGetValue(_O("RU","ZO3QURLSTO","1"),hrEvent.occRank) );


Syntaxe :

hrDownloadResultQuery(siteCode, filePath, forceAttachmentOpt)

 Cette fonction possède une option forceAttachmentOpt 

 

Pour utiliser un téléchargement il faut passer l’option à « true » :

hrDownloadResultQuery(site, hrGetValue(_0("RU","ZO3QURLSTO","1"),hrEvent.occRank), true) ;


A tester sur une copie de l'écran standard.

Objet "ressource Web" - Répertoire webapps/hr-rich-client/rich-client-plugins

Un objet de type "ressource Web" est livré avec le kit ATIJ

Lors de la publication un fichier jar est alors déposé dans webapps/hr-rich-client
Et un répertoire créé dans webapps/hr-rich-client/rich-client-plugins

Lors de la livraison de l’arbre en Production, pensez à récupérer ce fichier et le contenu de ce sous répertoire.

 

En cas d'absence, l'affichage des pages ATIJ provoque une erreur générique : "undefined : named item not found"

Si je regarde un autre projet j’y vois en base :

select TYOBJE,CDOBJE,trim(NMLONG) from go10 where tyobje='E3';

...
E3,JSGRAPH ,hr-graph-rcplugin-1.1.7.jar
E3,JSPLANN ,hr-planning-rcplugin-1.3.10.jar
E3,PAYANALY,hr-payroll-analyzer-plugins-1.0.2.jar
E3,DIGIFILE,hr-digital-files-plugins-1.0.3.jar
E3,ATSCRIPT,hr-arret-travail-plugin-2.0.3.jar

Des fichiers :

webapps/hr-rich-client/hr-arret-travail-plugin-2.0.1.jar
webapps/hr-rich-client/hr-arret-travail-plugin-2.0.3.jar
webapps/hr-rich-client/hr-digital-files-plugins-1.0.3.jar
webapps/hr-rich-client/hr-graph-rcplugin-1.1.7.jar
webapps/hr-rich-client/hr-payroll-analyzer-plugins-1.0.2.jar
webapps/hr-rich-client/hr-planning-rcplugin-1.3.10.jar

Et des sous répertoires hr-rich-client/rich-client-plugins :

hr-arret-travail-plugin-2.0.1
hr-arret-travail-plugin-2.0.3
hr-digital-files-plugins-1.0.3
hr-graph-rcplugin-1.1.7
hr-payroll-analyzer-plugins-1.0.2
hr-planning-rcplugin-1.3.10

On note la présence de deux versions de hr-arret-travail-plugin … Cela signifie que la publication d’une nouvelle version du ".jar" ne purge pas l’ancienne.

Je n’ai pas de bons souvenirs de telles cohabitations … Toutefois dans les pages publiées les références pointent explicitement vers la dernière version :

grep 'hr-arret-travail-plugin' ./F/FRP/TA0FR0E1/body_auw1000f.html

<link xmlns="" rel="stylesheet" href="../rich-client-plugins/hr-arret-travail-plugin-2.0.3/main.8ba9a9413a4a80e27793.css?1cccf13b81963383f7ca"/>

<script xmlns="" SRC="../rich-client-plugins/hr-arret-travail-plugin-2.0.3/main.ea9103a421a010c5f1ff.js?1cccf13b81963383f7ca"></script>

... <DIV xmlns="urn:schemas-microsoft-com:xml-data" Name="salairesReferenceComponent" CODEBASE="../hr-arret-travail-plugin-2.0.3.jar" ID="salairesReferenceComponent" STYLE="width:972px;height:54px;"></DIV>

22 juin 2022

Programmes Visual Cobol persistant en mémoire

A compter d'une "certaine version" de MicroFocus Cobol, la libération des processus chargés par les BHR ne se fait plus par défaut. Les processus peuvent alors devenir très consommateurs de mémoire.

Pour obtenir une libération mémoire effective lors du déchargement des processus
Créer un fichier de configuration, par exemple $SIGACS/adm/cfg/visualCobol.cfg contenant la ligne :

set default_cancel_mode=0

Positionnez la variable COBCONFIG dans le .profile :

COBCONFIG=$SIGACS/adm/cfg/visualCobol.cfg 

export COBCONFIG

25 avril 2022

Conditionner les ordres DDL Oracle créés par la RBF

Dans HR Access la chaine batch RBF produit des ordres DDL de création / mise à jour des tables du SGBD (fichier PSBBGJ00 PSBBGJ01 PSBBGJ02). Ceux-ci procèdent souvent d'un DROP suivi d'un CREATE.

Dans le cas ou l'objet n'existe pas encore, l'ordre de DROP va provoquer un erreur. Si on retire le DROP mais que l'objet existe, c'est le CREATE qui sera a l'origine d'une erreur. Quand on souhaite contrôler le bon déroulement des livraisons cela peut être gênant.

Oracle ne fournit pas de syntaxe spécifique, mais il est possible de coder en PL/SQL un conditionnement de l'ordre ou d'inhiber l'erreur. Un autre intérêt est de pouvoir relancer le script autant de fois que nécessaire quand on a rencontré un incident sur un des objets.

7 juin 2021

Design Center : profil de catalogage

 Design Center met à disposition un objet "Paramètre" de type "Profil de catalogage"

 

Dans cet exemple un profil "CATAALLO" est créé pour cataloguer systématiquement les objets 

 

Le profil utilisé par l'environnement est à préciser dans l'onglet "Paramètres" de l'objet "Plateforme Physique" :


Dès lors, toute édition d'un objet provoque son catalogage (exécution par Design Center via le programme BTS de la chaîne NRG) :

16 septembre 2020

log4j : Envoi de mail sur présence d'une erreur fatale

Le guide technique présente une astuce pour remonter un incident Java par mail via le fichier log4j (typiquement en cas d'erreur fatale de l'application). Utile si vous ne disposez pas d'outil de surveillance sur la machine.

Ci dessous un exemple avec le serveur HRD Query :

Mises à jour dans le fichier query/conf/query_log.properties

  • Au niveau des loggers :

# Ajout de la sortie "mail"
log4j.rootLogger = INFO, consoleappender, fileappender, mailappender
log4j.logger.com.hraccess = INFO, consoleappender, fileappender, mailappender

  • Ajout de la définition de l'appender :


# appender MAIL
# Définition du niveau de trace de l'appender
log4j.appender.mailappender.Threshold=FATAL
# Définition du type d'appender

log4j.appender.mailappender=org.apache.log4j.net.SMTPAppender
# Formatage des messages
log4j.appender.mailappender.layout=org.apache.log4j.PatternLayout
log4j.appender.mailappender.layout.ConversionPattern=%d [%t] %-5p %c -%m%n

# Destinataire,
Emetteur, Sujet du mail
log4j.appender.mailappender.To=admin@digix.com,john.doe@digix.com
log4j.appender.mailappender.Fr
om=nePasRepondre@digix.com
log4j.appender.mailappender.Subject=Erreur Fatale HRD Query
# Serveur de courrier de l'entreprise
log4j.appender.mailappender.SMTPHost=
smtp.digix.com

  •  Arrêt / démarrage du serveur HRDQuery