Difference between revisions of "Business Objects"
(→Link between Business objects: updated for Dolibarr 3.1 & higher) Tag: 2017 source edit |
|||
(16 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
+ | <!-- BEGIN origin interlang links --> | ||
+ | <!-- You can edit this section but do NOT remove these comments | ||
+ | Links below will be automatically replicated on translated pages by PolyglotBot --> | ||
+ | [[fr:Objets_métiers]] | ||
+ | [[es:Objetos_de_negociado]] | ||
+ | [[zh:业务对象]] | ||
+ | <!-- END interlang links --> | ||
+ | |||
+ | {{TemplateDocDevEn}} | ||
+ | = Business objects = | ||
+ | All business objects are defined by a PHP class that inherits the class CommonObject (defined in file commonobject.class.php). | ||
+ | Every business object has the 4 CRUD methods you can use to read or save into database: | ||
+ | * Create: create() | ||
+ | * Read: fetch() | ||
+ | * Update: update() | ||
+ | * Delete: delete() | ||
+ | |||
+ | See examples later... | ||
+ | |||
+ | = Link between Business objects = | ||
+ | Some business objects are linked to other business objects. This is done in Dolibarr using the [[Table llx_element_element]]. But you don't have to read this table to get objects linked to another. | ||
+ | |||
+ | Here is how you can use this (Dolibarr 3.1 and higher): | ||
+ | <source lang="php"> | ||
+ | // get invoices from an already loaded order: | ||
+ | $result = $order->fetchObjectLinked($order->id, 'commande', null, 'facture'); | ||
+ | if ($result <= 0) { | ||
+ | // handle error | ||
+ | } | ||
+ | // important notice : the newly populated arrays are associative. Keys are llx_element_element row ids. | ||
+ | |||
+ | // now if we expect only one linked invoice: | ||
+ | |||
+ | // WRONG way to get it ($invoice_id will be NULL): | ||
+ | $invoice_id = $order->linkedObjectsIds['facture'][0] | ||
+ | |||
+ | // CORRECT way ($invoice_id will hold the ID): | ||
+ | $invoice_id = array_values($order->linkedObjectsIds['facture'])[0] | ||
+ | |||
+ | // Better (if there are more than one linked invoices) : | ||
+ | foreach ($order->linkedObjectsIds['facture'] as $element_element_id => $facture_id) { | ||
+ | // process it | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | Prior to Dolibarr < 3.1: | ||
+ | <source lang="php"> | ||
+ | // 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); | ||
+ | </source> | ||
+ | |||
= Examples = | = Examples = | ||
Line 18: | Line 81: | ||
<source lang="php"> | <source lang="php"> | ||
// We declare the class we want to use | // We declare the class we want to use | ||
− | include_once('/pathofdolibarrhtdocs/societe.class.php'); | + | include_once('/pathofdolibarrhtdocs/societe/class/societe.class.php'); |
// We create an instance of object to manipulate | // We create an instance of object to manipulate | ||
Line 29: | Line 92: | ||
// If we want that creation is tagged as done by a particular user 'loginuser', | // If we want that creation is tagged as done by a particular user 'loginuser', | ||
// you must uncomment this line to load all characteristics of this user. | // you must uncomment this line to load all characteristics of this user. | ||
− | // If we keep the comment, Dolibarr will use null | + | // If we keep the comment, Dolibarr will use null into fields that should store the create or update user. |
// $user->fetch('loginuser'); | // $user->fetch('loginuser'); | ||
− | // | + | // We call method to create |
$id=$mycompany->create($user); | $id=$mycompany->create($user); | ||
Line 39: | Line 102: | ||
// To update object | // To update object | ||
+ | $mycompany->nom='Big Brother 2'; | ||
$mycompany->update($user); | $mycompany->update($user); | ||
</source> | </source> | ||
== Other examples == | == Other examples == | ||
− | You may find other example for manipulating Dolibarr objects (Create, Read, Update, Delete) into directory '''dev/samples''' of Dolibarr | + | You may find other example for manipulating Dolibarr objects (Create, Read, Update, Delete) into directory '''dev/samples''' of Dolibarr snapshot. |
Latest revision as of 09:43, 26 July 2019
Business objects
All business objects are defined by a PHP class that inherits the class CommonObject (defined in file commonobject.class.php). Every business object has the 4 CRUD methods you can use to read or save into database:
- Create: create()
- Read: fetch()
- Update: update()
- Delete: delete()
See examples later...
Link between Business objects
Some business objects are linked to other business objects. This is done in Dolibarr using the Table llx_element_element. But you don't have to read this table to get objects linked to another.
Here is how you can use this (Dolibarr 3.1 and higher):
// get invoices from an already loaded order:
$result = $order->fetchObjectLinked($order->id, 'commande', null, 'facture');
if ($result <= 0) {
// handle error
}
// important notice : the newly populated arrays are associative. Keys are llx_element_element row ids.
// now if we expect only one linked invoice:
// WRONG way to get it ($invoice_id will be NULL):
$invoice_id = $order->linkedObjectsIds['facture'][0]
// CORRECT way ($invoice_id will hold the ID):
$invoice_id = array_values($order->linkedObjectsIds['facture'])[0]
// Better (if there are more than one linked invoices) :
foreach ($order->linkedObjectsIds['facture'] as $element_element_id => $facture_id) {
// process it
}
Prior to 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);
Examples
Example for a third party
Here is an example for the creation of a third party (eg customer company):
If we make a new script or an external script, we must add at the beginning, before making anything else:
include('/pathofdolibarrhtdocs/master.inc.php');
This will initialize Dolibarr environment objects ($conf, $db, $lang and $user). If we want that actions (create, update) are tagged with a particular user as the create/update user, we must do after the include of master.inc.php and before calling any create or update method
$user->fetch(0,'loginuser');
Now we can make our business code.
// We declare the class we want to use
include_once('/pathofdolibarrhtdocs/societe/class/societe.class.php');
// We create an instance of object to manipulate
$mycompany = new Societe($db);
// We set properties on object
$mycompany->nom='Big Brother';
$mycompany->client=1;
// If we want that creation is tagged as done by a particular user 'loginuser',
// you must uncomment this line to load all characteristics of this user.
// If we keep the comment, Dolibarr will use null into fields that should store the create or update user.
// $user->fetch('loginuser');
// We call method to create
$id=$mycompany->create($user);
// This is to read/load an already created object
$mycompany->fetch($id);
// To update object
$mycompany->nom='Big Brother 2';
$mycompany->update($user);
Other examples
You may find other example for manipulating Dolibarr objects (Create, Read, Update, Delete) into directory dev/samples of Dolibarr snapshot.