if ($object->_id) {
    $object->loadComplete();
}
// searching for a CExClassEvent
$ex_class_event = new CExClassEvent();
$ex_class_event->host_class = $object->_class;
if ($event_name) {
    $ex_class_event->event_name = $event_name;
}
$ex_class_event->ex_class_id = $ex_class_id;
$ex_class_event->loadMatchingObject();
/** @var CExObject $ex_object */
if (!$ex_object_id) {
    $ex_class = new CExClass();
    $ex_class->load($ex_class_id);
    $ex_objects = $ex_class_event->getExObjectForHostObject($object);
    $ex_object = reset($ex_objects);
    if (!$ex_object) {
        $ex_object = $ex_class->getExObjectInstance();
    }
} else {
    $ex_object = new CExObject($ex_class_id);
}
if ($preview) {
    $ex_object->_preview = true;
}
$creation_date = $ex_object->getCreateDate();
if ($object->_id && $object instanceof CSejour) {
    $object->loadRefCurrAffectation($creation_date);
}
$printer_id = null;