Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
docs:dev:api:python:quickstart [2023/05/24 08:38] florian |
docs:dev:api:python:quickstart [2024/05/14 15:33] (Version actuelle) florian |
||
---|---|---|---|
Ligne 8: | Ligne 8: | ||
Le module db_common propose des fonction utilitaires pour effectuer des requêtes sur la base de données. | Le module db_common propose des fonction utilitaires pour effectuer des requêtes sur la base de données. | ||
+ | === Lire plusieurs lignes === | ||
+ | |||
+ | Nous allons utiliser la fonction ''dbgenericgetrows()'' dont la signature est la suivante: | ||
+ | |||
+ | <code python> | ||
+ | def dbgenericgetrows(usession, itbl, icond=None, ifldorder=None, ifldordersens="A", limit=None, limistart = 0) | ||
+ | """ | ||
+ | Return rows from a table. Select all the fields. | ||
+ | |||
+ | :type usession: session | ||
+ | :param usession: NCHP Session | ||
+ | :type itbl: string | ||
+ | :param itbl: table to fetch | ||
+ | :type icond : list | ||
+ | :param icond: list of conditions | ||
+ | |||
+ | :rtype: list | ||
+ | :return: A list of row, each row described by a dictionnary. | ||
+ | """ | ||
+ | </code> | ||
+ | |||
+ | Exemple d'utilisation pour sélectionner toutes les lignes de la table ''test'' | ||
+ | |||
+ | <code python> | ||
+ | rows = db_common.dbgenericgetrows( | ||
+ | usession = gses, | ||
+ | itbl = "factfour", | ||
+ | ) | ||
+ | |||
+ | pprint.pprint(rows) | ||
+ | >>> | ||
+ | [{ | ||
+ | 'FACTFOUR_CPPID': 0L, | ||
+ | 'FACTFOUR_DATE': datetime.datetime(2022, 6, 10, 11, 59, 55), | ||
+ | 'FACTFOUR_DATEDEPOTSAE': None, | ||
+ | 'FACTFOUR_DATEFACT': datetime.datetime(2016, 9, 29, 0, 0), | ||
+ | 'FACTFOUR_DEPOTSAE': 0, | ||
+ | 'FACTFOUR_FOURNISSEURID': 36L, | ||
+ | 'FACTFOUR_HT': 1350.0, | ||
+ | 'FACTFOUR_ID': 13L, | ||
+ | 'FACTFOUR_NUMFACTURE': 'QUAL_00000000003821', | ||
+ | 'FACTFOUR_TTC': 1620.0, | ||
+ | 'FACTFOUR_TVA': 270.0 | ||
+ | }, { | ||
+ | 'FACTFOUR_CPPID': 0L, | ||
+ | 'FACTFOUR_DATE': datetime.datetime(2022, 6, 10, 14, 36, 39), | ||
+ | 'FACTFOUR_DATEDEPOTSAE': datetime.datetime(2022, 6, 10, 14, 45, 14), | ||
+ | 'FACTFOUR_DATEFACT': datetime.datetime(2016, 9, 29, 0, 0), | ||
+ | 'FACTFOUR_DEPOTSAE': 1, | ||
+ | 'FACTFOUR_FOURNISSEURID': 36L, | ||
+ | 'FACTFOUR_HT': 1350.0, | ||
+ | 'FACTFOUR_ID': 14L, | ||
+ | 'FACTFOUR_NUMFACTURE': 'QUAL_00000000003821', | ||
+ | 'FACTFOUR_TTC': 1620.0, | ||
+ | 'FACTFOUR_TVA': 270.0 | ||
+ | }, { | ||
+ | 'FACTFOUR_CPPID': 380066452L, | ||
+ | 'FACTFOUR_DATE': None, | ||
+ | 'FACTFOUR_DATEDEPOTSAE': None, | ||
+ | 'FACTFOUR_DATEFACT': None, | ||
+ | 'FACTFOUR_DEPOTSAE': 0, | ||
+ | 'FACTFOUR_FOURNISSEURID': 0L, | ||
+ | 'FACTFOUR_HT': 0.0, | ||
+ | 'FACTFOUR_ID': 15L, | ||
+ | 'FACTFOUR_NUMFACTURE': '0', | ||
+ | 'FACTFOUR_TTC': 0.0, | ||
+ | 'FACTFOUR_TVA': 0.0 | ||
+ | } | ||
+ | ] | ||
+ | |||
+ | </code> | ||
+ | |||
+ | Un exemple maintenant en ajoutant des conditions | ||
+ | |||
+ | <code python> | ||
+ | rows = db_common.dbgenericgetrows( | ||
+ | usession = gses, | ||
+ | itbl = "factfour", | ||
+ | icond = db_common.buildcondandor( | ||
+ | tbl = "factfour", | ||
+ | fields = ["FACTFOUR_CPPID", "FACTFOUR_DEPOTSAE"], | ||
+ | values = ["0", "1"] | ||
+ | ) | ||
+ | ) | ||
+ | |||
+ | pprint.pprint(rows) | ||
+ | >>> | ||
+ | [{ | ||
+ | 'FACTFOUR_CPPID': 0L, | ||
+ | 'FACTFOUR_DATE': datetime.datetime(2022, 6, 10, 11, 59, 55), | ||
+ | 'FACTFOUR_DATEDEPOTSAE': None, | ||
+ | 'FACTFOUR_DATEFACT': datetime.datetime(2016, 9, 29, 0, 0), | ||
+ | 'FACTFOUR_DEPOTSAE': 0, | ||
+ | 'FACTFOUR_FOURNISSEURID': 36L, | ||
+ | 'FACTFOUR_HT': 1350.0, | ||
+ | 'FACTFOUR_ID': 13L, | ||
+ | 'FACTFOUR_NUMFACTURE': 'QUAL_00000000003821', | ||
+ | 'FACTFOUR_TTC': 1620.0, | ||
+ | 'FACTFOUR_TVA': 270.0 | ||
+ | } | ||
+ | ] | ||
+ | </code> | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | La fonction ''db_common.buildcondandor(...)'' qui est utilisée pour construire les conditions | ||
+ | ne gère que des conditions utilisant le même opérateur qui par défaut est l'opérateur ''=''. | ||
+ | </WRAP> | ||
+ | |||
+ | === Insérer une ligne === | ||
+ | |||
+ | On utilise la fonction ''dbgenericinsert()'' dont la signature est la suivante: | ||
+ | |||
+ | <code python> | ||
+ | def dbgenericinsert(usession, itbl, iflds, ivalues, dbtype = None): | ||
+ | """ | ||
+ | Generic function to insert a record in a system table and get its primary key. | ||
+ | |||
+ | > ret = db_common.dbgenericinsert(session, "test", ["fld1", "fld2", "fldx"], [1, 2, 'foo']) | ||
+ | Execute query : insert into test (fld1,fld2,fldx) values (1,2,'foo'); ret contains new generated ID | ||
+ | |||
+ | :type usession: session | ||
+ | :param usession: NCHP Session | ||
+ | :type itbl: string | ||
+ | :param itbl: table to fetch | ||
+ | :type iflds: list | ||
+ | :param iflds: fields to put values in | ||
+ | :type ivalues: list | ||
+ | :param ivalues: Values to put in fields | ||
+ | :type dbtype: string | ||
+ | :param dbtype: database type | ||
+ | |||
+ | :rtype: long | ||
+ | :return: new ID of record, or 0 if insert failed. | ||
+ | """ | ||
+ | </code> | ||
+ | |||
+ | Voici un exemple: | ||
+ | |||
+ | <code python> | ||
+ | new_rsid = db_common.dbgenericinsert( | ||
+ | usession = gses, | ||
+ | itbl = "client", | ||
+ | iflds = ["CLIENT_NUMERO", "CLIENT_NOM"], | ||
+ | ivalues = ["123456", "Client 123456"] | ||
+ | ) | ||
+ | |||
+ | if new_rsid <= 0: | ||
+ | print("Error code :{}, error msg: {}".format(gses.db.db_errorcode, gses.db.db_errormsg)) | ||
+ | |||
+ | </code> | ||
+ | |||
+ | Il est important de tester le retour afin de s'assurer que l'insertion a bien été faite et sinon | ||
+ | on peut récupérer le code d'erreur et le message retourné par la base de données via ''gses.db.db_errorcode'' et ''gses.db.db_errormsg'' | ||
==== Classe sql_db ==== | ==== Classe sql_db ==== | ||
Ligne 31: | Ligne 184: | ||
result = gses.db.query("SELECT * FROM societycache;") | result = gses.db.query("SELECT * FROM societycache;") | ||
- | with result: | + | if result is not None: |
- | for row in result: | + | with result: |
- | print(row) | + | for row in result: |
+ | print(row) | ||
</code> | </code> | ||
<WRAP center round important 60%> | <WRAP center round important 60%> | ||
- | L'utilisation de with et l'itération sur l'objet result ne sont possibles qu'à partir de la version 3.4.XXXXXX\\ | + | L'utilisation de with et l'itération sur l'objet result ne sont possibles qu'à partir de la version **3.4.23127**\\ |
Pour les versions antérieures voir [[docs:dev:api:python:db]] qui présente d'autres manières de procéder. | Pour les versions antérieures voir [[docs:dev:api:python:db]] qui présente d'autres manières de procéder. | ||
Ligne 76: | Ligne 230: | ||
''_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()'' | ''_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()'' | ||
- | ===== Journaliser les activiés ===== | + | ===== Journaliser les activités ===== |
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. | 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. | ||
Ligne 101: | Ligne 255: | ||
===== Travaux ===== | ===== Travaux ===== | ||
- | ===== Créer un travail EzGED ===== | + | ==== Créer un travail EzGED ==== |
- | ==== Script d'étape ==== | + | === Script d'étape === |
La logique d'exécution des étapes d'un travail dans EzGED sont implémentées via des scripts pythons. | La logique d'exécution des étapes d'un travail dans EzGED sont implémentées via des scripts pythons. | ||
Ligne 124: | Ligne 278: | ||
libjobdext.jobstateupdate_percent(gses, jobqueueid=1234, jobstepnumber=0, jobstatepercent=0.3) | libjobdext.jobstateupdate_percent(gses, jobqueueid=1234, jobstepnumber=0, jobstatepercent=0.3) | ||
</code> | </code> | ||
+ | |||
+ | === Lecture/Ecriture des fichiers de travail === | ||
+ | |||
+ | Les fichiers de travail sont les fichiers qu'utilisent les scripts pour écrire ou lire des informations | ||
+ | nécessaires à la réalisation du script et donc de son travail. | ||
+ | |||
+ | Parmi les principaux on retrouve ''indexes'', ''fssto'' et ''docpak'' | ||
+ | |||
+ | Ces fichiers sont des fichiers textes contenant des données structurées en colonnes de longueur fixe. | ||
+ | |||
+ | Pour faciliter leur manipulation on utilise le module ''scriptfiles'' | ||
Ligne 178: | Ligne 343: | ||
docpakid = docpaknew(gses, itbl="matable", irsid=1234 , ifiles=[new_fsfileid]) | docpakid = docpaknew(gses, itbl="matable", irsid=1234 , ifiles=[new_fsfileid]) | ||
</code> | </code> | ||
+ | |||
+ | ==== Obtenir les fichiers d'une fiche ==== | ||
+ | |||
+ | Nous avons besoin d'importer le module suivant | ||
+ | <code python> | ||
+ | import docpak | ||
+ | </code> | ||
+ | |||
+ | Nous avons ensuite besoin de deux informations: | ||
+ | * Le nom de la table documentaire. | ||
+ | * L'identifiant d'enregistrement de la fiche. | ||
+ | |||
+ | <code python> | ||
+ | fichiers = docpak.getfilesforrsid(gses, "contratsm", 81) | ||
+ | |||
+ | print(fichiers) | ||
+ | [ | ||
+ | ('D:\\nchp\\var\\nchp\\instance\\EMDOM\\DEFTSA\\00000013\\ed\\4d\\4RGETML2.pdf','contrat_4201.pdf') | ||
+ | ] | ||
+ | </code> | ||
+ | |||
+ | Le même appel avec l'option moreinfo=True | ||
+ | <code python> | ||
+ | fichiers = docpak.getfilesforrsid(gses, "contratsm", 81) | ||
+ | |||
+ | print(fichiers) | ||
+ | |||
+ | [('D:\\nchp\\var\\nchp\\instance\\EMDOM\\DEFTSA\\00000013\\ed\\4d\\4RGETML2.pdf', | ||
+ | 'contrat_4201.pdf', | ||
+ | 22864L, #Identifiant du fichier | ||
+ | 'ed4d2b8b04b3b1861a450b35210114c75ebae4dc', #Empreinte md160 du fichier | ||
+ | 'application/pdf', #Type mime | ||
+ | 1L #Rang du fichier | ||
+ | ) | ||
+ | ] | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ===== Scripts COLD ===== | ||
+ | |||
+ | ==== Lire un fichier d'état (scriptfile) ==== | ||
+ | |||
+ |