20 décembre 2017

Faire une recherche dans les scripts intégrés aux objets

Je n'avais pas noté que depuis (au moins) la version 7.30.50 HR Studio possède une fonction de recherche dans les scripts ...



Si inspecter les pages web publiées ou décoder les données de la table SP10 peut garder un intérêt (la recherche est transverse), vous pouvez plus simplement faire un clic droit sur un groupe (d'écrans) et choisir "rechercher dans le script des objets du groupe".



Merci Wassim et Anouar de m'avoir relayé l'information.

7 décembre 2017

HRaSpace : L'accès mobile n'est pas activé sur le système

Suite à une mise à jour des PC sur le parc d'un client, l'accès à HRaSpace n'est plus possible. Le navigateur affiche :


Après analyse par les équipes internes,

<< Ces machines lors de leur connexion se présentent comme pouvant émuler un mode tablette.

Contenu du User Agent d’un poste qui rencontre le problème :
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0)

Contenu du User Agent des postes qui ne rencontrent pas le problème :
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E) 

La présence de la chaine "Tablet PC 2.0" dans le user Agent est due à la valeur de la clé de registre :
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform]
"Tablet PC 2.0"=""


La suppression de cette clé de registre résout le problème d’accès à l’application.>>


28 novembre 2017

HRaSpace 7.30 - Un "rectangle blanc" devant le Client Riche


Dans certains cas le Client Riche est perturbé sous Internet Explorer par un "rectangle blanc" qui s'affiche devant le formulaire HR Access. En général ce dysfonctionnement est lié à la JVM du poste.

