22 janvier 2013

Page InstallManualApplet.html du client riche

Je suis tombé sur une page HTML supposée servir à récupérer l'applet HR Access sans avoir à se connecter (pour la distribuer dans les caches des JVM des postes clients) :

http(s)://<server>:<port>/hr-rich-client/InstallManualApplet.html

Ci dessous un exemple de page InstallManualApplet.html

<!--/* -----------------------------------------------------
*  WARANING : THIS FILE IS GENERATED, DO NOT UPDATE IT
* -----------------------------------------------------
 */-->
<HTML>
<BODY>
<APPLET CODE="com.hraccess.webclient.applets.AppletHRAccess" STYLE="display:none">
<PARAM name= "namespace" value="HRApplet720070071135">
<param name="useslibrary" value="HRApplet720070071135">
<param name="useslibrarycodebase" value="hrappleti.cab">
<param name="useslibraryversion" value="720070071135">
<PARAM Name="TOPICURL" VALUE="">
</APPLET>
</BODY>
</HTML>



Ensuite ... Cette page ne fonctionne pas (erreur Java - class not found) ... Et si je corrige value="hrappleti.cab" en value="hrapplet.jar" cela ne change rien ...

Pas le temps d'aller plus loin. Si vous avez des idées, je suis preneur.

10 janvier 2013

Error: OpenHRServer process $PID found, please stop it before.

Depuis HRv7 le script d'arrêt et de démarrage de OpenHR dispatcher.sh :
  • stocke le n° de processus de OpenHR dans $SIGACS/openhr/bin/.OpenHR.running,
  • contrôle la présence effective du processus Unix.
Donc normalement, si vous recevez ce message au démarrage de OpenHR, c'est que le dispatcher est déjà démarré.
Vous pouvez le contrôlez en tapant :  
ps -fu $LOGNAME | grep [o]penhr

C'est une (très) bonne chose, mais ce contrôle présente une erreur de syntaxe :
nb=`ps -ef | grep $PID | grep -c -v "grep"`

Le calcul qui est fait peut ramener des occurrences inopportunes :
  1. Si le PID de OpenHR est 525, ce grep va aussi comptabiliser les processus dont le numéro contient 525 (comme par exemple 6525 et 5259),
  2. Si le fichier .OpenHR.running est obsolète et que le numéro de processus qu'il contient a été réutilisé par le système (par exemple s'il existe un processus 525 désormais attribué à un processus de la base de données).

Je vous propose de remplacez cette ligne (présente deux fois dans le script) par :
nb=`ps -fp $PID | grep -c "openhr"`

8 janvier 2013

Micro Focus LMF - 004: You have exceeded the license limit for this product

Sur une même machine Unix, le nombre de compilations Cobol simultanées est limité par le nombre de clefs de licence de "Developement" achetées. Si ce nombre est dépassé, la compilation sort en erreur avec le message suivant :

Micro Focus LMF - 004: You have exceeded the license limit for this product.
No more licenses for this product are available.
All of the 0001 license units in the license database are in use.
Execution of this product has been terminated.
Contact your license administrator or Micro Focus product supplier to obtain additional license units.

Dans l'exemple ci dessus, la machine ne dispose que d'une clef. Donc sur la machine une seule compilation peut être exécutée à la fois.

Il est possible de demander la "mise en attente" de la compilation - ce qui évite de voir le traitement de génération sortir immédiatement en erreur. Ceci en positionnant la variable LMFWAIT : celle ci permet d'indiquer un nombre maximum de tentatives et un delai entre chaque tentative.

LMFWAIT=6,10
export LMFWAIT

Dans cet exemple, si la clef de compilation est déjà prise, le traitement fera 6 tentatives toutes les 10 secondes avant de sortir en erreur. Un message d'alarme est alors affiché :

Micro Focus LMF - 016: You have exceeded the license limit for this product. 
No more licenses for this product are available.
All license units in the license database are in use.
** Waiting for license unit to become available **
Contact your license administrator  or Micro Focus product supplier to obtain additional license units.

3 janvier 2013

Planifier un traitement par "crontab"

Sur les systèmes Unix les fichiers paramètres "crontab" servent à planifier des traitements réguliers (par exemple les arrêts/démarrages quotidiens ou la purge des fichiers obsolètes). Ils sont consultés et pris en charge par un processus système nommé "cron".

