Le problème rencontré est d’afficher une variable hexadécimale sur un écran (DSPF).
Voici le problème posé ; une table DB2 contient le champ spécial de type ROWID. Ce champ SQLTYPE est transformé par le compilateur en CHAR(40) Varying CCSID(*HEX). Dans un écran, je souhaite afficher les différents champs d’un enregistrement de la table dont le ROWID mais ce type de variable n’existe pas en DDS.
La solution est d’extraire la valeur hexadécimal sous forme caractère. L’API CVTHC permet de le faire (et vice versa).
D’abord, voici le prototype :
/If defined(Cvthc) //--------------------------------------------------------- // Convert Hex to Character dcl-pr cvthc extproc(*dclcase); *n pointer value; // receiver pointer *n pointer value; // source pointer *n int(10) value; // receiver length end-pr; /endif
Il faut déclarer la variable d’entrée ( valeur à convertir) dans le source RPGLE
// Gestion du ROWID Dcl-s g_Rowidlots SQLTYPE(ROWID);
et celle de sortie (valeur convertie) dans l’écran.
A ZROWIDLOTS 84 O 24 4COLOR(WHT)
Ensuite voici comment elle est utilisé en RPGLE :
cvthc(%addr(zrowidlots): %addr(g_rowidlots): %Len(g_rowidlots)*2); //make hex
Sur l’écran nous obtenons :
Convert Hex to Character (CVTHC)
Utilizing MI Functions in RPG Programs
CONVERTIR DES VARIABLES HEXADÉCIMALES EN CARACTÈRES CONVERT HEX TO CHARACTER (CVTHC)