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

28 septembre 2022

Reinitialiser les mots de passe de eDSN en mode commande

L'utilisateur de eDSN peut modifier son mot de passe via l'interface ... s'il a réussi à se connecter !

S'il faut le réinitialiser, l'usage est de se connecter au serveur et de mettre à jour le fichier XML de configuration des comptes.

.../conf/ grep Digix users.xml

    <user id="Digix" firstName="Di" lastName="Gix" password="dummy">


Une commande a été mise à disposition depuis eDSN 8 pour le modifier depuis la console SSH. Comme pour l'IHM, il est nécessaire de connaitre l'ancien :

edsn>usermanager:change-password Digix

Ancien mot de passe :****

Nouveau mot de passe :*****

Confirmation du nouveau mot de passe :*****

Le mot de passe a été changé

edsn>

Le fichier a été mis à jour et le mot de passe est chiffré :

    <user id="Digix" firstName="Di" lastName="Gix" password="{CRYPT}PCNY5VyVhXY+FnUph1L7nGQ/Wc1pmofjFe4MCROoMS+BoTshxymSX9TkTXOc3ewH{CRYPT}">


NB : Si un addon d'authentification spécifique a été mis en place, la commande appellera la méthode de changement de mot de passe - pour peut qu'elle ait été développée ...

27 septembre 2022

Requêtes SQL sur les processus de workflow ACTIVITI de eDSN

eDSN fonctionne avec des processus de workflow. Ces derniers sont gérés par l'open source ACTIVITI.
Pour lister les processus en cours, il est donc possible de le faire par SQL dans les tables ACT_*

Quelques éléments donnés par la doc ACTIVITI :

The database names of Activiti all start with ACT_. The second part is a two-character identification of the use case of the table. This use case will also roughly match the service API.

  • ACT_RE_*: RE stands for repository. Tables with this prefix contain static information such as process definitions and process resources (images, rules, etc.). 
  • ACT_RU_*: RU stands for runtime. These are the runtime tables that contain the runtime data of process instances, user tasks, variables, jobs, etc. Activiti only stores the runtime data during process instance execution, and removes the records when a process instance ends. This keeps the runtime tables small and fast. 
  • ACT_ID_*: ID stands for identity. These tables contain identity information, such as users, groups, etc. (absentes sur eDSN) 
  • ACT_HI_*: HI stands for history. These are the tables that contain historic data, such as past process instances, variables, tasks, etc. (absentes sur eDSN) 
  • ACT_GE_*: general data, which is used in various use cases.

Par exemple, pour comptabiliser les processus et tâches en cours :

set markup csv on quote off
select regexp_substr(PROC_DEF_ID_,'^[^:]+:'),TASK_DEF_KEY_,count(*) from act_ru_task group by regexp_substr(PROC_DEF_ID_,'^[^:]+:'), TASK_DEF_KEY_ order by 1,2;
controlReport:,consultControlReport,47
flowFile:,consultFlowFile,4
manageSignalementEnvoi:,downloadSignalementEnvoi,9
monthlyDeclaration:,manageDeclarationCancel,1
monthlyDeclaration:,manageDeclarationError,2
monthlyDeclaration:,validateDeclaration,1477
signalementDeclaration:,manageSignalement,10
signalementDeclaration:,manageSignalementError,96
synchronizeSignalement:,consultSynchronizeSignalement,63
temporaryDeclaration2:,consultErroneousTemporaryDeclaration,22
temporaryDeclaration2:,consultTemporaryDeclaration,10378
uncertifiedCancelAndReplaceDeclaration:,manageUncertifiedCancelAndReplaceDeclarationError,2
uncertifiedDeclaration:,manageUncertifiedDeclarationError,3
uncertifiedSignalementDeclaration:,manageUncertifiedSignalementError,63
uncertifiedSignalementDeclaration:,validateUncertifiedSignalement,2

Noter qu'un nombre important de processus en cours va impacter négativement les performances batch et transactionnelles de eDSN. Pour purger les processus orphelins (faisant référence à une déclaration qui n'existe plus), l'application fournit une commande qu'il est intéressant d'automatiser :

admin:purge-orphans [-p SSAAMM]

Pour visualiser les messages d'erreur des processus :

select substr(J.PROCESS_INSTANCE_ID_,1,10) , regexp_substr(J.PROC_DEF_ID_,'^[^:]+:'), '-' , substr(J.EXCEPTION_MSG_,1,200)||'...'  from ACT_RU_JOB J where J.EXCEPTION_MSG_ is not NULL;
135011326  signalementDeclaration:                                          - Unknown property used in expression: ${setSignalementToBeSentStatusDelegate}...
136827668  controlReport:                                                   - Unknown property used in expression: ${deleteControlReportDelegate}...

 