$  ps -ef | grep cron
    root  364580       1   0   Dec 28      -  0:05 /usr/sbin/cron 


Certains sites n'ayant pas d'outils d'ordonnancement peuvent aussi utiliser le "crontab" pour planifier les traitements fonctionnels (calcul de la paie, restitutions, interfaces ...).

Chaque utilisateur Unix peut créer sa crontab (sauf si l'administrateur en a bloqué l'usage - cf fichiers cron.allow et cron.deny de /var/adm/cron).

Syntaxe de la commande

crontab [ -e [UserName] | -l [UserName] | -r [UserName] | -v [UserName] | File ]

A noter : seul l'administrateur peut  accéder à la crontab d'un autre utilisateur.

Dans la pratique :
  • On se connecte avec le compte de l'utilisateur concerné,
  • On liste le contenu de son fichier de paramètre crontab par la commande "crontab -l",
  • On édite pour modification sa crontab par la commande "crontab -e", on fait la saisie sous "vi" et on l'enregistre par le ":wq" habituel - sinon ":q!" pour ne pas sauvegarder,
  • La mise a jour est prise en compte quand on quitte l'éditeur
  • Le système va par défaut sauvegarder la crontab dans un fichier sous /var/spool/cron/crontabs.

Format du fichier paramètre

Le format du fichier "crontab" est indiqué ci dessous.
Vous pouvez placer en entête de votre crontab ce pense bête :


# *     *     *   *    *        command to be executed
#
# |     |     |   |    |
# |     |     |   |    +----- day of week (0 - 6, Sunday=0)
# |     |     |   +------- month (1 - 12)
# |     |     +--------- day of month (1 - 31)
# |     +----------- hour (0 - 23)
# +------------- min (0 - 59)
#

(une ligne blanche ou commençant par # est ignorée)

Ainsi,
"0          8   *       *   1-5   command" exécutera la commande à 8h00 tous les jours ouvrés ,
"0,15,30,45 *   *       *   *     command" exécutera la commande tous les quart d'heure,
"0          8   1,10-12 *   *     command" exécutera la commande à 8h00 les 1, 10, 11 et 12 du mois.

Les champs "day of month" et "day of week" - s'ils sont tous deux alimentés - sont cumulatifs,

A noter : une commande est exécutée par "cron"
  • A partir d'un sous shell ouvert dans le répertoire $HOME du compte,
  • Le .profile doit être exécuté si vous souhaitez bénéficier des variables d'environnement (sinon seules quelques variables dont  HOME, LOGNAME, SHELL (=/usr/bin/sh), et PATH sont disponibles).
  • Certains caractères spéciaux doivent être "déspécialisés" pour être correctement interprétés. Ainsi pour suffixer un log par une date on utilisera : `date +\%Y-\%m-\%d-\%H.\%M.\%S`

Exemple

Soumission d'une NOY par le script spécifique sub_noy à 5h20 tous les lundi matin :

20 5 * * 1 ( . ${HOME}/.profile; sub_noy -p YIYZE -f ${FILE}/PSBBCG.ZE ) >> /hradev/hraccess/txt/log/cron.log 2>&1

Sauvegarder le crontab

Vincent nous a un jour édité le crontab en utilisant l'option "-r" ("read" s'est-il dit). L'option en question a détruit la crontab ("-r" signifie "remove" !) ... Pour prévenir de ces incidents, je vous engage a automatiser une copie de sauvegarde du crontab.

Exemple :
# Sauvegarde hebdomadaire du crontab à 5h00 chaque dimanche
00 05 *  *  0  ( . ${HOME}/.profile; crontab -l >> ${SIGACS}/param/crontab.SauvegardeHebdomadaire 2>&1) >> /hradev/hraccess/txt/log/cron.log 2>&1
 

# Sauvegarde mensuelle du crontab à 5h00 chaque 1er du mois
00 05 1  *  *  ( . ${HOME}/.profile; crontab -l >> ${SIGACS}/param/crontab.SauvegardeMensuelle    2>&1) >> /hradev/hraccess/txt/log/cron.log 2>&1



20 décembre 2012

NRB Synth

