Ceci est une ancienne révision du document !
Le module db_common propose des fonction utilitaires pour effectuer des requêtes sur la base de données.
Une autre façon de faire des requêtes est d'utiliser directement la classe sql_db
qui est implémentée spécifiquement par chaque module dédié à un SGBD donné.
Par exemple pour MySQL l'API EzGED propose le module db_mysql
En général vous n'avez pas besoin d'instancier directement la classe sql_db
car une instance est attachée à la session EzGED que vous aurez ouverte.
>>> import common >>> gses = common.dbses() >>> gses.db <db_mysql.sql_db instance at 0x0684F8F0>
Pour exécuter une requête on peut alors procéder ainsi
import common gses = common.dbses() result = gses.db.query("SELECT * FROM societycache;") with result: for row in result: print(row)
L'utilisation de with et l'itération sur l'objet result ne sont possibles qu'à partir de la version 3.4.XXXXXX
Pour les versions antérieures voir db qui présente d'autres manières de procéder.
Ce qui nous affichera quelque chose comme ça:
{'SOCIETYCACHE_SIREN': '552ZZ081317', 'SOCIETYCACHE_SOCIETYNAME': 'ELECTRICITE DE FRANCE', 'SOCIETYCACHE_ID': 5L} {'SOCIETYCACHE_SIREN': '515180115', 'SOCIETYCACHE_SOCIETYNAME': 'EZDEV', 'SOCIETYCACHE_ID': 24L} ...
EzGED utilise le module python standard logging
pour la journalisation de messages.
Les loggers suivants peuvent être utilisés:
Le logger a utiliser dépend donc du contexte dans lequel votre code est susceptible de s'exécuter.
Donc pour obtenir le logger ezged
il suffirait de faire
import logging ezged_logger = logging.getLogger("ezged")
Mais vous n'êtes pas obligé de le connaitre et le plus simple reste d'utiliser notre fonction _common.get_logger()
afin de récupérer le logger correspondant au contexte d'exécution.
import _common app_logger = _common.get_logger()
_common
est un module python EzGED qui contient de nombreuses fonctions utiles et globalement utilisées dans toute l'application. Dont notamment la fonction get_logger()
Dans EzGED un certain nombre d'entités tels que les fiches descriptives ou les fiches sont l'objet d'activités ou d'évènements.
Pour ajouter une activité à une fiche descriptive on peut par exemple utiliser la fonction dblog.dblogaddindexifnotexist
. Exemple:
import dblog dblog.dblogaddindexifnotexist( usession = gses, tbl = "facture", rsid = 12, secusrid = 1, action = "C", text = log_msg, tstamp = _common.tsatamp() )
L'appel ci-dessus va créer une nouvelle “activité” pour la facture d'identifiant 12.
Il s'agit d'une activité de type “Création” indiqué par le paramètre action = “C”
.
La logique d'exécution des étapes d'un travail dans EzGED sont implémentées via des scripts pythons.
Le plus simple est de partir d'un template de script.
On peut mettre à jour l'avancement de l'exécution de l'étape en utilisant la fonction libjobdext.jobstateupdate_percent
:
libjobdext.jobstateupdate_percent(gses, jobqueueid, jobstepnumber, jobstatepercent)
jobstepnumber
est le numéro de l'étape. On peut passer 0
et laisser la fonction le déterminer.
value
est la valeur d'avancement du job où une valeur de 1
représente une progression de 100%.
Exemple pour positionner une progression de 30% sur le travail 1234
libjobdext.jobstateupdate_percent(gses, jobqueueid=1234, jobstepnumber=0, jobstatepercent=0.3)
import libjobdext jobid, activated = libjobdext.jobcreatefromtpl( usession = usession, id = "MYJOBCODE", secusrid = usession.userid, params = ["param1","param2"], paramvalues = ["value1","value2"], active = 0 )
MYJOBCODE
est le code du travail à instancier. Le code peut être retrouvé en allant consulter la liste des Travaux de référence.
La fonction retourne l'identifiant du travail et indique si le travail a été activé ou non.
Dans l'exemple précédent nous avons instancier un travail en passant le paramètre active
à 0 donc
le travail a été créé (on peut le voir dans la liste des travaux depuis l'interface web par exemple) mais
il n'est pas actif.
Ceci permet par exemple de copier des fichiers dans le répertoire du travail (qui aura été créé au moment de son instanciation). Une fois que la mise en place est terminée on peut finalement l'activer.
libjobdext.job_activate(usession, jobid)
Nous avons besoins d'importer les modules suivants
import fs import docpak
La première consiste à stocker le fichier
new_fsfileid = fs.fsfilesto(gses, filepath, ifssaid = 0)
Si le fichier a bien été stocké alors new_fsfileid
est un entier strictement positif.
Nous pouvons ensuite attacher le fichier stocké à l'enregistrement (la fiche).
docpakid = docpaknew(gses, itbl="matable", irsid=1234 , ifiles=[new_fsfileid])