Afficher en ligne toutes les propriétés (text_) du processus d'un workflow (ici 138338880) :

select proc_inst_id_, listagg(name_||'='||text_,' ') within group (order by name_) from act_ru_variable
 where proc_inst_id_ =
138338880 group by proc_inst_id_;

138338880
adminContentPath=synchronizeSignalementReports/admin/ARRET_TRAVAIL/138338880.csv beginDateRefresh= consideredEventCount=1355 done= format=csv generationDate= groups=nogroup koEventCount=17 lastInvolvedUser=admin maxDate=2022-10-24T03:03:09Z month=9 okEventCount=18 periodeDsn= processCreationDate=2022-09-24-05:02:19 processCreator=admin requestDate= signalementType=ARRET_TRAVAIL totalEventCount=1390 userContentPath=synchronizeSignalementReports/admin/ARRET_TRAVAIL/138338880.csv userId=admin year=2022

Ainsi, pour repérer un processus orphelin :

select proc_inst_id_ from act_ru_variable where name_ = 'declarationTechnicalId' and text_ not in (select id from dsndeclaration);

Ou avec ses propriétés :
select v.proc_inst_id_, listagg(v.name_||'='||v.text_,' ') within group (order by v.name_) from edsn.act_ru_variable v
join edsn.act_ru_variable w on v.proc_inst_id_ = w.proc_inst_id_ and w.name_ = 'declarationTechnicalId'
where w.text_ not in (select id from dsndeclaration) group by v.proc_inst_id_;

(pour les processus d'envoi, la liste des Id est stockée en hexadecimal dans une table ACT_GE_BYTEARRAY ... pas très lisible !)

Pour repérer les actions automatiques (réglées sur un timer ACTIVITI) et leur échéance :

select J.DUEDATE_ echeance, J.PROCESS_INSTANCE_ID_ pid, REGEXP_SUBSTR(J.PROC_DEF_ID_,'^[^:]+:') process_type, V.NAME_, V.TEXT_
from ACT_RU_JOB J
left outer join ACT_RU_VARIABLE V
on J.PROCESS_INSTANCE_ID_ = V.PROC_INST_ID_ and V.NAME_ in ('declarationTechnicalId','fluxId','contentPath','userContentPath')
where J.TYPE_='timer' and TEXT_ is not null
order by 1,3

ECHEANCE,PID,PROCESS_TYPE,NAME_,TEXT_
2027-09-26-00.00.00,61537997,signalementDeclaration:,declarationTechnicalId,de5e85b8-7b10-40cf-8316-a1f82d1f7651
2022-09-27-15.40.22,62638457,controlReport:,contentPath,controlReports/202209/john.doe@acme.com/messages-62638457.csv
2022-09-28-17.51.33,62593312,flowFile:,contentPath,flows/202208/flux_62593312_42206902100034-NET-1.dsn
2022-10-23-03.51.27,62640501,monthlyDeclaration:,declarationTechnicalId,05744771-8d5f-46bb-8f89-871418b8b794

8 juillet 2022

eDSN - Fermer l'accès à interface Web

eDSN permet de réserver l'interface à une liste d'utilisateurs privilégiés.
Pour cela passez par edsn-admin, onglet "Utilisateurs" et alimentez la liste blanche.

La liste est gérable aussi par fichier de configuration :

com.soprahr.edsn.admin.cfg

usersWhiteList = admin


Si ce mode de fonctionnement ne suffit pas, vous pouvez aussi fermer les webapps en mode commande (ceci vaut aussi pour evMedia. Attention, cette fois le navigateur de l'utilisateur affichera une erreur d'accès) :

evmedia>web:list
ID | State       | Web-State   | Level | Web-ContextPath | Name
---+-------------+-------------+-------+-----------------+-------------------------------------
47 | Active      | Deployed    | 80    | /evm-admin      | com.soprahr.evm.admin.webapp (3.1.0)
69 | Active      | Deployed    | 80    | /evm-ij         | com.soprahr.evm.sat.webapp (3.1.0) 

evmedia>web:stop 47
evmedia>web:list
ID | State       | Web-State   | Level | Web-ContextPath | Name
---+-------------+-------------+-------+-----------------+-------------------------------------
47 | Active      | Undeployed  | 80    | /evm-admin      | com.soprahr.evm.admin.webapp (3.1.0)
69 | Active      | Deployed    | 80    | /evm-ij         | com.soprahr.evm.sat.webapp (3.1.0)
evmedia>web:start 47