Si vous rencontrez ce problème, contactez le support. La proposition est de modifier la taille de l'objet concerné dans le fichier "webapps/hr-rich-client/appletbeasun.html" pour le rendre invisible :

      if (topWindow.isIE) {
      document.write('<OBJECT WIDTH="0" HEIGHT="0" ID="DataAccess" NAME="DataAccess" 
      ...
      document.write('<PARAM name="code" value="com.hraccess.webclient.applets.AppletHRAccess">');
      document.write('<PARAM NAME="archive" VALUE="hrapplet.jar">');
      }
En complément, faire supprimer le cache des navigateurs.

22 novembre 2017

Le format des logs des webapps de HRaSpace

Les fichiers log4j.properties des webapps de HRaSpace donne la possibilité de personnaliser le format des messages affichés. Ce fichier est stocké dans le répertoire WEB-INF/conf de chaque webapp.

Si vous complétez ainsi le paramètre "fileappender.layout.conversionPattern" vous obtiendrez en plus de l'adresse IP le code de l'utilisateur. Ex :
log4j.appender.fileappender.layout.conversionPattern = %d [%15X{ip.address}][%25X{user.id}] %-5p %c{1} - %m%n

En ajoutant [%64X{virtual.session.id}] vous afficherez l'identifiant de session HRAccess - que l'on peut retrouver dans la table MX10 et dans le fichier stop_watch.log de openhr... Pour avoir l'équivalent sous Apache, ajoutez %{com.hraccess.portal.connection.id}C au LogFormat.

Avec ce paramètre le fichier log est réinitialisé à chaque démarrage de l'application :
log4j.appender.fileappender.append = false

En le modifiant comme ceci il n'est plus écrasé mais daté (pensez a purger les fichiers les plus anciens) :
log4j.appender.fileappender.append = true
log4j.appender.fileappender.datePattern = '.' yyyy-MM-dd

En modifiant le "consoleappender.layout.consoleappender" ce sont les messages renvoyés dans le log général "catalina.out" qui seront concernés :
log4j.appender.consoleappender.layout.conversionPattern=...

Y ajouter  ${com.hraccess.webapp.basename} permet d'afficher le nom de l'application source.

En supprimant la sortie "console" les messages de la webapp ne seront plus envoyés dans le catalina.out :
log4j.logger.com.hraccess = info, consoleappender, fileappender


Attention : en cas de mise à jour de la politique de journalisation via la console d'administration, le fichier est écrasé et vos mises à jour sont perdues ...

2 novembre 2017

Executer une commande système dans un traitement Cobol

Le site MicroFocus donne un exemple de Cobol exécutant une commande système et récupérant le code retour :
https://community.microfocus.com/microfocus/cobol/net_express__server_express/w/knowledge_base/6537/invoke-a-unix-command-from-within-cobol-using-call-system-and-retrieve-the-return-code

Dans le principe, on utilise la commande Cobol
CALL "SYSTEM" USING null-terminated-command  RETURNING return-code-ws.

La commande est terminée par un caractère NULL :

000014 01 null-terminated-command.
000015     05 command      pic x(2048).
000016     05 filler          pic x value x"00".


Le code retour est placé dans un numérique :
000002 01 return-code-ws     pic s9(8) comp-5.
L'article explique que pour AIX, Solaris, HP/UX PARISC and HP/UX Itanium (big-endian) il faut la redéfinir ainsi :
000005     05 filler          pic x.
000006     05 high-order-byte pic s9 comp-5.
000007     05 filler          pic x.
000008     05 low-order-byte pic s9 comp-5.

Et pour Linux x86, HP/Tru64, SCO, UnixWare - et certainement Windows - (little-endian) ainsi :
000010     05 filler          pic xx.
000011     05 high-order-byte pic s9 comp-5.
000012     05 low-order-byte pic s9 comp-5.


Pour le contrôler :
000024      if low-order-byte = 0
000025          display "return code from shell is: ",
000026               high-order-byte
000027      end-if


J'ai testé l'exemple fourni sur un AIX (donc un "big-endian") avec succès :

cob -vx callsys.cbl -o callsys
 

callsys

Enter command to be executed by shell
 (enter 'done' to quit)
ls -l  /tmp/dummy
-rw-r--r--    1 hraref   hraref          0 Aug 28 11:58 /tmp/dummy
return code from shell is: +000

Enter command to be executed by shell
 (enter 'done' to quit)
rm /tmp/dummy
rm: /tmp/dummy not removed.
Not owner
return code from shell is: +002


Merci à l'auteur de l'article ...

30 octobre 2017

HRaSpace Self-Service - Erreur RSBHR05GC - processus par défaut pour les GP

Après une opération de duplication d'environnement HRaSuite 7, suite à la connexion, un message d'erreur apparaît lors de l'affichage de HRaSpace.

Dans les logs du serveur Web on trouve :
HRAccess system error [TYERRE='R',TYORDR='S',CDPROG='BHR',CDFONC='05',CDSFTC='GC',ZOERR1='PP20',ZOERR2='000000000000100          02000',ZOERR3='',ZOERR4='',ZOERR5='',MSG='Erreur sur dossier']


Le code SQL 100 signifie qu'une donnée technique n'a pas été trouvée.
La table concernée est la PP20 (objet Plateforme physique).


Dans le squelette de BHR on trouvera en fonction 05GC :
431100*Recherche du radical du.
431200*processus BP défini par défaut.
431300*dans la PP20 pour appel à BHT.
431400     MOVE        W-WP00-CDPLPH TO H-CDPLPH.
431500     PERFORM     F9SBA THRU F9SBA-FN.
431600           IF    SQLCODE = W-WP00-NOTFND
431700     MOVE        SPACE TO CO16
431800     MOVE        "RSBHR05GC" TO CO16-GROUPE (1:9)
431900     MOVE        SQLSTATE TO CO16-ZOERR2 (26 : 5)
432000     MOVE        SQLCODE TO CO16-ZOER29
432100     MOVE        SQLERRMC TO CO16-GROUPE (70:70)
432200     MOVE        "PP20" TO CO16-ZOERR1
432300     IF SQLCODE <    ZERO MOVE "-"
432400     TO CO16-ZOERR2 (1:1) END-IF
432500     MOVE        "99" TO CO16-CDRET
432600     GO TO F79.

089500*********************************
089600*FONCTIONS DE RECHERCHE DE LIGNES
089700*DANS UNE TABLE
089800*********************************
089900*********************************
090000*N9SBA.    NOTE *SELECT TABLE W-WP00-IDTABL         *.
090100 F9SBA.
090200     MOVE        ZERO TO SQLCODE.

092000*N9SGP.    NOTE *SELECT TABLE PP20                  *.
092100 F9SGP.    IF    W-WP00-IDTABL = "PP20"
092200           NEXT SENTENCE ELSE GO TO     F9SGP-FN.
092400     EXEC SQL    SELECT
092500                         RDPROS
092600                 INTO    :H-RDPROS
092700                 FROM             PP20
092800                 WHERE   CDPLPH = :H-CDPLPH
092900                 AND     CDICON = 'GP_DEFAULT'     END-EXEC.
093100         GO TO     F9SBA-FN.



Le programme recherche un processus dont le champ CDICON vaut 'GP_DEFAULT'.
Effectivement, dans ma base de données, je ne retrouve pas mon environnement PPCLIINT :
Select * from PP20 where CDICON = 'GP_DEFAULT' ;
PPCLIDEV ANBHT  GP_DEFAULT  ANBHT  TYBX   Z00      ANBHTBHT      0             S      2011-04-12-11.55.28.000000
PPCLIPRD ANBHT  GP_DEFAULT  ANBHT  TYBX   Z00      ANBHTBHT      0             S      2012-01-24-14.14.17.000000
PPCLIREC ANBHT  GP_DEFAULT  ANBHT  TYBX   Z00      ANBHTBHT      0             S      2011-06-27-11.01.05.000000
PPCLIREF ANBHT  GP_DEFAULT  ANBHT  TYBX   Z00      ANBHTBHT      0             S      2011-03-15-18.23.43.000000



Ceci est lié à un dysfonctionnement de la chaine RB4 que j'ai utilisé pour rafraîchir l'objet plateforme ...
Pour corriger ma plateforme PPCLIINT :
update PP20 set CDICON = 'GP_DEFAULT' where cdexec='ANBHTBHT' and cdplph='PPCLIINT';



29 septembre 2017

7.40.10 - Objet Topologie HRS paramètres hrprojs



Objet Topologie HRS 
Du fait de la disparition de l'applet, de nouveaux paramètres sont créés pour tracer les actions du navigateur :

hrprojs.display_debug_bar : 
Cette option permet, à l'aide de la boîte d'information technique d'une page, d'afficher une barre en bas de l'écran du professionnel RH. Celle-ci propose des accès à des fonctionnalités de debuggage (performances, options supplémentaires, dump).

hrprojs.active_performance_tools : 
Permet le déclenchement du minuteur calculant les temps d'exécutions exploités dans les outils de performances. Sans ce paramètre à 'Oui' l'outil de performance accessible par la barre de debuggage ne donnera aucun résultat.

hrprojs.log_api_script : 
Envoi dans la log de tous les appels aux fonctions de l'API script.

hrprojs.remote_log : 
Ce paramètre permet d'envoyer les logs Javascript dans la log du Serveur Web en plus de la console du navigateur (en fonction des options de log établies sur le serveur dans 'log4j.properties'). 
Cette option augmentera le trafic réseau. Il est recommandé de le positionner à 'Oui' uniquement pour tester le script des pages Web (à 'Non' en production).

hrprojs.display_error_popup : 
Ce paramètre permet d'afficher les erreurs JavaScript dans une fenêtre popup lorsqu'une fonction de l'API script lève une exception. 
Il est recommandé de le positionner à 'Oui' uniquement pour tester le script des pages Web (à 'Non' en production).

27 septembre 2017

hra-space - erreur "Impossible d'utiliser faire-suivre (forward) après que la réponse ait été envoyée"



Suite à un upgrade HRaSpace en 7.40.010
Lorsqu’on se connectait directement depuis le serveur Tomcat tout se passait correctement :
2017-09-27 07:32:15,851 [   1.2.3.4][                         ] INFO  portl - PORTL???? Detected browser : Internet Explorer 11
2017-09-27 07:32:21,544 [   1.2.3.4][                         ] INFO  ophrc - OPHRC1102 User <S12345678.FRA> connected [Virtual session=e1OPVBEdZpN5FAlSrNcJvA3IHs6w4rIEUr5DYgFmU3usjiWLChvvUGPd9jd2f7gA]
...
è
Mais après une authentification LDAP correcte via le Apache en frontal de l’application... Erreur HTTP 500.

Ceci est lié à une nouvelle fonctionnalité de sécurité : il est nécessaire maintenant de spécifier dans la topologie système les sources approuvées dans le filtre CSRFOriginFilter au niveau de chaque fonction de type "Web" (ex: hra-space, hr-rich-client, hr-portlets, hr-dms, ...).


18 avril 2017

Linux : faire passer en arriere plan le job Unix en cours

Dans le cas où vous avez lancé sous Unix un traitement en avant plan ... mais qu'il est encore actif alors que l'heure de couper la connexion approche !

Sous les systèmes Linux vous pouvez faire passer le traitement en arrière plan :
  1. Taper "[ctrl]Z" ... le traitement est suspendu,
  2. Taper "bg" ... le traitement passe en arrière plan,
  3. Taper "disown" ... le traitement est retiré de la liste des jobs actifs 
Cette dernière opération permet de fermer la session sans que le traitement (rattaché initialement à la session SSH) soit tué.


/hradev/txt/tmp> monScript.sh > $LOG/monScript.log 2>&1
^Z

[1] + Stopped                  monScript.sh

/hradev/txt/tmp> jobs
[1] + Stopped                 
monScript.sh

/hradev/txt/tmp> bg
[1]    
monScript.sh& 
/hradev/txt/tmp> jobs
[1] +  Running                
monScript.sh

/hradev/txt/tmp> exit
You have running jobs
 
/hradev/txt/tmp> disown
/hradev/txt/tmp> exit

14 avril 2017

Boucle Unix de traitements parallélisés

Sur la base d'un post de PSkocik ... Ci joint un exemple de script shell qui parallélise des traitements en en limitant le nombre (un intérêt étant de ne pas tomber sur les limitations système - par exemple le nombre de processus actifs - ou tout simplement de ne pas effondrer le serveur !).

Ce n'est pas parfait, car dans un groupe de traitement on attendra la fin du plus long, mais c'est simple à mettre en place.

Dans cet exemple l'écriture du log de chaque traitement se fait dans un fichier temporaire distinct - puis est affiché ...


monTraitementAParalleliser() {
      local fLOG="${LOG}/monTraitement.${i}.log"

      date                   > "${fLOG}" 2>&1
      echo "Hello ${1} ..." >> "${fLOG}" 2>&1
      CODE_RETOUR=$?
      sleep 3   # Pour faire durer


      [ ${CODE_RETOUR} -gt 0 ] && touch "${TMP}/
monTraitement.err"
      cat "${fLOG}"
      rm -f "${fLOG}"
}


# Début du script
rm -f "${TMP}/monTraitement.err"

# Nombre de parallelisations
N=3
# Indice
i=0
 

for PARAM in Henri Albert David John Felix Richard
do
   # tous les N jobs, attente de fin des jobs
   i=$(($i%$N)); [ $i -eq 0 ] && wait ;i=$(($i+1));
   # Execution en parallele
   echo "Declenchement du traitement pour ${PARAM}"
   monTraitementAParalleliser "${
PARAM}" &
done
 

