Export SQL des contenus


Export des contenus

Le plugin Content IO permet aussi d'exporter ses contenus dans une base SQL. Actuellement, l'export ne fonctionne que sur une base MySQL ou Oracle.


Fonctionnement :

L'export SQL va parcourir la structure des types de contenu définis et créer les différentes tables associées. Ensuite il parcourra les contenus et remplira ces tables.
Voici les différentes spécificités de l'export :

  • Une table est créée pour chaque type de contenu
  • Pour chaque donnée du contenu, il va créer un colonne avec son nom sauf pour :
    • Donnée de type géocode : il crée 2 colonnes (nom_longitude et nom_latitude)
    • Donnée de type user : il crée 2 colonnes (nom_login et nom_population)
    • Donnée de type multilangual : il crée une colonne par langue (nom_fr, nom_en, nom_it, etc ...)
    • Donnée de type file et binary : il crée 4 colonnes (nom_data, nom_mimetype, nom_size, nom_lastmodified)
    • Donnée de type composite : il crée les colonnes des données du composite en les préfixant par le nom du composite
    • Donnée multiple : il va créer une autre table avec un identifiant référençant la table du contenu avec comme colonne (PID_parentName, name, position)
      Voir paramètre exportNoMultiValuedTable ci-dessous
    • Donnée de type repeater : il va créer une autre table avec un identifiant référençant la table du contenu avec comme colonne (id_repeater, PID_parentName, name1, name2, ...., position) avec name1, name2 les noms des données du repeater.

L'export ne gère pas les données : géocode multiple et multilingual multiple


Configuration :

Il faut définir sa base SQL dans la configuration du CMS.
De plus on peut définir un email d'administrateur. C'est lui qui recevra les informations de l'export SQL.


Lancer l'export :

Il y a deux façons de lancer l'export :

  • Par le planificateurs de tâches dans l'administration du CMS 



  • Avec le bouton "Export SQL des contenus" dans le back office du CMS

            

           Il faut ensuite confirmer le lancement de l'export :

            

Fichier de configuration : 

L'export SQL des contenus est lié à un fichier de configuration content-export.xml :

<export exportNoMultiValuedTable="false" separator="," exportOnlyValidatedContent="false" prefix="AE">        
  <contents>        
     <content id='content-type.ExportContentType' name='export' />        
     <content id='content-type.ExportContentType2' name='export2' />        
     <content id='content-type.ExportTableRef' name='tableref' />        
  </contents>        
  <sql>        
     <oracle>        
     </oracle>        
     <mysql>        
        <long>INT</long>        
        <string>TEXT</string>        
     </mysql>        
  </sql>        
  <mapping-policy value="FULL" />        
  <reserved-words override="false">        
     <mysql>        
         <word name="ACCESSIBLE" alias="ACCESSIBLE_2"/>        
         ...        
         <word name="ZEROFILL" alias="ZEROFILL_2"/>        
     </mysql>        
     <oracle>        
         <word name="ACCESS" alias="ACCESS_2" />        
         ...        
         <word name="ZONE" alias="ZONE_2" />        
     </oracle>        
  </reserved-words>        
</export>        

 

Balise ou Attribut 

 Description

exportNoMultiValuedTable

Lors de l'export SQL, pour chaque donnée multiple, on créé une table associée à cette donnée. Si ce paramètre est à true, on ne créé pas de table pour ces valeurs multiples. A la place, toutes les valeurs seront concaténées dans une seule colonne.

 

Valeur par défaut : false

separator

Ce paramètre est lié à exportNoMultiValuedTable. Lors que exportNoMultiValuedTable est à true, on concatène les différentes valeurs d'un champ multiple. Ces valeurs sont séparées par un caractère défini par l'attribut separator.

 

Valeur par défaut : ", "

exportOnlyValidatedContent

Lorsque ce paramètre est à true, on exporte seulement la version publiée (LIVE) des contenus.

 

Valeur par défaut : false

 

Il faut chaque projet puisse positionner le tag LIVE lors de la validation d'un contenu.
En général c'est le fonction du plugin WEB org.ametys.web.workflow.ValidateContentFunction qui s'en charge.

 prefix

Toutes les tables exportées commenceront par ce préfixe.

 

Valeur par défaut : AmetysExport

 

Il est conseillé d'en mettre un car avant chaque export, on supprime toutes les tables commençant par ce préfixe. Si le préfixe est vide, l'export supprimera toutes les tables de la base SQL.

 content

Dans chaque balise content, on définit l'identifiant (id) du type de contenu qu'on veut exporter et dans name on définit le nom de la table associée à ce type de contenu. Si on ne définit rien pour name, ça sera le nom par défaut du type de contenu qui sera choisi.

 

Valeur par défaut : si aucune balise content n'est définie, tous les types de contenu seront exportés.

sql

Ces balises permettent de définir un type SQL pour un type de donnée d'un contenu.
Par exemple, ci-dessus, on dit que toutes les données de types Long dans Ametys seront de type INT pour MySQL
Voici les différents types qu'on peut configurer avec leurs valeurs par défaut :
  • string : TEXT pour MySQL et VARCHAR(4000) pour Oracle
  • long : INT pour MySQL et NUMBER pour Oracle
  • boolean : TINYINT pour MySQL et CHAR(1) pour Oracle
  • double : DOUBLE pour MySQL et NUMBER pour Oracle
  • content : VARCHAR(512) pour MySQL et VARCHAR(4000) pour Oracle
  • richtext : MEDIUMTEXT pour MySQL et VARCHAR(4000) pour Oracle
  • date : DATE pour MySQL et DATE pour Oracle
  • datetime : DATETIME pour MySQL et DATE pour Oracle
  • file : BLOB pour MySQL et BLOB pour Oracle
  • binary : BLOB pour MySQL et BLOB pour Oracle

mapping-policy

Selon les configurations des différentes bases SQL, on peut avoir des problèmes de taille sur les noms des tables et des colonnes.
C'est pour ça qu'on fournit 3 différentes règles de formatage des noms :
  • FULL (valeur par défaut) : on ne fait aucun traitement
  • CAMELCASE : on concatène les différents mots du nom en supprimant les espaces et autres caractères et en mettant une majuscule à chaque mot
  • FIRSTCHAR : on concatène les différents mots du nom en ne prenant que les 3 premières lettres du nom
reserved-words

C'est la liste des mots réservés pour MySQL ou ORACLE qui risquent donc de créer des problèmes lors de la création des tables.
Par exemple, si j'ai une donnée de contenu "binary", je vais créer une colonne qui a pour nom "binary" et sur une base ORACLE ca va planter. Du coup on rajoute ce mot dans les mots réservés en choisissant comme alias "binary_2". Ainsi la colonne SQL s’appellera "binary_2".

 

Par défaut, il y a tous les mots réservés de MySQL et d'ORACLE. 

override

Cet attribut est lié à reserved-words et il permet d'indiquer si les mots qu'on rajoute surchargent les mots définis par défaut ou se rajoutent à ceux-ci.

Si override est à true, cela surchargera donc tous les mots réservés de MySQL et ORACLE.

 

Par défaut il est à false.

 

Il est conseillé de laisser override à false sinon il a des risques que l'export ne fonctionne plus.

 

Retour en haut

Content IO