21 avril 2010

Récupérer l'heure systeme dans un traitement Cobol

Pour récupérer et afficher l’horodatage système dans un Cobol (heures, minutes, secondes, centièmes), déclarez une variable de 8 caractères et utilisez la commande "ACCEPT ... FROM TIME" :

Working :

       01         DIGIX-TIME.                  
         05         DIGIX-TIMEH PIC 9(2).     
         05         DIGIX-TIMEM PIC 9(2).     
         05         DIGIX-TIMES PIC 9(2).      
         05         DIGIX-TIMEC PIC 9(2).

Procedure :

  ACCEPT DIGIX-TIME FROM TIME.
  DISPLAY DIGIX-TIME.

25 janvier 2010

Script de login Oracle login.sql

Quand SQL*Plus démarre, il recherche le script de login global "glogin.sql" dans le répertoire $ORACLE_HOME/sqlplus/admin et l'exécute s'il est présent. Dans un second temps, SQL*Plus va recherche le script de login "login.sql" dans le répertoire local, sinon dans le répertoire $ORACLE_PATH ou $SQLPATH que vous avez spécifié. Il l'exécute s'il est présent.

NB: à compter de Oracle 10g, SQL*Plus va exécuter le glogin.sql et login.sql après chaque 'connect' réussi. Cela est pratique quand on affiche le "user Oracle" dans l'invite.

20 octobre 2009

Tester l'accessibilité de HR Access Web

Depuis HRv5.0.3, la servlet HRAdmin permet - via le paramètre AUTOCHECK - d'obtenir un bilan rapide de l'accessibilité de l'application :

http[s]://[serveur]:[port]/[hraccess]/HRAdmin?ACTION=AUTOCHECK

Le résultat retourné sera, si aucune erreur n'est détectée :
<HRRESULT Error="0">
 <![CDATA[ Autocheck OK  ]]>
</HRRESULT>

Un utilitaire comme "wget" permettra de "scripter" un contrôle de disponibilité de HR Web.

