Objet

Cette chaîne permet d'envoyer nos fichiers depuis GCE vers l'environnement SaaS de Synapse, puis de lancer le calcul de prev, et enfin de récupérer les fichiers issus de Synapse à destination de l'équipe Data.



Ordre d’exécution

  1. sendSynapseSaas.job.xml prépare les fichiers et lance l’envoi SaaS
  2. partitionFichierPrevSynapse.ps1 découpe PREVISIONS_EXP.LIN avant l’upload
  3. calculSynapseSaas.job.xml lance le calcul Synapse via batch Windows
  4. getExportLibreSaas.job.xml récupère les exports libres après calcul

Détail de l’infra

  • 10.9.31.36 : RECETTE — VM sur laquelle tourne le smart client SCM
  • 10.9.16.36 : PROD — VM sur laquelle tourne le smart client SCM

Sources de référence

  • sendSynapseSaas.job.xml
  • sendSynapseSaas.ps1
  • partitionFichierPrevSynapse.ps1
  • calculSynapseSaas.job.xml
  • getExportLibreSaas.job.xml
  • getExportLibreSaas.ps1 



Chaîne logique


Détail du traitement : sendSynapseSaas

Fichiers utilisés

  • sendSynapseSaas.job.xml
  • sendSynapseSaas.ps1
  • partitionFichierPrevSynapse.ps1


Logique de traitement

Appel du partitionnement SaaS

Le job appelle partitionFichierPrevSynapse.ps1 sur le serveur de traitement GCE.


Pourquoi cette brique existe

Le partitionnement est une spécificité SaaS autour de PREVISIONS_EXP.LIN

On ne peut pas envoyer au SaaS de CEGID un fichier >1GO


Le but n'est pas juste de "couper" le fichier arbitrairement. Il faut :

  1. réduire la volumétrie envoyée d'un seul bloc
  2. garder ensemble toutes les lignes d'un même couple fonctionnel
  3. produire plusieurs fichiers exploitables par Synapse SaaS


Ce que le script fait

Le script partitionFichierPrevSynapse.ps1 lit :

  • /generix/out/PREVISIONS_EXP.LIN

Puis il génère :

  • PREVISIONS_EXP_1.LIN
  • PREVISIONS_EXP_2.LIN
  • etc.

Les fichiers sont générés dans :

  • /generix/out


Règle de découpage

Le découpage se fait par couple :

  • Annee
  • Codecpg

Lecture technique du fichier :

  • Annee = positions 1-4
  • Codecpg = positions 192-202, puis Trim()

Une ligne de moins de 202 caractères est ignorée.

Une ligne dont l'année n'est pas numérique est ignorée.


Ordre d'exécution détaillé

1. Vérification du fichier d'entrée

Le script vérifie que PREVISIONS_EXP.LIN existe.

2. Pass 1 : identification des couples uniques

Le fichier est lu ligne par ligne avec StreamReader.

Le script stocke uniquement les clés uniques Annee|Codecpg.

Il ne garde pas toutes les lignes en mémoire lors de ce premier passage.

3. Tri et répartition des couples

Les couples sont triés :

  1. par année
  2. puis par codecpg

Ensuite, le script affecte les couples à des fichiers de sortie avec un maximum de 100 couples par fichier.

4. Pass 2 : réécriture dans les fichiers cibles

Le fichier source est relu.

Chaque ligne valide est redirigée vers le bon PREVISIONS_EXP_<n>.LIN selon le mapping calculé à l'étape précédente.


Ce qu'il faut retenir

  • toutes les lignes d'un même couple restent dans le même fichier
  • le script fait deux passes pour limiter la mémoire
  • la découpe est métier, pas purement volumétrique
  • le commentaire historique du script parle de PREVISIONS_EXP_SAAS_###.LIN, mais le code génère bien PREVISIONS_EXP_<n>.LIN


Upload des fichiers vers Cegid

Le job appelle ensuite sendSynapseSaas.ps1.

Ce script fait :

  1. vérifie la présence d'AzCopy
  2. vérifie l'existence de /generix/out
  3. récupère un JWT auprès de Cegid
  4. récupère une clé SAS via l'API RFE
  5. liste les fichiers *.LIN du répertoire
  6. exclut explicitement PREVISIONS_EXP.LIN
  7. trie les fichiers par taille
  8. envoie chaque fichier vers le sous-dossier Blob /in


