Outils pour utilisateurs

Outils du site


docs:dev:api:python:quickstart

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
docs:dev:api:python:quickstart [2023/06/09 12:21] – [Attacher un fichier à une fiche] floriandocs: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 179: Ligne 344:
 </code> </code>
  
-==== Créer une nouvelle version d'un fichier ====+==== 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) ==== 
  
docs/dev/api/python/quickstart.1686313302.txt.gz · Dernière modification : de florian