19 juin 2014

Utiliser une clef SSH pour se connecter avec Putty, Filezilla

L'utilisation des clefs SSH permettent de remplacer l'authentification par mot de passe demandée par le serveur Unix/Linux. Pour ceci chacun doit se créer sa propre clef, puis le gestionnaire du compte Unix/Linux doit la référencer dans la liste des clefs autorisés.

A noter :
  • En fait chacun se crée un "couple" de clefs :
    • Une est dite "privée". Elle ne doit rester strictement la propriété de son créateur. Elle sert notamment à chiffrer les communications,
    • La seconde est dite "publique". Son propriétaire la transmet à ses "interlocuteurs". Elle sert à authentifier le propriétaire des clefs et à déchiffrer ses communications.
  • Ce système peut aussi servir entre deux applications,
  • Le bon fonctionnement de l'authentification par clef dépend de son paramétrage par l’administrateur Unix/Linux (/etc/ssh, droits d'accès)

Création des clef

  • Télécharger PuttyGen.exe
  • Exécuter PuttyGen
  • Choisir (par exemple) un type de clef RSA et une longueur de clef de 2048 bits :

  • Cliquer sur "Generate" et déplacer la souris pour générer une clef aléatoire,

  • Une fois la clef calculée, indiquez en commentaire vos nom et prénoms. Pour des raisons de sécurité (vol de votre clef privée), il est conseillé de paramétrer un mot de passe pour pouvoir utiliser la clef. Ceci est facultatif.

  • Sauvegardez les clefs, par exemple sous le nom :
    • Prénom_NOM.pub pour la clef publique
    • Prénom_NOM.ppk pour la clef privée

A noter : sur une machine Unix ou Linux la création de la clef peut être réalisée en mode commande.
Par exemple : ssh-keygen -t rsa -b 2048 -C "Nom Prenom" -f Prenom_NOM

Paramétrage sur le serveur

  • Transmettre la clef publique à l’administrateur pour qu’il la place dans le fichier « $HOME/.ssh/authorize_keys » du compte ciblé
 A noter : les droits Unix/Linux sur le répertoire ".ssh" et le fichier "authorized_keys" doivent être restrictifs sans quoi les autorisations ne seront pas prises en compte.

Paramétrage sur le micro

  • Pour Putty indiquez l’emplacement de la clef privée dans Connection / SSH / Auth « Private key file for authentication »



  • Pour Filezilla indiquez l’emplacement de la clef privée dans Edition / Paramètres / Connexion / SFTP « Ajouter une clef privée »

Test de connexion


login as: hradev
 

Authenticating with public key "Digix"
Passphrase for key "Digix":
-------------------------Avis aux utilisateurs----------------------------------
Tout acces non autorise sur ce systeme est passible de poursuites.
--------------------------------------------------------------------------------
hr9dev@srvlnx001:/home/hradev>

12 juin 2014

Créer un "DIRECTORY" Oracle en référençant le code instance

Ci dessous un script SQL qui crée dans la base Oracle un "DIRECTORY" nommé HR_FILE pour les outils d'export import "Data Pump".

La plupart du temps le chemin contient le nom de l'instance, ce qui nécessite de variabiliser l'ordre de création.

Ici Gabriel récupère ce nom dans une variable "SID" qu'il réutilise lors du "CREATE" :

COLUMN INSTANCE NEW_VALUE SID NOPRINT
SELECT SYS_CONTEXT('USERENV','DB_NAME') AS INSTANCE
FROM DUAL
/
CREATE DIRECTORY HR_FILE AS '/oracle/&SID./exports'
/



11 juin 2014

Un effet de bord de la "Timezone" Linux sur les dates saisies dans HRCT


Sur certains environnements les utilisateurs nous ont signalés que les dates saisies via interface web de HRCT sont altérées (stockées en base à J – 1 : par exemple un utilisateur qui saisit 01/03/2014 retrouvera en base 28/02/2014). Hors pour d'autres environnements hébergés sur d’autres serveurs, la saisie est correcte.

