Difference between revisions of "Business Objects"

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search
(→‎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 fields that should store the create or update user.
+
// 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');
  
// On call method to create
+
// 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 cvs snapshot.
+
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.