# Attente de fin des derniers jobs
wait


if [ -f "${TMP}/monTraitement.err" ]; then
   rm -f "${TMP}/monTraitement.err"
   exit 1
fi

exit 0

10 mars 2017

Erreur ASLM: Semaphore failure. Rerun as root

Sur un serveur Linux hébergeant HR Access, un script de sécurité a modifié les droits d'accès au fichier /var/aslmfsem.

Conséquence : plus aucun programme Cobol ne pouvait s'exécuter sur la machine ... Car ce fichier (sémaphore) sert lors du contrôle des licences d'exécution. 

  • Le TP est bloqué.
  • OpenHR ne redémarre pas (redémarrage figé)
  • Lors de l'exécution d'un batch, on trouve le message :

ASLM: Semaphore failure. Rerun as rootASLM: Errno 1013

Si cette erreur survient, contrôlez que le fichier existe, qu'il est propriété de root, et qu'il dispose des droits rw_rw_rw_.

Si le blocage persiste, envisagez de :
  • Exécuter $COBDIR/aslmf/apptrack option "6-Reinitialize Licensing",
  • $COBDIR/aslmf/initaslm,
  • Si nécessaire rebooter le system pour reinitialiser la memoire partagée,

Plus d'information sur le site de MicroFocus : community.microfocus.com : aslm-1013-semaphore-failure