Point clé

  • PREVISIONS_EXP.LIN n'est pas envoyé tel quel
  • ce sont les fichiers partitionnés PREVISIONS_EXP_*.LIN qui sont envoyés


Gestion technique de l'upload

Le script renouvelle la clé SAS tous les 5 fichiers.

En cas d'erreur d'authentification (401, 403, message Authentication) :

  1. il demande un nouveau SAS
  2. il retente l'upload du fichier en échec


Nettoyage post-envoi

Une fois l'upload terminé, le job shell supprime tous les fichiers partitionnés :

  • /generix/out/PREVISIONS_EXP_*.LIN



Détail du traitement : calculSynapseSaas

Ce que cette brique fait

calculSynapseSaas sert à déclencher le calcul Synapse après le dépôt des fichiers dans le cloud Cegid.

Le dépôt ne montre pas le calcul lui-même. Il montre uniquement l'appel au batch qui le lance.


Ordre d'exécution

Le job calculSynapseSaas.job.xml exécute :

  • ssh linvosges.pri/administrateur@10.9.31.36 "c:\\scripts\\trtMatin.bat"

Ce batch va lancer le calcul de prev.



Détail du traitement : getExportLibreSaas

Ce que cette brique fait

getExportLibreSaas sert à récupérer les exports libres après calcul.

Cette brique ne se contente pas de télécharger des fichiers. Elle commence par demander à un batch distant de lancer la production des exports libres, puis elle les télécharge.


Ordre d'exécution détaillé

1. Appel du script PowerShell

Le job getExportLibreSaas.job.xml lance, sur 10.6.31.22 :

  • pwsh -File '/generix/ioscripts/getExportLibreSaas.ps1'

2. Lancement du batch distant d'export libre

Le script PowerShell appelle :

  • ssh linvosges.pri/administrateur@10.9.31.36 C:\scripts\export_libre\launch_export_libre.bat

Contenu de ce fichier

@echo off rem Dossier où se trouvent les 16 scripts set "BASE=C:\scripts\export_libre" rem ----------------------------------------------------------------- rem Appels séquentiels : chaque script .bat doit exister à ce chemin rem ----------------------------------------------------------------- call "%BASE%\export_libre_1_QBPMODULE.bat" call "%BASE%\export_libre_2_QSAISON.bat" call "%BASE%\export_libre_3_QBPMODULEDONNEES.bat" call "%BASE%\export_libre_4_QBPLOI.bat" call "%BASE%\export_libre_5_QSATTRIB.bat" call "%BASE%\export_libre_6_QSTKDISPO.bat" call "%BASE%\export_libre_7_QBPSESSIONBP.bat" call "%BASE%\export_libre_8_QBPARBRE.bat" call "%BASE%\export_libre_9_QCARACT.bat" call "%BASE%\export_libre_10_QVALCAR.bat" call "%BASE%\export_libre_11_QSTKCOLT.bat" call "%BASE%\export_libre_12_QUVQTEDETOFD.bat" call "%BASE%\export_libre_13_QUVDATESTK.bat" call "%BASE%\export_libre_14_QARTTECH.bat" call "%BASE%\export_libre_15_QSITE.bat" call "%BASE%\export_libre_16_QPLANGP.bat" call "%BASE%\export_libre_17_QBPREVISION" echo --------------------------------------------------------------- echo Tous les scripts ont été exécutés. Fermeture dans 3 secondes... cd \scripts

On lance donc ici tous les exports libres paramétrés dans SCM.

3. Attente forcée de 60 secondes

Le script attend 60 secondes avant de télécharger, car le dernier .csv n'est pas toujours présent immédiatement quand SCM rend la main.

4. Authentification et récupération du SAS

Le script :

  1. récupère un JWT auprès de Cegid
  2. appelle l'endpoint SAS du conteneur des exports libres
  3. récupère l'URL Blob et le SAS

Conteneur observé :

  • 98324144-scm-98324144-002-test-gce-scm-exp-lib

5. Téléchargement des fichiers

Le téléchargement se fait avec AzCopy :

  • source : sous-répertoire Blob out
  • destination locale : /generix/out/scm/exp_lib
  • filtre : *_<yyyymmdd>_*.csv
  • seuls les CSV du jour sont récupérés