goa/doc/devmanual_fr/chap_manipulation_donnees.txt
changeset 0 b97547f5f1fa
equal deleted inserted replaced
-1:000000000000 0:b97547f5f1fa
       
     1 Manipulation des données stockées
       
     2 =================================
       
     3 
       
     4 Les classes `Entity` et `AnyEntity`
       
     5 -----------------------------------
       
     6 Pour fournir un comportement spécifique à un type d'entité, il suffit de définir
       
     7 une classe héritant de la class `cubicweb.entities.AnyEntity`. En général il faut
       
     8 définir ces classes dans un module du package `entities` d'une application pour 
       
     9 qu'elle soit disponible à la fois coté serveur et coté client.
       
    10 
       
    11 La classe `AnyEntity` est une classe chargée dynamiquement héritant de la classe
       
    12 de base `Entity` (`cubicweb.common.entity`). On définit une sous-classe pour
       
    13 ajouter des méthodes ou spécialiser les comportements d'un type d'entité donné.
       
    14 
       
    15 Des descripteurs sont ajoutés à l'enregistrement pour initialiser la classe en
       
    16 fonction du schéma :
       
    17 
       
    18 * on peut accéder aux attributs définis dans le schéma via les attributs de même
       
    19   nom sur les instances (valeur typée)
       
    20 
       
    21 * on peut accéder aux relations définies dans le schéma via les attributs de même
       
    22   nom sur les instances (liste d'instances d'entité)
       
    23 
       
    24 Les méthodes définies sur la classe `AnyEntity` ou `Entity` sont les suivantes :
       
    25 
       
    26 * `has_eid()`, retourne vrai si l'entité à un eid affecté (i.e. pas en cours de
       
    27   création) 
       
    28         
       
    29 * `check_perm(action)`, vérifie que l'utilisateur à le droit d'effectuer
       
    30   l'action demandée sur l'entité
       
    31 
       
    32 :Formattage et génération de la sortie:
       
    33 
       
    34   * `view(vid, **kwargs)`, applique la vue donnée à l'entité
       
    35 
       
    36   * `absolute_url(**kwargs)`, retourne une URL absolue permettant d'accéder à la
       
    37     vue primaire d'une entité
       
    38 
       
    39   * `format(attr)`, retourne le format (type MIME) du champ passé en argument
       
    40 
       
    41   * `printable_value(attr, value=_marker, attrtype=None, format='text/html')`, 
       
    42     retourne une chaine permettant l'affichage dans un format donné de la valeur
       
    43     d'un attribut (la valeur est automatiquement récupérée au besoin)
       
    44 
       
    45   * `display_name(form='')`, retourne une chaîne pour afficher le type de
       
    46     l'entité, en spécifiant éventuellement la forme désirée ('plural' pour la
       
    47     forme plurielle) 
       
    48 
       
    49 :Gestion de données:
       
    50 
       
    51   * `complete(skip_bytes=True)`, effectue une requête permettant de récupérer d'un
       
    52     coup toutes les valeurs d'attributs manquant sur l'entité
       
    53 
       
    54   * `get_value(name)`, récupere la valeur associée à l'attribut passé en argument
       
    55 
       
    56   * `related(rtype, x='subject', limit=None, entities=False)`, retourne une liste
       
    57     des entités liées à l'entité courant par la relation donnée en argument
       
    58 
       
    59   * `unrelated(rtype, targettype, x='subject', limit=None)`, retourne un result set
       
    60     des entités not liées à l'entité courante par la relation donnée en argument
       
    61     et satisfaisants les contraintes de celle-ci
       
    62 
       
    63   * `copy_relations(ceid)`, copie les relations de l'entité ayant l'eid passé en
       
    64     argument sur l'entité courante
       
    65 
       
    66   * `last_modified(view)`, retourne la date à laquelle on doit considérer
       
    67     l'objet comme modifié (utiliser par la gestion de cache HTTP)
       
    68 
       
    69 :Meta-données standard (Dublin Core):
       
    70 
       
    71   * `dc_title()`, retourne une chaine unicode correspondant à la méta-donnée
       
    72     'Title' (utilise par défaut le premier attribut non 'meta' du schéma de
       
    73     l'entité) 
       
    74 
       
    75   * `dc_long_title()`, comme dc_title mais peut retourner un titre plus détaillé
       
    76 
       
    77   * `dc_description(format='text/plain')`, retourne une chaine unicode
       
    78      correspondant à la méta-donnée 'Description' (cherche un attribut
       
    79      'description' par défaut)
       
    80 
       
    81   * `dc_authors()`, retourne une chaine unicode correspondant à la méta-donnée
       
    82     'Authors' (propriétaires par défaut)
       
    83 
       
    84   * `dc_date(date_format=None)`, retourne une chaine unicode
       
    85      correspondant à la méta-donnée 'Date' (date de modification par défaut)
       
    86             
       
    87 :Contrôle du vocabulaire pour les relations:
       
    88   * `vocabulary(rtype, x='subject', limit=None)`
       
    89   * `subject_relation_vocabulary(rtype, limit=None)`
       
    90   * `object_relation_vocabulary(rtype, limit=None)`
       
    91   * `relation_vocabulary(rtype, targettype, x, limit=None)`
       
    92 
       
    93 
       
    94 Les *rtags*
       
    95 -----------
       
    96 Les *rtags* permettent de spécifier certains comportements propres aux relations
       
    97 d'un type d'entité donné (voir plus loin). Ils sont définis sur la classe 
       
    98 d'entité via l'attribut `rtags` qui est un dictionnaire dont les clés sont un 
       
    99 triplet ::
       
   100 
       
   101   <type de relation>, <type d'entité cible>, <position du contexte ("subject" ou "object"
       
   102 
       
   103 et les valeurs un `set` ou un tuple de marqueurs définissant des propriétés 
       
   104 s'appliquant à cette relation. 
       
   105 
       
   106 Il est possible de simplifier ce dictionnaire :
       
   107 
       
   108 * si l'on veut spécifier un seul marqueur, il n'est pas nécessaire d'utiliser
       
   109   un tuple comme valeur, le marqueur seul (chaine de caractères) suffit
       
   110 * si l'on s'intéresse uniquement à un type de relation et non à la cible et à la
       
   111   position du contexte (ou que celui-ci n'est pas ambigüe), on peut simplement
       
   112   utiliser le nom du type de relation comme clé
       
   113 * si l'on veut qu'un marqueur s'applique quelque soit le type d'entité cible, il
       
   114   faut utiliser la chaine `*` comme type d'entité cible
       
   115 
       
   116 A noter également que ce dictionnaire est *traité à la création de la classe*. 
       
   117 Il est automatiquement fusionné avec celui de la ou des classe(s) parentes (pas
       
   118 besoin de copier celui de la classe parent pour le modifier). De même modifier
       
   119 celui-ci après création de la classe n'aura aucun effet...
       
   120 
       
   121 
       
   122 .. include:: sect_definition_entites.txt