LDSQL peut être appelé pour exécuter une ou plusieurs commandes SQL sur une ou plusieurs connexions de façon entièrement automatisée, sans interface graphique.
Et comme il n'y a aucune interaction avec l'utilisateur, ce mode automatique est utilisable via une tâche planifiée notamment.
Un fichier de trace est dans ce cas utilisé pour tracer tout ce qui est fait par LDSQL.
Pour déclencher ce mode automatique, il faut lancer l'exécution de LDSQL en lui passant en ligne de commande le nom d'un fichier à exécuter.
LDSQL.EXE /AUTO=<Nom complet du fichier>
Le fichier en question doit contenir une suite de lignes Connexion, CMD, SQL et Script respectant la syntaxe décrite en détail ci-après.
La ou les lignes Connexion permettent de définir sur quelle connexion les commandes et scripts qui suivent vont s'exécuter.
Les lignes CMD permettent d'exécuter des commandes Windows. L'usage principal est de « monter » des disques réseaux (commande NET USE).
Les lignes SQL permettent d'exécuter toute commande SQL.
Les lignes Script permettent d'exécuter des scripts écrits en langage Windev, ces scripts pouvant bien sûr utiliser les données de la commande SQL exécutée précédemment.
Remarque : les lignes SQL et Script doivent toujours suivre une ligne Connexion ; ces commandes sont exécutées sur la connexion indiquée précédemment. On peut donc enchaîner autant de commandes SQL et de script que souhaités, et on peut basculer à tout moment d'une connexion à l'autre, ou d'un dossier à l'autre, en intercalant une ligne Connexion.
Dans le cas des connexions où l'on a une liste de dossiers (Compta et Paye), on peut indiquer plusieurs dossiers sur la ligne Connexion.
La syntaxe est la même que dans LDETLFB (voir U:\Documentations\Décisionnel\Documentation LDETLFB\Documentation LDETLFB.pdf, paragraphe 6.2 pages 25-26).
L'ensemble des commandes SQL et Script qui suivent cette ligne Connexion (jusqu'à la fin du fichier ou la prochaine ligne Connexion) seront alors répétées pour chaque dossier répondant aux critères de filtrage des dossiers.
Tout ce qui suit un double // est considéré comme étant du commentaire et est ignoré
Aucune différence n'est faite entre majuscule et minuscule pour les mots-clés indiqués ci-après.
TRACE=ECRAN
ou
TRACE=<Nom du fichier trace>
Si le nom du fichier trace comporte la mention AAAAMMJJ, cette mention est remplacée par la date du jour.
En l'absence d'information sur le fichier trace, LDSQL utilise le fichier nommé TraceAuto AAAAMMJJ.log placé dans le répertoire de l'exécutable.
Notez que dans les scripts exécutés ensuite, il est possible de tracer certaines informations en faisant appel à la procédure zAutoTracer qui attend 2 paramètres :
CMD=<Commande Windows>
La commande doit être saisie en ANSI. Elle est automatiquement convertie en OEM pour l'exécution.
Les commandes CMD sont systématiquement tracées, que l'exécution soit achevée avec succès ou provoque une erreur.
Exemple avec 2 commandes :
CMD=NET USE Y: /D
CMD=NET USE Y: \\BURDEV-LD\Bureautique
Trace obtenue, si le disque Y: n'est pas déjà alloué au moment de l'exécution :
ERR NET USE Y: /D --> La connexion réseau est introuvable. Vous obtiendrez une aide supplémentaire en entrant NET HELPMSG 2250.
INFO NET USE Y: \\BURDEV-LD\Bureautique --> La commande s'est terminée correctement.
CONNEXION=<Nom d'une connexion LDSQL>
Si la connexion nécessite de choisir un dossier, la syntaxe est :
CONNEXION=<Nom d'une connexion LDSQL>(<ListeDossiers>)
La syntaxe pour <ListeDossiers> est : <Sous-liste1>;<Sous-Liste2>; ... <Sous-listeN>
Chaque sous-liste peut prendre l'une des formes suivantes :
SSS le code dossier SSS est à inclure (à traiter)
SSD-SSF tous les dossiers ayant un code compris entre SSD et SSF sont inclus
X:SSS le code dossier SSS est à exclure
X:SSD-SSF tous les dossiers ayant un code compris entre SSD et SSF sont exclus
""LLLLL"" Tous les dossiers dont le libellé contient la chaine LLLLL sont inclus (critère de filtre à placer en 2 paires de doubles quottes)
X:""LLLLL"" Tous les dossiers dont le libellé ou le code contient la chaine LLLLL sont exclus
*ALL Tous les dossiers sont inclus
Comme indiqué plus haut, lorsque l'expression de sélection utilisée pour <ListeDossiers> aboutit à ce que plusieurs dossiers soient sélectionnés, l'ensemble des commandes SQL et Script qui suivent la ligne Connexion en question, jusqu'à la fin du fichier ou la prochaine ligne Connexion, sont répétées pour chaque dossier.
Point important : les sous-listes sont traitées dans l'ordre de leur apparition. Dès qu'une règle s'applique (égalité sur le code société ou l'intervalle de codes ou présence de la chaine de filtrage dans le libellé ou le code), la règle est appliquée en ignorant les règles qui suivent. Les sociétés qui ne répondent à aucune des règles indiquées sont exclues. Si on veut prendre toutes les sociétés sauf une en particulier, il faut donc écrire :
X:SSS;*ALL
Dans le cas de LDPaye, le code dossier correspond au code société externe ; le code répertoire et le code société interne ne sont pas testés. De plus, LDSQL fait en sorte de ne traiter chaque répertoire qu'une seule fois. AInsi, si on demande une liste comprenant les 3 dossiers AAA;BBB;CCC et que AAA et CCC sont dans le même répertoire, il n'y aura que deux dossiers (2 répertoires) traités : ceux des sociétés AAA et BBB.
Dans le cas de LDCompta, le code dossier correspond au code société « origine ». Dans le cas d’un dossier « courant », il n’y a pas d’ambiguïté. Dans le cas d’un dossier d’archives, c’est le code société archivée dont on parle ici, pas du code dossier « réel » (celui que l’on voit dans la colonne Archive de la liste de tous les sociétés, depuis le menu Fichier/Sociétés de LDCompta, pas celui apparaissant dans la colonne Code société).
De plus, chaque sous-liste peut être complétée par un « qualifiant Exercice ». A défaut, seul l'exercice courant est traité. Le « qualifiant Exercice » peut être soit une valeur qui sera comparée directement à celle portée dans le fichier CPTSOC (année d’archive, sur 4 caractères), soit la valeur particulière *ALL.
Attention : le qualifiant n'est interprété qu'après le filtrage de la société. On ne peut donc pas inclure ou exclure une ou plusieurs sociétés sur un ou plusieurs exercices. La syntaxe ci-dessous est par exemple invalide :
X:LDZ:2009;LDZ:*ALL
La société LDZ va être exclue par la première règle, et ce pour tous les exercices. La 2ème règle ne sera donc jamais traitée.
On peut aussi indiquer le qualifiant exercice sous la forme *ALL>XXXX : l'exercice courant est pris, ainsi que tous les exercices dont le code (l'année d'archive) est supérieur ou égal au code XXXX indiqué dans la règle.
Exemples de syntaxe valide :
LDD;LDM;LDH on traite les 3 sociétés LDD, LDM et LDH, exercice courant uniquement
X:LDZ;LDA-LDZ;LD0-LD9 on traite toutes les sociétés dont le code commence par LD, sauf LDZ, exercice courant uniquement
LDD:*ALL on traite tous les exercices de la société LDD
LD0-LDZ:2016 on traite l'exercice 2016 uniquement de toutes les sociétés dont le code commence par LD
X:LDZ;*ALL:*ALL>2016 on traite toutes les sociétés sauf la société LDZ, et pour ces sociétés, on traite l'année courante et tous les dossiers d'archives 2016 et postérieurs.
Si la connexion nécessite une identification (cas d'une connexion à LDCompta, LDPaye ou LDNégoce alors qu'on ne dispose pas d'une « clé » LDSQL autorisant les mises à jour), la syntaxe est :
CONNEXION=<Nom d'une connexion LDSQL> UTILISATEUR=<Code>:<MotDePasse>
ou
CONNEXION=<Nom d'une connexion LDSQL>(<ListeDossiers>) UTILISATEUR=<Code>:<MotDePasse>
Si l'utilisateur n'a pas de mot de passe, on ne renseignera que <Code>.
Le mot de passe peut être indiqué « en clair » ou sous forme cryptée. Dans ce dernier cas, il devra être porté entre accolades { et }. Le cryptage à utiliser est le même que celui utilisé pour encoder le mot de passe de l'utilisateur de connexion à la base HFCS du progiciel concerné par la connexion : LDCompta, LDPaye ou LDNégoce.
Exemple : UTILISATEUR=COMPTA:COMPTA ou UTILISATEUR=COMPTA:{zrJYIZpr}
SQL=<Commande SQL sur une seule ligne>
ou
SQL=[
Commande SQL
sur plusieurs lignes
]
SCRIPT=<Nom complet d'un fichier script>
ou
SCRIPT=[
le source du script ici
réparti sur plusieurs lignes
]
Remarque importante : étant donné qu'il n'y a aucun affichage graphique en mode automatique, le résultat d'une commande SQL select n'est pas chargé dans une table comme c'est le cas lors d'une utilisation en interactif. Un script ne peut donc pas parcourir les données de la table nommée TableSQL qui n'est jamais chargée en mode automatique. Il faut travailler directement sur la requête _MaRequeteSQL qui a été déclarée en source de données globale à la collection de procédures.
On peut aussi faire référence, si nécessaire, à la connexion source courante sur laquelle la commande SQL s'est exécutée, via le nom _MaConnexionSQL qui est un objet de type ConnexionSource.
Notez que depuis le niveau 11 de LDSQL Version 2.00, on peut également référencer ces deux éléments _MaConnexionSQL et _MaRequeteSQL dans une procédure exécutée en interactif. La même syntaxe peut ainsi être utilisée dans une procédure pour accéder aux données issues de la requête SQL, quel que soit le mode d'exécution, interactif ou automatique.
Dans le cas où l'on a plusieurs script qui s'exécutent successivement, éventuellement suite à des commandes SQL différentes ou même sur des connexions différentes, il peut être utile de partager des valeurs entre ces scripts successifs. Pour ce faire, on dispose d'un tableau associatif de chaînes nommé VARG, déclaré en global dans la collection de procédures ProcExécutionAuto. La syntaxe à utiliser pour accéder à ce tableau est donc :
ProcExécutionAuto.VARG["<NomVariable>"] où <NomVariable> est une chaine quelconque représentant la variable à partager.
CMD=NET USE Y: /D
CMD=NET USE Y: \\BURDEV-LD\Bureautique
Connexion=COMPTAV10(TOP;LDZ) UTILISATEUR=USER
SQL=select * from CPTPLA where DTFV='' or DTFV < SYSDATE
SCRIPT=[
zAutoTracer("INFO", HNbEnr(_MaRequeteSQL)+" comptes généraux ouverts dans le plan comptable du dossier "+procExécutionAuto._MaConnexionSQL:Dossier+".")
]
SQL=select * from CPTHIS WHERE CLOT='E'
SCRIPT=[
zAutoTracer("INFO", HNbEnr(_MaRequeteSQL)+" écritures de centralisation dans le dossier "+procExécutionAuto._MaConnexionSQL:Dossier+".")
]
Exemple de trace obtenue à l'exécution de ce ficher :
20170828 16473495 INFO Lancement de l'exécution automatique du fichier TestAuto.sqla.
20170828 16473506 INFO NET USE Y: /D --> Y: a été supprimé.
20170828 16473514 INFO NET USE Y: \\BURDEV-LD\Bureautique --> La commande s'est terminée correctement.
20170828 16473529 ERR Accès non autorisé sur la connexion COMPTAV10, Dossier LDZ : L'utilisateur USER ne dispose pas d'un niveau d'accès Administrateur sur la société LDZ et le domaine de sécurité SQL.
20170828 16473535 INFO 584 comptes généraux ouverts dans le plan comptable du dossier TOP.
20170828 16473881 INFO 122353 écritures de centralisation dans le dossier TOP.
20170828 16473881 INFO Fin de l'exécution automatique du fichier TestAuto.sqla.
Connexion=COMPTAV10(TOP) UTILISATEUR=JM
SQL=select * from CPTPLA where DTFV='' or DTFV < SYSDATE
SCRIPT=TracerRequeteSQL.txt
Contenu du fichier TracerRequeteSQL.txt :
TraceDébut(trFichier, "TraceRequeteSQL.txt") // On demande à ce que la trace Windev soit enregistrée dans le fichier TraceRequeteSQL.txt
ListeRubriques est une chaine = HlisteRubrique(_MaRequeteSQL)
i est un entier
Pour tout "_MaRequeteSQL"
// Pour tous les comptes de la classe 607, on trace les 2 premières rubriques de la requête
SI _MaRequeteSQL.CPTG [= "607" Alors
Trace("Compte "+{"_MaRequeteSQL."+Extraitchaine(ListeRubriques,1,RC)}+" "+{"_MaRequeteSQL."+ExtraitChaine(ListeRubriques,2,RC)})
i++
FIN
FIN
zAutoTracer("INFO", i +" comptes généraux ont été listés dans le fichier TraceRequeteSQL.txt. pour le dossier "+procExécutionAuto._MaConnexionSQL:Dossier+".")
Trace obtenue à l'exécution de ce fichier :
20170828 17183005 INFO Lancement de l'exécution automatique du fichier TestAuto.sqla.
20170828 17183026 INFO 5 comptes généraux ont été listés dans le fichier TraceRequeteSQL.txt. pour le dossier TOP.
20170828 17183026 INFO Fin de l'exécution automatique du fichier TestAuto.sqla.
Trace obtenue dans le fichier TraceRequeteSQL.txt :
Compte 607000 ACHATS DE MARCHANDISESCEVR
Compte 607510 ACHAT SEMENCE COMMERCIALE
Compte 607200 ACHATS A DES TNA
Compte 607520 ACHAT SEMENCES MERESALLICOP
Compte 607530 ACHATS CONSOMMATION