Après contact avec l’éditeur, celui-ci nous suggère de contrôler les TimeZone des machines incriminées.

Si la commande « date +%Z » affichait le même résultat, les commandes suivantes indiquaient effectivement des différences :
  • Sur une machine correcte :
hr-configuration-tool-web-smartgwt.log: user.timezone=Europe/Paris

ls -l /etc/localtime
-rw-r--r-- 1 root root 2945 29 oct. 2013 /etc/localtime

  • Sur une machine incorrecte :
hr-configuration-tool-web-smartgwt.log: user.timezone=GMT
 

ls -l /etc/localtime
-r--r--r-- 1 root root 5890 6 sept. 2013 /etc/localtime


Après correction du /etc/localtime par l'administrateur Unix, le comportement de HRCT est redevenu normal.

PS : La date HRCT passait à J-1 car  01/03/2014 moins une heure donne 28/02/2014:23:00 - puis l'heure est tronquée.


Autre option, à tester : ajouter l'option "-Duser.timezone=Europe/Paris" à la ligne de commande Java de Tomcat.

2 juin 2014

Envoyer un mail par Telnet

Ci dessous un exemple d'invocation d'un serveur mail avec Telnet.

Indiquez :
  • L'adresse IP du serveur (ici 1.2.3.4) et le port (ici 25)
  • Le nom de domaine (ici digix.com)
  • L'émetteur ("mail from:"),
  • Le recepteur ("rcpt to:"),
  • Le contenu du mail ("data"),
  • Terminez par un "." et "quit"
Ce genre de test peut servir à débugger un problème de connexion entre HRQuery et le serveur mail de l'entreprise.

telnet 1.2.3.4 25
Trying...
Connected to 1.2.3.4.
Escape character is '^]'.
220 MAILSERVER.intranet.xyz Microsoft ESMTP MAIL Service ready at Mon, 2 Jun 2014 13:43:32 +0200
helo digix.com
250 MAILSERVER.intranet.xyz Hello [1.2.3.4]
mail from:joe@digix.com
250 2.1.0 Sender OK
rcpt to:jack@digix.com
250 2.1.5 Recipient OK
data
354 Start mail input; end with <CRLF>.<CRLF>
Ceci est un test d'envoi de mail

.
250 2.6.0 <21c55b59-a638-4615-8938-0d5a5edbcb8a@MAILSERVER.intranet.xyz> Queued mail for delivery
quit
221 2.0.0 Service closing transmission channel
Connection closed.



15 mai 2014

utilisation de SYSDATE dans une requête - impact sur les performances

De la part de Gabriel : Lorsque l’on utilise SYSDATE dans une requête, Oracle évalue la valeur de la date système SYSDATE à chaque ligne.

Par exemple avec cette requête :
select count(*) from ZX8K where perpai='MT'||to_char(SYSDATE, 'YYYYMM'); 
Oracle lance environ 5 500 000 évaluations de SYSDATE. Le temps d’exécution est de 8,25 secondes.

Résolution : sous sqlplus, la valeur de la colonne SYSDAT est stockée dans une "variable sqlplus" nommée SYSDATE une fois pour toute :

