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

27 février 2017

PA1I V PARAMETRE INCORRECT : FI

Vous pouvez depuis peu rencontrer ce message lors de l'exécution d'une chaîne NRB :


AS0FTBM2-00000000-PA1I V      PARAMETRE INCORRECT :  FI
AS0FTBM2-BBAD0014-ERREUR D'ACCES (FICHIERS) : M4/OPEN/35//


Il faut en fait lire la ligne d’avant : « PARAMETRE INCORRECT : FI » …
Et comprendre que le nom du fichier ne respecte pas les règles de sécurité.

En effet, des mises à jour de sécurité introduisent un contrôle de conformité des noms de fichiers : seuls certains répertoires sont autorisés, et les caractères utilisés doivent faire partie d'une liste blanche.

Ces contrôles peuvent être consultés dans la copy BBI - voire personnalisés par le projet.
Si besoin des témoins d’activation permette de débrancher le contrôle :

Témoin d"activation du contrôle des caractères
05              WPTC-FLGC      PICTURE X VALUE "1".
Témoin d"activation du contrôle des chaînes
05              WPTC-FLGS      PICTURE X VALUE "1".
 
Après personnalisation il est nécessaire de recompiler les exécutables de BOT, BOB, BSE et BSC.

12 janvier 2017

BMQ-BBAD0015-ERREUR D'ACCES (TABLE RELATIONNELLE) : S1/42/DG/PREPARE/000000000000907

Michel m'indique que la subbn (Unix/Linux) perd les espaces au début des lignes données en parametre pour construire l'ordre SQL de sélection des dossiers.
Ce qui peut provoquer une erreur en "collant" deux termes initialement séparés.

Exemple avec un HRAccess Suite 9 :


                                    Phase BN

Sélection SQL de la population :
SELECT NUDOSS FROM ZD00 WHERE CDSTCO='XXX' and CDCODE IN ('A','B','CDE') AND
 IDGPRG=1000
                                    Phase BN

Rappel des paramètres saisis :

PA42SELECT NUDOSS FROM ZD00 WHERE CDSTCO='XXX' AND CDCODE IN ('A','B','CDE') AND
PA42IDGPRG=1000

Nom du Compte-Rendu d'exécution : TYBXBN.hr9ass



                Soumettre le job (Y/N/T) [N] ? t

*****************************************************************
*              Constitution d'une population batch              *
*****************************************************************


JOB : JRBN                            DATE : 2017/01/12 16:32:15


*-------------------------- STEP120N ---------------------------*
*              Constitution d'une population batch              *
*---------------------------------------------------------------*
*GE01BMP-BBAD0001-------------------------------------------------------------------------------------------------------
*GE01BMP-BBAD0002-IDENTIFICATION DU PROGRAMME : BMP/7.000/2013-04-22-15.16.25/F/
*GE01BMP-BBAD0003-DEBUT DE TRAITEMENT   - HORODATAGE DE DEBUT : 2017-01-12-16.32.16
*ST01BMQ-BBAD0001-------------------------------------------------------------------------------------------------------
*ST01BMQ-BBAD0002-IDENTIFICATION DU PROGRAMME : BMQ/7.000/2014-09-10-16.57.51/F/

*ST01BMQ-BBAD0015-ERREUR D'ACCES (TABLE RELATIONNELLE) : S1/42/DG/PREPARE/000000000000907
SELECT NUDOSS FROM HR.ZD00 BMQ WHERE ( CDSTCO='XXX' AND CDCODE IN ('A','B','CDE') ANDIDGPRG=1000) 


Pour éviter cela, il est possible de modifier la variable IFS servant à indiquer au système les caractères séparateurs :


ZOPA42="XX"
IFSSVG=$IFS
IFS=''
echo "${L_ZOPA42} :"
while [ "$ZOPA42" ]
do
   read ZOPA42
   if [ "$ZOPA42"  ]
   then
      PA=1
      ZOPA42=`echo "$ZOPA42" | cut -c1-76 | $SIGACS/bin/tras "[a-z]" "[A-Z]"`
      echo PA42"$ZOPA42" >> $TMP/T120PA.$nupro
   else
      if [ $PA -eq 0 ] ; then exit; fi
   fi
