Archives par mot-clé : MI

Convertir des variables hexadécimales en caractères Convert Hex to Character (CVTHC)

Le problème rencontré est d’afficher une variable hexadécimale sur un écran (DSPF). Après moult recherche, j’ai trouvé l’API Convert Hex to Character (CVTHC)dans la catégorie IBM i Machine Interface.

Une table DB2 contient le champ spécial de type ROWID. Ce champ déclaré en SQLTYPE(ROWID) 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:

Autre lien décrivant son utilisation:

Utilizing MI Functions in RPG Programs