Pour HRv7 cette commande est spécifique au Rich Client (WebApp hr-rich-client). La  console d'administration permet en revanche de visualiser les statuts des modules. L'URL utilisable est (FUNCTION correspondant au nom de la fonction dans l'objet topologie système) :
http[s]://[serveur]:[port]/[hraccess]/hr-admin-console/controler?action=status&function=[FUNCTION]&node=[FUNCTION]Node

Exemple :

  hradev@srvhra:/hraccess/txt/tmp> wget -nv \--http-user="hr" \--http-passwd="mot2passe" --output-document="/tmp/$CDPLPH.OPENHRS.status"  "http://1.2.3.4:12345/hr-admin-console/controler?action=status&function=OPENHRS&node=OPENHRSNode"
 
  hradev@srvhra:/hraccess/txt/tmp> cat "/tmp/$CDPLPH.OPENHRS.status"
  OK

PS : Toute la chaine de connexion n'est pas contrôlée par la servlet HRAdmin, notamment les mécanismes de connexion de l'utilisateur et la résolution de sa confidentialité. Il faut entendre ce contrôle comme nécessaire mais non suffisant.

8 octobre 2009

Tables working CO40 et CO41

Ces zones working des programmes de gestion de dossiers servent a stocker en mémoire la clef des demandes de mises à jour (table working CO40) et leur contenu (table working CO41). Ceci est valable pour les demandes de mise à jour (batch/TP), mais aussi pour les AMJ / AMK faits par les traitements rattachés aux processus de gestion.

Débordement de tables CO40 / CO41

En batch si la taille des zones CO40 / CO41 est insuffisante, les programmes basculent leurs données en base dans la table M8 (nom complet <RDPROS>M81). Ceci leur permet de continuer, mais avec des performances dégradées.
Depuis HRv3e, le TP fonctionne comme le batch avec une table de débordement CO40 en Base de Données. Les programmes peuvent toutefois bloquer sur des débordements en cas d'utilisation d'opérateurs ALE - opérateur incompatible avec la table en base.

1 octobre 2009

Cryptage standard HR du mot de passe UC10-CDPASS avec HRv3, v5, v7

Par défaut le mot de passe de l'annuaire HR Access (table UC10 champ CDPASS) est en clair... Le minimum est d'en crypter le contenu.

Pour activer le cryptage standard HR Access, rattachez un traitement de type BCF avec dans le contexte TBPPSW la ligne et regénérez votre processus de confidentialité (AS0DC en standard).
M   "1"          UT-TECRYP         10 IT UT-TECRYP="0"

HR note que le mot de passe est codé en alimentant le champ UC10-CDPRDE (ca sent la vampirisation de rubrique) :
  • 0 : non crypté
  • 1 : cryptage standard
  • 2 : cryptage spécifique

Ce cryptage standard fonctionne par translation de caractère (ce qui est loin d'être parfait). La règle peut se retrouver dans le squelette de BCX :
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-+;/ !(,)><=$_
-/AZ!1BFJV7(QSCL9X0Y,6+E4=2UR>); P5<8D_GK3MHIONW$T

Pour décoder un mot de passe, on pourra donc utiliser sous Unix une commande comme la suivante :
echo "!,X!7-" | tr "T\-/AZ!1BFJV7(QSCL9X0Y,6+E4=2UR>); P5<8D_GK3MHIONW\$" "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\-+;/ !(,)><=\$"

Pour activer un cryptage personnalisé on utilisera :
M   "2"          UT-TECRYP

Le reste est à coder (écrivez des fonctions de codage et de décodage). Vous pourrez aussi faire un appel par un CALL à un module externe ... à condition de linker ce dernier au BNR et au RTSDGN (en modifiant le Makefile de adm/src).

Notez que quelle que soit votre politique, sur le réseau et dans les logs on pourra trouver le mot de passe crypté ... suivant la méthode standard.

17 septembre 2009

Message d'erreur "BBAD0019-MODULE EXECUTABLE DIFFERENT DE DERNIERE COMPILATION"

Les programmes Cobol HR Access stockent leur horodatage de compilation à deux endroits :
* dans la base de données, table PG15 champ TICOMP
* dans le source du programme lui même, variable TICOMP.
Jusqu'en HRv5, les batch dont les programmes ont des horodatages discordants sont mis en erreur :

FDAZDB9J-BBAD0019-MODULE EXECUTABLE (2009-06-24-08.52.12) DIFFERENT DE DERNIERE COMPILATION (2009-05-07-17.24.24)  B9J

Comme en générale le source est perdu, il n'est pas facile à postériori de connaitre le TICOMP d'un programme compilé ...

La commande Unix suivante permet de le récupérer dans la majeure partie des cas.
Exemple pour le programme FDCALDBI.so :

strings $SIGACS/prod/gnt/FDCALDBI.so | cut -c1-19 | grep '^....-..-..-..\...\...'|head -1

Reste à mettre la PG15 en accord avec l'exécutable par un update ...

Une solution plus classique est de forcer la regénération des programmes (par exemple RBG choix G + RBA, sinon RBZ) - ou de relivrer le processus si l'environnement est de type "exploitation".

Cas d'une NBW soumise avec un mauvais code plate forme

Dans l'assistant de gestion, l'écran de soumission de la chaine NBW (génération des explorations) permet de saisir un (mauvais) code plate forme. La génération va alors recréer les programmes techniques avec des conséquences "catastrophiques" pour l'environnement : les batch ne fonctionnent plus, le OpenHR ne redémarre plus. La solution la plus rapide pour rétablir la situation est de :
  • Repérer dans la table PG15 les lignes avec le "mauvais" code plate forme,
  • Supprimer par delete les doublons ayant le "bon" code plate forme (ou modifier ce code plate forme pour lui donner une valeur temporaire - ex: OLD_PGMS),
  • Modifier par update les occurrence avec le "mauvais" code plate forme pour y mettre le "bon".
  • Tester un batch, tester le TP.

7 septembre 2009

NOY et message "BBAD0012-DEPASSEMENT DE CAPACITE"

Le message suivant est fréquemment émis par la chaîne NOY d'exportation de données : BLS-BBAD0012-DEPASSEMENT DE CAPACITE (TABLE WORKING) : ****… 

En fait ce n’est qu’un warning, et les données sont bien exportées  (une correction a été faite depuis au moins la v3 de HR Access)... Il est donc inutile de tenir le nombre d’occurrence du dictionnaire à jour pour ce batch.

J'ai réalisé en HRv3.2 l'export d’une population avec un programme BCG compilé avec un nombre d’occurrence à 10 puis à 100. L’export avec le nombre d’occurrence positionné à 10 génère un warning (cf ci-dessous). Mais la taille du fichier d'export est identique à celui réalisé avec le nombre d’occurrence positionné à 100. Dans les deux cas le fichier contient bien toutes les occurrences de ZYSR.

On pourrait ouvrir un évènement HotLine pour message d’erreur abusif !
 
*****************************************************************
*                    Exportation des données                    *
*****************************************************************
 
JOB : JNOY                            DATE : 2009/09/01 15:59:29
 
*-------------------------- STEP120B -----------------------*
*                    REMOVE du fichier PSBBCG00                 *
*-----------------------------------------------------------*
 
*-------------------------- STEP120N ---------------------------*
*                    Exportation des données                    *
*---------------------------------------------------------------*
YIZZYBCG-BBAD0001-======================================================================================================
YIZZYBCG-BBAD0002-IDENTIFICATION DU PROGRAMME : BCG/4.200/2009-09-01-15.58.27/F/
YIZZYBCG-BBAD0003-DEBUT DE TRAITEMENT   - HORODATAGE DE DEBUT : 2009-09-01-15.59.29
YIZZYBCG-BBAD0004-LISTE DES PARAMETRES LUS
YIZZYBCG-BBAD0006-....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
YIZZYBCG-00000000-PA83F
YIZZYBCG-00000000-PA85 P  0002
YIZZYBCG-00000000-PA861SR
YIZZYBCG-BBAD0005-LISTE DES PARAMETRES INTERPRETES ET UTILISES
YIZZYBCG-BBAD0006-....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
YIZZYBCG-00000000-PA83F
YIZZYBCG-00000000-PA85 P  0002
YIZZYBCG-00000000-PA861SR
YIZZYBLS-BBAD0002-IDENTIFICATION DU PROGRAMME : BLS/4.200/2009-09-01-15.58.33/F/
YIZZYBLS-BBAD0012-DEPASSEMENT DE CAPACITE (TABLE WORKING) : ZYSR/000000000000012/000000000000012
YIZZYBCG-BBAD0008-STATISTIQUES SUR LES FICHIERS (ENREGISTREMENTS LUS/ECRITS)
YIZZYBCG-BBAD0009-PA (PA) : 000000000000003
YIZZYBCG-BBAD0009-M8 (M8) : 000000000000381
YIZZYBCG-BBAD0010-*** BCG : FIN NORMALE  - HORODATAGE DE FIN   : 2009-09-01-15.59.30  **** CODE RETOUR 00 ******
 
ls : 0653-341 Le fichier /hrdev/txt/lis/NOY*.31712 n'existe pas.
JOB : JNOY                            DATE : 2009/09/01 15:59:30
 
*---------------------------------------------------------------*
*                          Fin du job                           *
*---------------------------------------------------------------*

31 juillet 2009

Analyse des transactions TP avec HRv5

Les fichiers chrono.log* disponibles avec HRv5 permettent de quantifier l'activité TP sur la base de "Transactions BHR" (une transaction BHR correspondant à un appel des programme Cobol transactionnels). Notez qu'une "Transaction utilisateur" va générer plusieurs "Transactions BHR". Toutefois cela n'altère en rien la qualité des mesures effectuées par ce biais.

La commande "awk" suivante vous permettra d'obtenir, pour le fichier chrono.log en cours, le nombre de transactions par tranche de 10 minutes, total, une analyse par processus HR, code action fonctionnelle, type de message, et le différentiel des connexions et déconnexions (ce qui correspond au nombre maxi d'utilisateurs connectés pour peu que vous démarriez votre analyse à un moment ou personne n'est connecté).

14 novembre 2008

Type des messages reçus par BHR et BNM avec HRv7

Les traces permettent de voir le contenu des messages reçus par le serveur et traités par les programmes BHR / BNM. Deux caractères permettent au client de typer ses messages.

Exemple de message (récupéré dans le fichier stop_watch.log HRv7) :2011-03-25 10:19:40,946[ResponseListener-1] OPHRS1900 |10:19:40.613|       8|     325|     333|com.hraccess.dispatcher.utils.Header@63796379[transactionCode=Z00     ,programName=AS800BNM,virtualSessionId=q9sNW...,applicationId=*000GFT01BXKL,conversationId=0000,instanceId=8+C2,threadId=00,roleTemplate=ALLHRLO ,roleInstanciationValue=FR ,messageCode=2X]

  •  processus "AS800"
  •  message 2X "Demande d'information avec self + blobs"
  •  Modèle de rôle "ALLHRLO"
  •  virtualSessionId "q9sNW..."  - A mettre en relation avec :
hr-rich-client.log:2011-03-25 08:00:22,818 [1.3.1.4][  ] INFO  hraccess - HRWEB1068 User [User ID=AROGER][Virtual session ID=q9sNW...] connected

  •  applicationId "*000GFT01BXKL", instance "8+C2"  - A mettre en relation avec :
hr-rich-client.log:2011-03-25 01:09:46,473 [  ][  ] INFO  connection - OPHRC1110 Opened a stand-alone session with application ID <*000GFT01BXKL> and instance ID <8+C2>


Ci dessous la liste des différents types :

Type des messages reçus par BHR et BNM avec HRv5

Les traces permettent de voir le contenu des messages reçus par le serveur et traités par les programmes BHR / BNM. Deux caractères permettent au client de typer ses messages.

Exemple de message (récupéré dans le fichier chrono.log) :

2008-11-10 14:21:59,621[Reply-11] OPHRS1900 |14:21:59.250|     281|      90|     371|Z00     FA002BNM27UAQBS0085JMDURAND03CAPER     STSA|

  • processus "FA002"
  • message 27 "Demande d’informations"
  • session OpenHR "UAQB"
  • user "JMDURAND"
  • code action fonctionnelle "PER"

Ci dessous la liste des différents types  :

10 juillet 2008

Adapter le umask des FTP et partager les fichiers publiés

Par défaut le umask d'une session FTP est de 027 (lecture pour le groupe, rien pour les autres). Pour donner les droits d'accès en écriture au groupe il faut passer le umask à 007.
Pour ceci demandez à l'exploitant de mettre à jour le fichier /etc/inetd.conf pour remplacer "ftpd"  par un "ftpd -u 007"

ftp     stream  tcp6    nowait  root    /usr/lbin/ftpd         ftpd -u 007

Puis faites rafraichir le processus inetd (sous AIX : refresh –s inetd )

Ceci est particulièrement utile quand on souhaite paramétrer les FTP des publications (objet Site HRS de HR Access) avec un compte Unix différent de celui démarrant l'application Web. Dans le cas contraire, des conflits d'accès font que les temporaires de publication ne sont pas nettoyés et des zip obsolètes risquent d'être déployés.

19 juin 2008

Dossiers de demande Opération déphasés de leur Template

Les dossiers "Template" dans ZO existent depuis HRv5 avec la mise en service de HRQuery : les objets Rapport, Mise en page, Population doivent être "mis en exploitation" pour être convertis en dossiers Opération dits "Templates".

Ces Templates contiennent un descriptif du Query en table ZO4C, avec un horodatage de mise a jour stocké en ZO5K.

Les demandes batch ZO avec édition répliquent cette description, avec horodatage de réplication en table ZO4T.

Une page Web de l' "Assistant de Gestion" permet de repérer et mettre a niveau les ZO4C des demandes batch ZO déphasées (menu "Rapports" / "Rafraîchissement général").



Ci dessous un SQL pour repérer les demandes dont la description du template a un horodatage antérieur a celui de l'objet :

SELECT D_4T.NUDOSS, D_00.CDUSER, D_00.CDPHAS, D_00.SUFXDM, D_4T.CDPHAS ,D_4T.CDELMT 
FROM ZO4T D_4T, ZO5K T_5K, ZO00 D_00, ZO00 T_00
WHERE D_00.NUDOSS = D_4T.NUDOSS AND D_00.TISOUM = '0001-01-01-00.00.00'                              -- jointure demande
  AND T_00.NUDOSS = T_5K.NUDOSS AND T_00.TISOUM = '0001-01-01-00.00.00' AND T_00.CDUSER = '********' -- jointure template
  AND D_4T.CDPHAS = T_00.CDPHAS AND D_4T.CDELMT = T_00.CDELMT -- Jointure entre la demande et le template
  AND D_4T.CDPHAS in ('NPQ','NPM','NPP') -- filtre sur le type de template
  AND D_4T.CDELMT LIKE '%'               -- filtre sur le code du template
  AND D_4T.TIMODI < T_5K.TIMODI          -- controle de dephasage
ORDER BY NUDOSS


Rien ne permet en revanche de repérer les demandes batch faisant référence à un type de sortie supprimé... Ci dessous un SQL pour repérer les demande Opération avec un édition faisant reference en ZO3P à un format TYPOUT qui n'existe plus dans le Template :

SELECT ZO00.NUDOSS, ZO00.CDUSER, ZO00.CDPHAS, ZO00.SUFXDM, ZO3P.CDMEPA, TYPOUT FROM ZO3P, ZO00
WHERE ZO00.NUDOSS=ZO3P.NUDOSS AND TISOUM='0001-01-01' AND TYPOUT <> ' '
MINUS
SELECT ZO00.NUDOSS, ZO00.CDUSER, ZO00.CDPHAS, ZO00.SUFXDM, ZO4C.CDMEPA, TYPOUT FROM ZO4C, ZO00
WHERE ZO00.NUDOSS=ZO4C.NUDOSS AND TISOUM='0001-01-01'

25 janvier 2008

Limiter la liste des arbres "HR Access Web" accessibles

Pour restreindre la liste des arbres Web accessibles (HRv3, HRv5), adaptez le web.xml de HRAccess en alimentant le paramètre TREELIST (par défaut celui ci vaut @ALL).


Séparez le nom de l'arbre, la langue et le vocable par des caractères underscore "_".

Séparez les arbres par des virgules ",".

Exemple :
        <servlet>
                <servlet-name>HRAdmin</servlet-name>
                <servlet-class>com.ibm.hraccess.webclient.servlets.ServletAdmin</servlet-class>
                <init-param>
                        <param-name>TREELIST</param-name>
                        <param-value>AA001_F_FRP,AA002_F_FRP</param-value>
                </init-param>
                <load-on-startup>3</load-on-startup>
        </servlet>

6 novembre 2007

Purge du cache Unix AIX avec "slibclean"

Dans certains cas, malgré la copie d'une nouvelle version des exécutables, HR Access fonctionne encore avec l'ancienne version des programmes (en cause : le cache Unix AIX).

Pour purger le cache AIX, il existe la commande "slibclean" (NB : Cette commande est réservée au compte "root").

En préalable à ce genre d'opération, assurez vous qu'il ne s'agit pas d'une rémanence de processus BHR (le "time out" peut être la source d'un déphasage) :
  • Fermer et ouvrir le dispatcher. 
  • En cas de nécessité tuer les processus.

21 septembre 2007

Compte Oracle verrouillé

Vu sous Oracle v10 : après 10 tentatives de connexion infructueuses, le compte se verrouille.

sqlplus hr/********
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Sep 21 14:55:19 2007
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
ERROR:
ORA-28000: the account is locked

En se connectant administrateur, on peut en faire le constat :
sqlplus / as sysdba
select username, account_status from dba_users where username='HR';
         
         USERNAME                       ACCOUNT_STATUS
         ------------------------------ --------------------------------
         HR                             LOCKED

Pour déverrouiller le compte :

alter user HR account unlock;

Les paramètres à l'origine de ce comportement sont consultables dans la vue "dba_profiles" :

select profile,resource_name,limit from dba_profiles where resource_type='PASSWORD' order by profile;

PROFILE                        RESOURCE_NAME                    LIMIT
------------------------------ -------------------------------- ----------------------------------------
DEFAULT                        FAILED_LOGIN_ATTEMPTS            10
DEFAULT                        PASSWORD_LIFE_TIME               UNLIMITED
DEFAULT                        PASSWORD_REUSE_TIME              UNLIMITED
DEFAULT                        PASSWORD_REUSE_MAX               UNLIMITED
DEFAULT                        PASSWORD_VERIFY_FUNCTION         NULL
DEFAULT                        PASSWORD_LOCK_TIME               UNLIMITED
DEFAULT                        PASSWORD_GRACE_TIME              UNLIMITED

Pour supprimer ce comportement, tapez :
alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS UNLIMITED;