done
clear
IFS=$IFSSVG
unset IFSSVG




11 janvier 2017

BLS-BBAD0015-ERREUR D'ACCES (TABLE RELATIONNELLE) : ZDAA/01/KJ/PREPA/000000000001000

Les programmes utilisant BLS ouvrent des curseurs sur les informations rattachées à leur processus. Dans certains cas (en particulier avec la chaîne d'export des données NOY), le nombre de curseurs ouverts dépasse le maximum autorisé :

*-------------------------- STEP120N ---------------------------*
*                    Exportation des données                    *
*---------------------------------------------------------------*
YIYZDBCG-BBAD0001-------------------------------------------------------------------------------------------------------
YIYZDBCG-BBAD0002-IDENTIFICATION DU PROGRAMME : BCG/7.000/2016-12-14-13.41.34/F/
YIYZDBCG-BBAD0003-DEBUT DE TRAITEMENT   - HORODATAGE DE DEBUT : 2016-12-21-12.37.00
YIYZDBCG-BBAD0004-LISTE DES PARAMETRES LUS
YIYZDBCG-BBAD0006-....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
YIYZDBCG-00000000-PA83V
YIYZDBCG-00000000-PA85 P  0003P
YIYZDBCG-BBAD0005-LISTE DES PARAMETRES INTERPRETES ET UTILISES
YIYZDBCG-BBAD0006-....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
YIYZDBCG-00000000-PA83V
YIYZDBCG-00000000-PA85 P  0003P
YIYZDBLS-BBAD0001-------------------------------------------------------------------------------------------------------
YIYZDBLS-BBAD0002-IDENTIFICATION DU PROGRAMME : BLS/7.000/2016-12-14-13.43.57/F/
YIYZDBLS-BBAD0003-DEBUT DE TRAITEMENT   - HORODATAGE DE DEBUT : 2016-12-21-12.37.00
YIYZDBLS-BBAD0015-ERREUR D'ACCES (TABLE RELATIONNELLE) : ZDAA/01/KJ/PREPA/000000000001000
 
 Pour Oracle,
ORA-01000: maximum open cursors exceeded

En général, la limite est placée à 5000 voire 6000 ...

Pour en connaitre la valeur exécuter :
select value from v$parameter where name = 'open_cursors'

Essayez de detacher du processus les informations qui ne contiennent pas de données.
Sinon demandez à l'administrateur de modifier le paramètre Oracle open_cursors.
 

24 octobre 2016

HR Access 7.30.60 et les objets Tâches

Les objets Tâches sont utilisables depuis HR Studio 7.30.60. Ils permettent d'alléger la charge des actions manuelles à réaliser sous HRStudio. Pour les serveurs HR Access v7 ou v9 ne disposant pas de la fonctionnalité, un kit peut être demandé au Support. Dans de nombreux kits livrés par le support, des "Taches" sont maintenant livrées.

Le kit va notamment créer deux tables techniques : RC59 et RF90, reprendre les triggers de gestion des objets HR, toucher une soixantaine de programmes techniques BT* BU* BY* ainsi que les chaines NRT et des RO* ...




Après ouverture de HR Studio, pensez à modifier les droits de conception de votre utilisateur (droits de conception / Droits indépendants des projets) :
 

L’objet "Tâche" est accessible avec les objets de gestion d’environnement :


Pour l'alimenter il faut le créer et le garder ouvert. On peut alors :
  • L'alimenter en direct (pour le cas des détachements ou des suppressions),
  • Ou en navigant dans l'explorateur HRStudio par clic droit sur d'autres objets, choix "Créer une action" (validation, déploiement, suppression). 
  • Cela marche aussi pour les compteurs de paie !
 Les actions élémentaires sont triées. Il est possible d'en modifier l'ordonnancement, d'indiquer qu'elles sont "bloquantes", de forcer leur statut ("A effectuer", "Effectuée", "Ignorée") ... Mais une par une (on ne peut agir sur une sélection de tâches).