set verify off 
column SYSDAT NEW_VALUE SYSDATE NOPRINT
select 'to_date('''
     || to_char(SYSDATE, 'YYYY-MM-DD-HH24.MI.SS')
     || ''', ''YYYY-MM-DD-HH24.MI.SS'')' as SYSDATE
from DUAL;


La requête devient :

select count(*) from ZX8K where perpai='MT'||to_char(&SYSDATE., 'YYYYMM'); 

Le temps d’exécution passe à 1 seconde.

25 avril 2014

Utiliser IE10 avec un HR Access compatible IE8

Pour les postes Windows avec IE10 devant se connecter à un environnement HR Access compatible IE8, vous pouvez aller dans Tools > Developer Tools (ou tapez "F12") et activer la compatibilité IE8 :



Merci à Pascal pour l'information ...
et à http://support.microsoft.com/kb/2823575/fr

A noter : L'option est à réactiver à chaque ouverture de IE. Ce n'est donc qu'une solution de dépannage.

18 mars 2014

HRaSpace et "java.sql.SQLRecoverableException: Il n'y a plus de données à lire dans le socket"


Sur un site l'application HRaSpace était indisponible le lendemain de chaque sauvegarde de la base de données. Sur ce site la base JetSpeed était déportée sur un schéma Oracle.

Le problème rencontré était lié à la gestion du pool de connexion JDBC de Tomcat sur la base Jetspeed. Dans le cas particulier d'une déconnexion (arrêt Oracle) - JetSpeed n'est pas informé de cette fermeture - et le prochain accès provoque l'erreur même si la base est entre temps redémarrée.

Une solution est de paramétrer Tomcat pour qu'il vérifie la validité des connexions dans le pool. Pour cela, modifier le fichier de configuration du pool JDBC en ajoutant un attribut "validationQuery" avec une requête de test (cf documentation Tomcat). Dans le cas de Oracle, la requête peut être du type "select 1 from DUAL"

Exemple de fichier tomcat/conf/Catalina/localhost/hra-space.xml :

<Resource name="jdbc/jetspeed" auth="Container"
validationQuery="select 1 from DUAL"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
type="javax.sql.DataSource" username="<user>" password="<passwd>"
driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@<server>:<port>:<base>"
maxActive="100" maxIdle="30" maxWait="10000"/>



Merci à la HotLine pour cette information.

A noter : En général ce problème n’apparait pas car lors d'une sauvegarde offline (base arrêtée) on ferme l'application Web !

21 février 2014

Déclarer des "profils" pour les connecteurs JDBC de la Topologie

Avec HRaSuite 9 il est possible de déclarer des "profils JDBC" dans la topologie système. L'information est présente (au moins depuis le Design Center 7.30.30) dans le fichier "Design Center/EXE/Compagnon/F_SITE_OBJECT_7_2.htm" mais avec ma version de Studio le Compagnon ne l'affiche pas !





Les profils sont à déclarer dans le connecteur JDBC de la fonction "serveurs HR Access" de l’objet Topologie système.

4 février 2014

Soumission des scripts sub** (Y/N/T) Choix T : Voir le log défiler en avant plan

Le script $SIGACS/finsub est exécuté par chacun des scripts sub**. Il demande à l'utilisateur s'il souhaite exécuter le traitement.

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

Les choix sont :
  • Y : Soumission immédiate en arrière plan,
  • N : pas de soumission du traitement,
  • T : Soumission "TP" en avant plan.
Par défaut l'exécution en avant plan retient l'utilisateur jusqu'à la fin du traitement, sans fournir d'information à l'écran.

Pour visualiser le défilement du compte rendu, modifiez le script comme suit :

...
if
  [ "$CFLAN" = "Y" ]
  then
    echo "${T_JOBSUB}"
    $SIGACS/bin/job "$1" "$2"
    CODE_RETOUR=$?
  else
    if
      [ "$CFLAN" = "T" ]
      then
        echo "${JOBTP}"
        # Maj DIGIX : le compte rendu est envoye sur la sortie ecran en plus du log
        $SIGACS/prod/shl/"$1" "$2" 2>&1 |tee $LOG/$JOBLOG

        # Fin maj DIGIX
      else
        exit 12
    fi
fi ...




A noter : un traitement en "avant plan" sera interrompue en cas de perte de la session Unix, ou d'un CTRL^C exécuté par l'utilisateur.

3 février 2014

Retrouver les DDL de création d'une table

La chaine RBF permet de générer les DDL de création des tables HR Access en se basant sur la description des objets "Information". Le programme utilise aussi des résultats intermédiaires de génération : les "macros information" des tables GE1*. Ces macros ne sont présentes que sur les environnements de type "Développement" (générables).

Quand il n'est pas possible de créer ces DDL avec la chaîne RBF, le SGBD permet en général de retrouver l'ordre de création (exemple avec la table TP13) :
  • sous Oracle, via SQLPlus :
SET LONG 2000000 PAGESIZE 0 
SELECT dbms_metadata.get_ddl('TABLE','TP13','HR') FROM DUAL;

DBMS_METADATA.GET_DDL('TABLE','TP13','HR')
--------------------------------------------------------------------------------

  CREATE TABLE "HR"."TP13"
   (    "IDPOPL" CHAR(4) NOT NULL ENABLE,
        "TEVERR" CHAR(1) NOT NULL ENABLE,
        "TIPOPL" DATE NOT NULL ENABLE,
         CONSTRAINT "IXTP13" PRIMARY KEY ("IDPOPL")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "HRXT"  ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "HRTT"


  • sous DB2, via Unix :
db2look -d $DB2DBDFT -e -u $LOGNAME -tw "TP13"

------------------------------------------------
-- DDL Statements for table "HR      "."TP13"
------------------------------------------------

CREATE TABLE "HR      "."TP13"  (
                  "IDPOPL" CHAR(4) NOT NULL ,
                  "TEVERR" CHAR(1) NOT NULL ,
                  "TIPOPL" TIMESTAMP NOT NULL )
                 IN "USERSPACE1" ;

-- DDL Statements for primary key on Table "HR      "."TP13"

ALTER TABLE "HR      "."TP13"
        ADD PRIMARY KEY
                ("IDPOPL");

COMMIT WORK;
CONNECT RESET;
TERMINATE;

31 janvier 2014

Erreur BQL au chargement : Clef en double - S1/EXECUTE/10/PK/000000000000001

Christian relance une NJU incidentée du fait d'un disque plein. Mais le chargement par BQL de ZX5W se bloque sur une erreur de "clef en double" qui n'existait pas auparavant :

*GE01BQL-BBAD0015-ERREUR D'ACCES (TABLE RELATIONNELLE) : S1/EXECUTE/10/PK/000000000000001
*GE01BQL-00000000- INSERT INTO       HR.ZX5W        (NUDOSS,NULIGN,SOCDOS,PGPDOS,CODCHN,TYREPO,IDC
*GE01BQL-00000000-HN ,TIMCHN,STATUS,IDGPRG,SOCCLE,MATRIC,NUDOSP,IDSITU,PERPAI,USAGEP,NUMTRT,NUMBUL
*GE01BQL-00000000-,TIMEST) VALUES ( +000066862, +000001, '100', +001230000, 'NJU', 'D', 'DADSU2013
*GE01BQL-00000000-         ', TO_DATE ('2014-01-30-19.14.58','YYYY-MM-DD-HH24-MI-SS'), '0', +00123
*GE01BQL-00000000-0000, '100', '00566       ', +001, '  ', 'MT201301', 'S', '0', '01', TO_DATE ('0
*GE01BQL-00000000-001-01-01-00.00.00','YYYY-MM-DD-HH24-MI-SS'))
*GE01BQL-BBAD0008-STATISTIQUES SUR LES FICHIERS (ENREGISTREMENTS LUS/ECRITS)
*GE01BQL-BBAD0009-PA (PA) : 000000000000001
*GE01BQL-BBAD0009-SQ (SQ) : 000000000000337
*GE01BQL-BBAD0011-*** BQL : FIN ANORMALE - HORODATAGE DE FIN   : 2014-01-30-19.21.32  **** CODE RETOUR 99 ******


Après analyse, il s'est avère que:
  • Une première exécution de BQL s'est interrompue en cours de chargement,
  • Lors de cette exécution la ZXTD12 a été purgée,
Lorsque la chaine est relancée :
  • Sans données dans la ZXTD12, la chaine choisit de prendre un NULIGN = 1
  • Mais ce n° est déjà pris :


NUDOSS NULIGN SOC PGPDOS COD T IDCHN TIMCHN S IDGPRG SOC MATRIC NUDOSP ID PERPAI U N NU TIMEST
---------- ---------- --- ---------- --- - ------- ------------------- - ---------- --- ------------ ---------- -- -------- - - -- -------------------
66862 1 100 1230000 NJ6 C RFEDB 2013-01-23-13.51.46 0 1230000 100 00566 1 MT201301 S 0 01 0001-01-01-00.00.00


Solution : reconstruire la ZXTD12 en exécutant une ROL (dans certains cas simple un SQL d'INSERT peut suffire).

17 décembre 2013

Correspondances entre traitements d'édition de bulletin HRv5 et HRv7

Ci dessous une table de correspondances (rencontrée au hasard d'un projet) entre la V5 et la V7 concernant certains contextes de traitements de paie :


 

HRv5
HRv9

Program/Job Contexts Program/Job Contexts
Initialize at beginning of program DBD/NJ1 TDP350 DB9 TDP350
"

DGD TDP754
"

DC7 TDPA34
Load rule system DBD/NJ1 TDP351 DB9 TDP351
"

DGD TDP755
"

DC7 TDPA35
Modify items in the bank transfer interface DBD/NJ1 TDP352 DGD
Initialize user-dehned variables DBD/NJ1 TDP358 DB9 TDP358
Initialize payroll log holds DBD/NJ1 TDP360 DB9 TDP360
Process payroll log fields DBD/NJ1 TDP362 DB9 TDP362
Delete payslip DBD/NJ1 TDP364 DGD TDP757
End of job DBD/NJ1 TDP366 DB9 TDP366
"

DC8 TDPA53
Modify payslip sort criteria DBD/NJ1 TDP368 DC7 TDPA36
Modify payment sort criteria DBD/NJ1 TDP370 DGD TDP757
Insert sort arguments for payroll logs DBD/NJ1 TDP372 DB9 TDP372
Modify values in the payroll log work field DBD/NJ1 TDP374 DB9 TDP374
Merge payroll items DBD/NJ1 TDP376 DC8 TDPA60





Process parameters DBL/NJ1 TDP530  DC8/NJ6 TDPA40 
Process the payslip issuing date  DBL/NJ1 TDP532  DC8/NJ6 TDPA40 
Initialize all companies DBL/NJ1 TDP534  DC8/NJ6 TDPA41 
Calculate flow control variables  DBL/NJ1 TDP536  DC8/NJ6 TDPA42 
Recovery of the company data  DBL/NJ1 TDP537  DC8/NJ6 TDPA43 
Process item positions on payslip DBL/NJ1 TDP538  DC8/NJ6 TDPA44 
Move items from payslip body to stub DBL/NJ1 TDP539  DC8/NJ6 TDPA45 
Process payslip header lines DBL/NJ1 TDP540 DC8/NJ6 TDPAA6 
Print payslip header using customized spgm  DBL/NJ1 TDP541 DC8/NJ6 TDPA47 
Process payslip stub lines DBL/NJ1 TDP542 DC8/NJ6 TDPA48 
Print payslip stub fines using customized spgm  DBL/NJ1 TDP543 DC8/NJ6 TDPA49 
Process printout of payslip body DBL/NJ1 TDP544 DC8/NJ6 TDPA50 
Process user subreports for payslip DBL/NJ1 TDP545  DC8/NJ6 TDPA59 
Prepare total lines DBL/NJ1 TDP546  DC8/NJ6 TDPA51 
Process lines after totaling  DBL/NJ1 TDP548  DC8/NJ6 TDPA52 
End of job DBL/NJ1 TDP550 DC8/NJ6 TDPA53