Anthony m'a invité à tester un outil d'analyse des comptes rendus NRB qu'il propose : NRB Synth ... Ci joint l'URL pour y accéder.

Une fois enregistré vous accédez à une application Web - vous lui transmettez votre fichier NRB322IZ (compressé s'il est volumineux), et l'application vous affiche en retour une synthèse des cas d'erreur.

Je n'ai pas contrôlé le résultat, mais l'idée est sympathique, l'analyse rapide, et la mise en forme vaut le coup d’œil ... Cela change des 24 lignes et 132 colonnes de l'édition texte !



Noter que vos données transitent sur le Web ... Évitez donc d'envoyer des informations nominatives, confidentielles ou privées !

18 décembre 2012

*GE01BMQ-BBAX0007-AUCUNE POPULATION LIBRE DANS LA TP13

Les chaînes batch HR Access vont créer suivant leurs besoins des listes de dossiers dans la table TP13 (identifiant des populations) et TP33 (numéros des dossiers).
  1. Le traitement qui crée une population va choisir le premier identifiant libre.
  2. Si aucune population n'est disponible, l'erreur BBAX0007 apparaîtra.
  3. En fin de traitement, la population est libérée par exécution du programme BE9.
Est considéré comme libre une population non verrouillée (TP13.TEVERR = 0) ou dont la création date de plus de 24 heures (TP13.TIPOPL).

Les populations de plus de 1 heure peuvent être libérées par un (syntaxe Oracle) :
update TP13 set TEVERR = '0' where TIPOPL < SYSDATE - 1/24


A noter :
  • Par défaut le produit est fournit avec 50 populations dans la table TP13. Pour un site important, il est tout à fait possible d'ajouter par insert des entrées dans cette table,
  • sur les premières versions HRv5 les chaînes NRA ne libéraient pas leurs populations. Si tel est le cas, demandez un patch à l'éditeur.

12 décembre 2012

Tables HRDesign apparues et disparues entre HRv5 et HRv9


Un certain nombre de tables historiquement présentes ont disparu avec HRv7 et HRv9 :
- Description des applications C/S : AP22 AP27 AP60 AP61 AP70 AP75 AP76 AP77 AP80 AP81 AP85 AP90 AP92
- Blobs (renommés BX) : BL10 BL20
- Tables de communication inter-programmes : CO22 CO60 CO70
- Description des écrans C/S : FE10 FE11 FE20 FE21 FE25 FE30 FE32 FE34 FE40 FE50 FE55 FE60 FE70 FE80 FE85 FE90
- Table de Mail : MD30
- Tables de communication inter-programmes : ME20
- Description des profils de confidentialité : PF11 PF20 PF22 PF25 PF30 PF34 PF40 PF60 PF70 PF80
- Description des feuilles de style C/S : ST10 ST11 ST20 ST31
- Populations TP : TP20
- Utilisateurs : authentification externe : UC30 UC40
- Verrouillage des dossiers consultés : VR10

D'autres sont apparues :
- Archives de rappel :AB10
- Description des Processus Guidés : BP05 BP06 BP07 BP10 BP11 BP13 BP15 BP20 BP30
- Blobs (anciennement BL) : BX10 BX20
- Event Depot (et séquence Oracle SEQUED10 - inutilisée ?) : ED10 ED20
- Tables de déploiement des objets HRaSpace : EM10 EM30
- Tables de la console d'évènements (à purger) : EV20 EV90
- Table de macros (inutilisée ?) : GE80 GE85
- Journalisation du Self Service (à purger) : LO10 LO20 LO30
- Données de session des utilisateurs (à purger) : MX10 MX20 MX30 MX40
- Données de session des applications OpenHR clientes (à purger) : MY10 MY20
- Données de travail des programmes batch (à purger) : PG50 PG60 PG70 PG80
- Paramètres de le Plate Forme Physique : PP15
- Références croisées / composants internes et objets : RC56
- Description des rôles de confidentialité : RM10 RM11 RM15 RM20 RM21 RM22 RM30 RM32 RM40 RM42 RM50 RM60
- Dates d'extraction ODS : TD08
- Rôles d'un utilisateur UC10 HR Design : UC15
- Mails internes HRaSpace (HRv9) : UD10 UD20 UD30 UD40
- Bloc Note interne HRaSpace(HRv9) : UP10 UP20 UP30