Objets métiers

Revision as of 09:47, 26 July 2019 by Florian.mortgat (talk | contribs) (→‎Lien entre Objets métiers: Exemple mis à jour pour les versions plus récentes de Dolibarr où load_object_linked est remplacé par fetchObjectLinked)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)


Objets métiers

Tous les objets métiers sont définis par une classe PHP qui hérite de la classe CommonObject (définie dans le fichier commonobject.class.php).

Pour trouver la classe qui correspond à l'objet métier qui vous interessent, parcourez l'arborescence de fichiers de Dolibarr à la recherche des fichier */class/*.class.php. En effet, toutes les classes se trouvent dans un sous répertoire class d'un répertoire en rapport avec l'objet. Par exemple:

  • htdocs/societe/class/societe.class.php pour les tiers
  • htdocs/compta/facture/class/facture.class.php pour les factures clients
  • htdocs/fourn/class/fournisseur.facture.class.php pour les factures fournisseurs

...

Chaque classe métier possède les 4 méthodes CRUD à utiliser pour réaliser vos lectures ou mises à jours en base:

  • Créer (C pour Create): Utiliser la méthode create()
  • Lire (R pour Read): Utiliser la méthode fetch()
  • Modifier (U pour Update): Utiliser la méthode update()
  • Supprimer (D pour Delete): Utiliser la méthode delete()

Voir exemples plus bas...

Lien entre Objets métiers

Certains objets métiers sont liés les uns aux autres. Ceci est fait dans Dolibarr via la Table llx_element_element. Mais vous n'avez pas à lire cette table pour récupérer les objets liés à un autre. Voici la portion de code qui montre comment faire cela:

Dolibarr 3.1 et versions ultérieures :

$commande = new Commande($db);
$commande->fetch($commande_id);


// on veut récupérer des factures à partir d’une commande dont on connaît l’ID
$result = $commande->fetchObjectLinked($commande->id, 'commande', null, 'facture');
if ($result <= 0) {
    // erreur
}

// important : les tableaux créés sont associatifs : leurs clés sont des rowid de llx_element_element.


// FAUX (renverra NULL): 
$facture_id = $commande->linkedObjectsIds['facture'][0]

// CORRECT:
$facture_id = array_values($commande->linkedObjectsIds['facture'])[0]

// MIEUX (permet de gérer le cas où il y aurait plus d’une facture) :
foreach ($commande->linkedObjectsIds['facture'] as $element_element_id => $facture_id) {
    // ...
}

Avant Dolibarr 3.1 :

// This load the array linked_object with objects that link to this one
$object->load_object_linked($object->id, $object->element);
// To load array linked_object with objects that are linked by this one
$object->load_object_linked($object->id, $object->element);

// Then choose id with objects type you need
$org_order_array = $object->linked_object["commande"];

// Now use them
$thelinkedobjectid = $org_order_array[0];
// new order instance
$thelinkedobject = new Commande($object->db);
// load the object
$thelinkedobject->fetch($thelinkedobjectid);

Exemples

Exemple pour la création d'un tiers

Voici un exemple pour la création d'un tiers (société client par exemple):

Si on est dans le cas d'un script nouveau ou externe à Dolibarr, il est nécessaire de faire au début de son code, avant toute chose

include('/pathofdolibarrhtdocs/master.inc.php');

pour que l'environnement Dolibarr (objets $conf, $db, $lang et $user) soit créé. Si on veut que les actions (creation, mise à jour), soit associées dans le suivi à un utilisateur particulier, il est nécessaire de faire après l'include du master.inc.php

$user->fetch(0,'loginuser');

Ensuite, on peut manipuler nos actions métiers.

// On declare la classe que l'on va manipuler
include_once('/pathofdolibarrhtdocs/societe/class/societe.class.php');
 
// On cree une instance de l'objet à manipuler
$mycompany = new Societe($db);
 
// On renseigne ces caractéristiques
$mycompany->nom='Big Brother';
$mycompany->client=1;
 
// Si on veut que l'action de création soit associé a un utilisateur 'loginuser' particulier,
// il faut decommenter cette ligne pour charger les caractéristiques de cet utilisateur.
// Si on laisse commenté, Dolibarr mettra null dans les champs du user de création ou mise à jour.
// $user->fetch('loginuser');
 
// On invoque la creation
$id=$mycompany->create($user);
 
// Pour relire l'objet
$mycompany->fetch($id);
 
// Pour le mettre à jour
$mycompany->nom='Big Brother 2'
$mycompany->update($user);

Autres exemples

Vous trouverez d'autres exemples de manipulation d'objet Dolibarr (Création, Lecture, Modification, Suppression) dans le répertoire dev/samples du snapshot de Dolibarr.