IFSXml – Brève présentation des writers

Les writers d’IFSXml permettent de créer des procédure spécifiques pour traiter le flux produit par le service afin de maximiser la réutilisation des procédures d’alimentations (cf. good practice).

Principe

Pour commencer, il est important de rappeler qu’IFSXml n’est qu’un simple formateur de flux XML. Flux qu’il produit « à la volé », selon les ordres communiqués par le programme client et selon les règles de formatage paramétrées. Les données ainsi formatées sont ensuite envoyées pour une écriture définitive. Le writer est la procédure qui réceptionne ce flux formaté. Il intervient après le gestionnaire de cache.

Dans IFSXml ces données formatées sont toujours transmises par l’intermédiaire d’un writer. La fonction intégrée ifsxml_createFile() en définie un elle-même. Pour utiliser sa propre fonction, il suffit d’utiliser la fonction ifsxml_setWriter() et de lui passer en paramètre l’adresse de la procédure souhaitée. Un seul writer peut être défini par handle.

Implémentation d’un writer

La fonction candidate est doit être l’implémentation du prototype ci-dessous :

     d m_ifsxmlWriter...
     d                 pr
     d   p_ctx...
     d                                     value like(m_ifsxml_handle)
     d   dta...
     d                                 *   value
     d   len...
     d                               10u 0 const

Lorsqu’elle est appelée, trois informations lui sont transmises :

  • Le handle du document concerné
  • Un pointeur sur le segment formaté
  • La longueur du segment

Le pointeur est positionné sur le début du segment formaté. La longueur des segments transmis n’est pas prévisible car elle dépend de plusieurs facteurs (taille et taux d’occupation du cache, données en attentes de stockage etc.).

Deux précautions sont à prendre dans un writer :

  • Il ne faut pas stocker le pointeur car rien ne garanti que le segment suivant utilisera le même buffer.
  • Il faut éviter d’utiliser les fonctions d’éditions – ifsxml_addElement() etc.- dans un writer car cela pourrait le faire boucler.

Exemples

IFSXml propose quelques exemples d’implémentation :

  • T_IFSXML03 : Sort les données vers la joblog
  • T_IFSXML04 : Sort les données vers un fichier IFS dans passer pas la fonction intégrée ifsxml_createFile()
  • T_IFSXML05 : Sort les données vers http. Le source est visible en ligne.