**Ceci est une ancienne révision du document !**
Mapping dolibarr <-> react
Pour que le front “sache” quel type de données sont envoyées par le back les objets dolibarr sont “exposés” au front. Comme certains types de données côté dolibarr n'existent pas à l'identique côté front nous avons mis en place des mécanismes de “correspondance” ou “mapping” dont vous trouverez les détails ci après.
Pour optimiser les échanges entre le back (php) et le front (react) nous avons fait le choix de permettre la modification des données côté back avant l'envoi vers le front.
Listez les champs de l'objet dolibarr que vous voulez publier vers le front
Vous pouvez limiter côté back la liste des champs qui seront envoyés vers l'application react en lisant tout simplement les champs que vous voulez exporter dans la variable _listOfPublishedFields
comme par exemple
la clé est le nom du champ de l'objet dolibarr et la valeur est le nom que vous voulez donner côté réact :
//corresponding fields left dolibarr right front app protected $_listOfPublishedFields = [ 'rowid' => 'rowid', 'nom' => 'name', 'address' => 'address', 'zip' => 'zip', 'town' => 'city', 'fk_departement' => 'departement', 'fk_pays' => 'country', 'phone' => 'phone', 'url' => 'url', 'email' => 'email', 'note_public' => 'note_public', 'note_private' => 'note_private', 'logo' => 'logo' ];
Ensuite au moment où les données seront mises en formes pour être envoyées vers react un certain nombre de mécanismes seront mis en oeuvre:
Filtrer le contenu : fonction magique _fieldFilterValueXXXX
Imaginez que vous voulez rendre le logo de l'objet Société accessible à l'application react : l'objet dolibarr contient le nom du fichier logo et l'application react s'attend à avoir un logo sous la forme d'un champ base64 encodé …
Vous pouvez tout simplement implémenter la fonction _fieldFilterValueXXXX en replaçant XXXX par le nom du champ dont vous voulez filtrer le contenu (avec la 1ere lettre en majuscule), dans notre exemple ça serait donc _fieldFilterValueLogo dans votre classe de mappage dmSociete donc
public function _fieldFilterValueLogo($societe) { global $conf; // dol_syslog("##### dmHelper : call for _fieldFilterValueLogo for " . $societe->logo); $dir = $conf->societe->multidir_output[$societe->entity] . "/" . $societe->id . "/logos"; $logo = $dir . '/' . $societe->logo; $logoBase64 = ""; if (file_exists($logo)) { $type = pathinfo($logo, PATHINFO_EXTENSION); } else { $logo = dol_buildpath("/smartlivraisons/img/logo.png", 0); $type = pathinfo($logo, PATHINFO_EXTENSION); } $logoBase64 = 'data:image/' . $type . ';base64,' . base64_encode(file_get_contents($logo)); // dol_syslog("##### dmHelper : returns " . strlen($logoBase64)); return $logoBase64; }
Listez les champs des lignes de l'objet dolibarr que vous voulez publier vers le front
Certains objets dolibarr sont composés de lignes (Exemple : une facture, un devis, un bon de commande…) il faut donc
a) envoyer une description des lignes au front pour savoir ce qu'il faut afficher comme composants pour afficher les données (par exemple 4 colonnes : id de type nombre, description de type texte, prix unitaire, quantité, total) b) envoyer le contenu des lignes
Malheureusement tous les objets dolibarr ne sont pas conçus de manière strictement identiques (certains ont un prefixe Line
et d'autres Ligne
, comme par exemple FichinterLigne
et OrderLine
) nous avons donc implémenté la solution suivante:
D'autre part les objets dolibarr ont tous une variable “fields” qui décrit l'objet mais il n'en est pas de même pour la description des lignes des objets ce qui rends impossible la gestion de code générique côté front.
DoliMobile apporte une solution à ce double problème: dans la classe de description du mapping de votre objet (exemple dmSmartinter
) vous pouvez utiliser
- a)
parentClassNameForLines
pour indiquer le nom de la classe dolibarr qui implémente les lignes de l'objet - b)
_listOfPublishedFieldsForLines
pour indiquer la liste des champs que vous voulez exporter et sous quel nom (mapping dolibarr → application) - c)
parentLabelForLines
pour indiquer le titre (qui sera traduit) que vous voulez afficher au dessus de la liste des lignes sur l'application (par exemple “Détail des lignes de la facture”)