Mapout-M-Storage - Script d'export

Différence entre versions

De MappingDoc
 
(45 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
==Introduction==
+
<languages/>
 +
<translate>
 +
==Introduction== <!--T:1-->
 
Cette documentation décrit la mise en oeuvre du script d'export en masse des documents archivés par l'outil Mapout / M-Storage.
 
Cette documentation décrit la mise en oeuvre du script d'export en masse des documents archivés par l'outil Mapout / M-Storage.
  
 +
<!--T:2-->
 
Il s'agit d'un script php, lancé en ligne de commande, avec diverses options permettant de générer des fichiers PDF accompagnés ou non d'un fichier d'index xml.
 
Il s'agit d'un script php, lancé en ligne de commande, avec diverses options permettant de générer des fichiers PDF accompagnés ou non d'un fichier d'index xml.
  
==Pré-requis==
+
<!--T:3-->
L'extraction tourne exclusivement sur la plateforme Windows sur laquelle est installée Mapout / M-Storage.
+
Une exécution du script correspond à un et un seul dossier d'archives.
  
L'extraction des documents étant réalisée à partir des informations contenues dans la base de données MySQL de l'application Mapweb / M-Storage Web, il sera nécessaire, si cela n'est pas déjà le cas, d'installer M-Storage Web au préalable, puis de lancer la reconstruction des bases et index de chaque répertoire d'archive devant être exportés. Pour cette étape, se reporte aux manuels d'installation et d'utilisation de Mapweb / M-Storage Web.
+
==Pré-requis== <!--T:4-->
 +
L'extraction tourne exclusivement sur la plateforme Windows sur laquelle est installée M-Storage.
  
MapWeb / M-Storage Web requière :
+
<!--T:5-->
 +
L'extraction des documents étant réalisée à partir des informations contenues dans la base de données MySQL de l'application Mapweb / M-Storage Web, il sera nécessaire, si cela n'est pas déjà le cas, d'installer M-Storage Web au préalable, puis de lancer la reconstruction des bases et index de chaque répertoire d'archive devant être exportés. Pour cette étape, se reporter aux manuels d'installation et d'utilisation de Mapweb / M-Storage Web.
  
 +
<!--T:6-->
 +
'''Versions minimales requises :'''
 +
 +
<!--T:7-->
 +
- OS : Windows 2008, 2008r2, 2012, 2012r2, 7, 8, 8.1, 10
 +
:''Le script étant écrit en php7, il n'est pas possible de l'exécuter sur des serveurs Windows 2003 et antérieurs''
 +
 +
<!--T:8-->
 +
- M-Storage 7.2.0.37383 minimum.
 +
:''Afin d'éviter de faire une mise à jour de M-Storage, un exécutable "M-Storage.exe" à copier dans le dossier d'installation de M-Storage est fourni avec le package du script d'export (dans le sous dossier "bin"). Cette version nécessite au préalable l'installation du package redistribuable Visual C++ pour Visual Studio 2013 (vcredist_x86). Cependant, si la version existante est encore basée sur "Mapout.exe", il sera tout de même nécessaire de procéder à une mise à jour complète vers M-Storage.''
 +
 +
<!--T:9-->
 +
- M-Storage Web ou Mapweb : 7.1 ou 7.2
 +
 +
<!--T:10-->
 +
'''MapWeb / M-Storage Web nécessite :'''
 +
 +
<!--T:11-->
 
*Apache 2.2 ou 2.4
 
*Apache 2.2 ou 2.4
 
*MySQL version 5.1 minimum
 
*MySQL version 5.1 minimum
 +
*Une clé de licence pour l'utilisation de Mapweb est nécessaire. Elle pourra être fournie par Mapping si besoin.
  
==Installation==
+
==Installation== <!--T:12-->
 
Le script est fourni sous la forme d'un package comprenant les modules php ainsi que php 7.1.8 pour Windows.
 
Le script est fourni sous la forme d'un package comprenant les modules php ainsi que php 7.1.8 pour Windows.
  
  
1 - Décompresser le package et copier le dossier "MStorageExport" dans le dossier "MapWebFiles" de Apache.
+
<!--T:13-->
 +
'''1 - Décompresser le package et copier le dossier "MStorageExport" dans le dossier "MapWebFiles" de Apache.'''
  
 +
<!--T:14-->
 
Exemple : <code>C:\Program files\Apache Software Foundation\Apache2.2\htdocs\MapWebFiles\MStorageExport</code>
 
Exemple : <code>C:\Program files\Apache Software Foundation\Apache2.2\htdocs\MapWebFiles\MStorageExport</code>
  
  
2- Ajouter un paramètre avec le chemin de la log dans le fichier de configuration de MapWeb / M-Storage Web
+
<!--T:15-->
 +
'''2- Si nécessaire, mettre à jour la version Mapout/M-Storage en 7.2.0.37383 minimum OU copier l'exécutable M-Storage.exe dans le dossier d'installation de M-Storage.'''
  
Emplacement par défaut : <code>C:\Mapping\Apache Software Foundation\Apache2.2\htdocs\MapWebFiles\custom\config.ini</code>
+
<!--T:16-->
 +
Il est disponible dans le dossier "bin" du package.
  
Ajouter la section suivante, en spécifiant l'emplacement désiré pour le fichier de log :
+
<!--T:17-->
[debug]
+
{{warning}}Attention, si M-Storage est toujours utilisé pour prendre en charge de nouveaux documents, il ne faut pas remplacer la version M-Storage installée, mais plutôt procéder à une duplication d'environnement complet sur un autre serveur dédié à l'export des archives existantes.
log_file_path = "c:/Mapping/export_MStorage.log"
 
  
==Utilisation==
+
==Utilisation== <!--T:18-->
 
'''1 - Avant de lancer la première extraction de documents, il est nécessaire de récupérer les informations suivantes permettant de construire la requête'''
 
'''1 - Avant de lancer la première extraction de documents, il est nécessaire de récupérer les informations suivantes permettant de construire la requête'''
  
*L'emplacement du programme '''Mapout.exe''' ou '''M-storage.exe'''
+
<!--T:19-->
*L'emplacement du dossier d'archives à exporter
+
*L'emplacement du programme '''M-storage.exe''' fournie avec le package.
 +
*L'emplacement du dossier dans lequel se trouve les archives à exporter.
  
  
'''2 - Ouvrir une invite de commande (cmd) en tant qu'administrateur et se positionner sur le dossier MapWebFiles :'''
+
<!--T:20-->
 +
'''2 - Ouvrir une invite de commande (cmd) en tant qu'administrateur et se positionner sur le dossier MStorageExport :'''
  
 +
<!--T:21-->
 
Exemple :
 
Exemple :
  cd "C:\Program files\Apache Software Foundation\Apache2.2\htdocs\MapWebFiles"
+
  cd "C:\Program files\Apache Software Foundation\Apache2.2\htdocs\MapWebFiles\MStorageExport"
 
{{Warning}} Toutes les commandes suivantes devront impérativement être saisies à partir de cet emplacement !!!
 
{{Warning}} Toutes les commandes suivantes devront impérativement être saisies à partir de cet emplacement !!!
  
 +
<!--T:22-->
 
<br />
 
<br />
  
 +
<!--T:23-->
 
'''3 - Pour obtenir de l'aide en ligne, saisir la commande suivante'''
 
'''3 - Pour obtenir de l'aide en ligne, saisir la commande suivante'''
  
 +
<!--T:24-->
 
<code>php718\php help.php</code>
 
<code>php718\php help.php</code>
  
 +
<!--T:25-->
 
<br />
 
<br />
  
 +
<!--T:26-->
 
'''4 - Commande de base de l'extraction'''
 
'''4 - Commande de base de l'extraction'''
  
<code>php718\php index.php</code>
+
<!--T:27-->
 +
<code>php718\php export.php</code>
  
  
 +
<!--T:28-->
 
'''Paramètres obligatoires'''
 
'''Paramètres obligatoires'''
 
{| class="wikitable"
 
{| class="wikitable"
Ligne 63 : Ligne 100 :
 
!Commentaire
 
!Commentaire
 
|-
 
|-
|'''''--archive'''''
+
|'''''--archive='''''
|Emplacement du dossier d'archives à exporter (exemple : <code>D:\Archives\Factures</code>). Il s'agit d'un dossier contenant divers fichiers dont ''Spool.cpr'' et ''Passwd.txt''
+
|Emplacement du dossier d'archives à exporter (exemple : <code>D:\Archives\Factures</code>). Il s'agit d'un dossier contenant divers fichiers dont ''Spool.cpr'' et ''Passwd.txt''. Le nom du dossier NE DOIT PAS se terminer pas un anti-slash.
 
|-
 
|-
|'''''--dest'''''
+
|'''''--dest='''''
|Destination des documents à extraire. Il s'agit du chemin complet du fichier PDF à créer, sans l'extension. Si les dossiers spécifiés n'existent pas, ils seront créés automatiquement. Le chemin peut contenir des valeurs de méta données (entre chevrons <xxxx> ) et d'index (entre doubles crochets <nowiki>[[c_xxxxx]]</nowiki> ).
+
|Destination des documents à extraire. Il s'agit du chemin complet du fichier PDF à créer, sans l'extension. Si les dossiers spécifiés n'existent pas, ils seront créés automatiquement. Le chemin peut contenir des valeurs de méta données (entre chevrons <xxxx> ) et d'index (entre doubles crochets <nowiki>[[c_xxxxx]]</nowiki>) et avec le préfixe "c_". Ne pas y mettre l'extension.  
 +
Facultatif si ''--action="listCriteria"''
 
|-
 
|-
|'''''--pgm'''''
+
|'''''--pgm='''''
 
|Chemin complet du programme M-Storage.exe ou Mapout.exe (selon la version installée)
 
|Chemin complet du programme M-Storage.exe ou Mapout.exe (selon la version installée)
 
|-
 
|-
|'''''--action'''''
+
|'''''--action='''''
 
|Action du script :
 
|Action du script :
<code>--action="''getCommands''"</code> : création de fichiers txt avec la commande M-Storage.exe ou Mapout.exe permettant de créer le fichier PDF. Cette option permet de tester la commande rapidement sans créer les fichiers PDF
 
  
 +
 +
<!--T:29-->
 +
<code>--action="''getCommands''"</code> : création de fichiers txt avec la commande M-Storage.exe permettant de créer le fichier PDF. Cette option permet de tester la commande rapidement sans créer les fichiers PDF
 +
 +
 +
<!--T:30-->
 
<code>''--action="generate''"</code> : génération des fichiers PDF
 
<code>''--action="generate''"</code> : génération des fichiers PDF
 +
 +
 +
<!--T:31-->
 +
<code>''--action="listCriteria''"</code> : liste les index disponibles pour l'archive sélectionnée
 
|}
 
|}
  
  
 +
<!--T:32-->
 
'''''Exemple de commande simple :'''''
 
'''''Exemple de commande simple :'''''
  php718\php index.php --archive="D:\Archives\Factures" --dest="D:\Export Archives\<NomUser>\<nowiki>[[c_numfac]]</nowiki>_<nowiki>[[c_numcli]]</nowiki>" --pgm="C:\Mapping\M-Storage\m-storage.exe" --action="getCommands"
+
  php718\php export.php --archive="D:\Archives\Factures" --dest="D:\Export Archives\<NomUser>\<nowiki>[[c_numfac]]</nowiki>_<nowiki>[[c_numcli]]</nowiki>" --pgm="C:\Mapping\M-Storage\m-storage.exe" --action="getCommands"
 
<br />
 
<br />
  
 +
<!--T:33-->
 
'''Paramètres facultatifs'''
 
'''Paramètres facultatifs'''
 
{| class="wikitable"
 
{| class="wikitable"
Ligne 93 : Ligne 142 :
 
|Si présent, chaque fichier PDF sera accompagné d'un fichier d'index XML portant le même nom
 
|Si présent, chaque fichier PDF sera accompagné d'un fichier d'index XML portant le même nom
 
|-
 
|-
|'''''--xsl'''''
+
|'''''--xsl='''''
 
|Chemin d'un fichier xsl permettant de personnaliser le schéma du fichier xml afin de le rendre compatible avec un outil de GED tiers. La présence de ce paramètre active la transformation XSLT.  Exemple : <code>--xsl="C:\Mapping\Storage_Alfresco.xsl"</code>
 
|Chemin d'un fichier xsl permettant de personnaliser le schéma du fichier xml afin de le rendre compatible avec un outil de GED tiers. La présence de ce paramètre active la transformation XSLT.  Exemple : <code>--xsl="C:\Mapping\Storage_Alfresco.xsl"</code>
 
|-
 
|-
|'''''--rupt'''''
+
|'''''--rupt='''''
 
|Index de rupture, permettant de générer plusieurs PDF à partir d'un même spool d'impression. Par exemple, si les archives contiennent des spools d'impression multi-factures, il est possible, en spécifiant l'index du numéro de facture dans le paramètre ''--rupt'', de générer un pdf par facture et non un pdf pour le spool complet. Il est possible d'avoir plusieurs ocurences de ce paramètre pour que la rupture se fasse sur plusieurs index différents.  Exemple : <code>--rupt="c_numfac"</code>
 
|Index de rupture, permettant de générer plusieurs PDF à partir d'un même spool d'impression. Par exemple, si les archives contiennent des spools d'impression multi-factures, il est possible, en spécifiant l'index du numéro de facture dans le paramètre ''--rupt'', de générer un pdf par facture et non un pdf pour le spool complet. Il est possible d'avoir plusieurs ocurences de ce paramètre pour que la rupture se fasse sur plusieurs index différents.  Exemple : <code>--rupt="c_numfac"</code>
 
|-
 
|-
Ligne 102 : Ligne 151 :
 
|Lors de l'utilisation d'un ou plusieurs index de ruptures, il est possible que certaines pages ne comportent pas de valeur pour ces index, notamment parce que l'un des index en question n'est présent que sur la première page de chaque document. Dans ce cas, si le paramètre ''--nextpage'' est présent, les pages suivantes ne comportant pas de valeur seront incluses dans le document PDF généré.
 
|Lors de l'utilisation d'un ou plusieurs index de ruptures, il est possible que certaines pages ne comportent pas de valeur pour ces index, notamment parce que l'un des index en question n'est présent que sur la première page de chaque document. Dans ce cas, si le paramètre ''--nextpage'' est présent, les pages suivantes ne comportant pas de valeur seront incluses dans le document PDF généré.
 
|-
 
|-
|'''--filterindex_egal'''
+
|'''''--log='''''
'''--filterindex_contains'''
+
|Chemin complet d'un fichier de log. A défaut, la totalité se la log se fera sur la sortie standard.
 +
|-
 +
|'''--filterindex_egal='''
 +
'''--filterindex_contains='''
 +
 
 +
<!--T:34-->
 +
'''--filterindex_begin='''
 +
 
 +
 
 +
<!--T:35-->
 +
'''--filtermeta_egal='''
 +
 
 +
<!--T:36-->
 +
'''--filtermeta_contains='''
  
'''--filterindex_begin'''
+
<!--T:37-->
 +
'''--filtermeta_begin='''
 
|Divers paramètres de filtres, sur les méta données et sur les index sont possible
 
|Divers paramètres de filtres, sur les méta données et sur les index sont possible
  
  
 +
<!--T:38-->
 
Usage : ''<code>--filter_XXXXXX="clé=valeur"</code>'' <br />
 
Usage : ''<code>--filter_XXXXXX="clé=valeur"</code>'' <br />
  
 +
<!--T:39-->
 
Liste des différents types de filtres
 
Liste des différents types de filtres
  
 +
<!--T:40-->
 
:'''-- filtermeta_egal''' : filtre de type ''<u>la méta donnée</u>'' '''est''' '''égale à''' ''<u>la valeur</u>''
 
:'''-- filtermeta_egal''' : filtre de type ''<u>la méta donnée</u>'' '''est''' '''égale à''' ''<u>la valeur</u>''
  
 +
<!--T:41-->
 
:'''-- filtermeta_contains''' : filtre de type ''<u>la méta donnée</u>'' '''contient''' ''<u>la valeur</u>''
 
:'''-- filtermeta_contains''' : filtre de type ''<u>la méta donnée</u>'' '''contient''' ''<u>la valeur</u>''
  
 +
<!--T:42-->
 
:'''-- filtermeta_begin''' : filtre de type ''<u>la méta donnée</u>'' '''commence par''' ''<u>la valeur</u>''
 
:'''-- filtermeta_begin''' : filtre de type ''<u>la méta donnée</u>'' '''commence par''' ''<u>la valeur</u>''
  
 +
<!--T:43-->
 
:'''-- filterindex_egal''' : filtre de type <u>''l'index''</u> '''est égal à''' ''<u>la valeur</u>''
 
:'''-- filterindex_egal''' : filtre de type <u>''l'index''</u> '''est égal à''' ''<u>la valeur</u>''
  
 +
<!--T:44-->
 
:'''-- filterindex_contains''' : filtre de type <u>''l'index''</u> '''contient''' ''<u>la valeur</u>''
 
:'''-- filterindex_contains''' : filtre de type <u>''l'index''</u> '''contient''' ''<u>la valeur</u>''
  
 +
<!--T:45-->
 
:'''-- filterindex_begin''' : filtre de type <u>''l'index''</u> '''commence par''' ''<u>la valeur</u>'' <br />
 
:'''-- filterindex_begin''' : filtre de type <u>''l'index''</u> '''commence par''' ''<u>la valeur</u>'' <br />
  
 +
<!--T:46-->
 
Exemple : ''<code>--filterindex_egal="c_site=Paris" --filtermeta_begin="NomSpool=S2016"</code>'' <br />
 
Exemple : ''<code>--filterindex_egal="c_site=Paris" --filtermeta_begin="NomSpool=S2016"</code>'' <br />
  
 +
<!--T:47-->
 
La liste des index disponibles dépend de chaque archive. Cette liste est disponible via la table "''criteres''" de la base MySql. Tous les index doivent être spécifiés avec leur préfixe "c_".
 
La liste des index disponibles dépend de chaque archive. Cette liste est disponible via la table "''criteres''" de la base MySql. Tous les index doivent être spécifiés avec leur préfixe "c_".
|-
+
|}
|'''--filtermeta_egal'''
+
 
'''--filtermeta_contains'''
+
<!--T:48-->
 +
'''Liste des méta données'''
 +
 
 +
<!--T:49-->
 +
La liste des méta données est quant à elle figée. Il s'agit des colonnes de la table "''spools''" de la base MySQL :<br /> ''{{Warning}} Attention : sensibles à la casse.'' <br /> ''{{Warning}} Il est courant que certaines de ces méta données soient détournées pour contenir des données "métier", surtout pour les archives issues de Mapping sur les plateformes Windows et Unix/Linux.''
  
'''--filtermeta_begin'''
+
<!--T:50-->
|La liste des méta données est quant à elle figée. Il s'agit des colonnes de la table "''spools''" de la base MySQL :<br /> ''{{Warning}} Attention : sensibles à la casse.'' <br /> ''{{Warning}} Il est courant que certaines de ces méta données soient détournées pour contenir des données "métier", surtout pour les archives issues de Mapping sur les plateformes Windows et Unix/Linux.''
+
:*'''NomSpool''' : ''<small>SPOOLNAME</small>'' au format "Saaaammjjhhmmssxxxxxxxxx". Cette donnée étant indexée, elle convient très bien à une extraction par période, par exemple avec le paramètre ''--filtermeta_begin="NomSpool=S201706"'' pour extraire les documents de juin 2017.
:*'''NomSpool''' : SPOOLNAME au format "Saaaammjjhhmmssxxxxxxxxx". Cette donnée étant indexée, elle convient très bien à une extraction par période, par exemple avec le paramètre ''--filtermeta_begin="NomSpool=S201706"'' pour extraire les documents de juin 2017.
+
:*'''DateDuSpoolFichier''' '':'' ''<small>DATE</small>'' au format "aaaammjj"
:*'''DateDuSpoolFichier''' '':'' DATE au format "aaaammjj"
+
:*'''NomTravail''' : ''<small>NUM</small>''
:*'''NomTravail''' : JOBNAME
+
:*'''NomUser''' : ''<small>USERNAME</small>''
:*'''NomUser''' : USERNAME
+
:*'''DescriptifPC'''
 
:*'''NumeroJob'''
 
:*'''NumeroJob'''
 
:*'''FichierSpool'''
 
:*'''FichierSpool'''
 
:*'''NumeroSpool'''
 
:*'''NumeroSpool'''
:*'''OUTQ''' : OUTQ
+
:*'''OUTQ''' : ''<small>OUTQ</small>''
 
:*'''BiliothequeOUTQ'''
 
:*'''BiliothequeOUTQ'''
:*'''Reference''' : USERDATA
+
:*'''Reference''' : ''<small>USERDATA</small>''
:*'''Format''' : FORMAT MapDraw / M-Designer
+
:*'''Format''' : ''<small>FORMAT</small>'' MapDraw / M-Designer
:*'''ProgrammeEdition''' : PROG
+
:*'''ProgrammeEdition''' : ''<small>PROG</small>''
 
:*'''BibProgrammeEdition'''
 
:*'''BibProgrammeEdition'''
 
:*'''Critere1'''
 
:*'''Critere1'''
Ligne 151 : Ligne 228 :
 
:*'''Critere3'''
 
:*'''Critere3'''
 
:*'''Critere4'''
 
:*'''Critere4'''
|}
 
  
  
 +
<!--T:51-->
 
'''''Exemple de commande avancée :'''''
 
'''''Exemple de commande avancée :'''''
  
 +
<!--T:52-->
 
Génération des documents PDF issus de l'archive D:\Archives\012018 pour lesquels le format MapDraw/M-Designer est "FACTURE", le nom du client "EXEMPLE" pour la période janvier 2018. Chaque PDF contiendra les données d'un seul client (rupture par c_numcli) et un fichier d'index non personnalisé accompagnera chaque fichier PDF. Le plan de classement des fichiers PDF générés sera dynamique et comportera la date, le nom du client et l'identifiant du spool d'impression.  
 
Génération des documents PDF issus de l'archive D:\Archives\012018 pour lesquels le format MapDraw/M-Designer est "FACTURE", le nom du client "EXEMPLE" pour la période janvier 2018. Chaque PDF contiendra les données d'un seul client (rupture par c_numcli) et un fichier d'index non personnalisé accompagnera chaque fichier PDF. Le plan de classement des fichiers PDF générés sera dynamique et comportera la date, le nom du client et l'identifiant du spool d'impression.  
  php718\php index.php --action="generate" --archive="D:\Archives\012018" --filtermeta_egal="Format=FACTURE" --filterindex_contains="c_nomcli=EXEMPLE" --filtermeta_begin="NomSpool=201801" --rupt="c_numcli" --nextpage --indexfile --dest="D:\Export\<nowiki>[[c_date]]</nowiki>\<nowiki>[[c_nomcli]]</nowiki>_<NomSpool>.pdf" --pgm="D:\Mapping\M-storage\M-storage.exe"
+
</translate>
 +
  php718\php export.php --action="generate" --archive="D:\Archives\012018" --filtermeta_egal="Format=FACTURE" --filterindex_contains="c_nomcli=EXEMPLE" --filtermeta_begin="NomSpool=201801" --rupt="c_numcli" --nextpage --indexfile --dest="D:\Export\<nowiki>[[c_date]]</nowiki>\<nowiki>[[c_nomcli]]</nowiki>_<NomSpool>" --pgm="D:\Mapping\M-storage\M-storage.exe"
 
<br />
 
<br />
 +
<translate>
  
== Exemples de XSL ==
+
==Exemple de XML généré sans transformation XSL== <!--T:53-->
 +
</translate>
 +
<syntaxhighlight lang="xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 +
<Indexes name="Document_2503576">
 +
  <Meta name="NomSpool">S2019052127391744561449</Meta>
 +
  <Meta name="DateDuSpoolFichier">20190521</Meta>
 +
  <Meta name="NomTravail">ED_BCHARG</Meta>
 +
  <Meta name="NomUser">ADMIN2</Meta>
 +
  <Meta name="NumeroJob">157478</Meta>
 +
  <Meta name="FichierSpool">BR60400C</Meta>
 +
  <Meta name="NumeroSpool">4 </Meta>
 +
  <Meta name="OutQ">RICOH1</Meta>
 +
  <Meta name="BibliothequeOutQ">QUSRSYS </Meta>
 +
  <Meta name="Reference">BR60400C</Meta>
 +
  <Meta name="Format"/>
 +
  <Meta name="ProgrammeEdition">BR60400C</Meta>
 +
  <Meta name="BibProgrammeEdition">MAP400</Meta>
 +
  <Meta name="DescriptifPC">Bon Livraison Mail</Meta>
 +
  <Meta name="Critere1"/>
 +
  <Meta name="Critere2"/>
 +
  <Meta name="Critere3"/>
 +
  <Meta name="Critere4"/>
 +
  <Index name="c_body">
 +
    <Value page="1">c:\Vente_AvisExpedition_FR.txt</Value>
 +
  </Index>
 +
  <Index name="c_client">
 +
    <Value page="1">185830</Value>
 +
  </Index>
 +
  <Index name="c_dosarc">
 +
    <Value page="1">Bon Livraison BONDUES 2019</Value>
 +
  </Index>
 +
  <Index name="c_mois">
 +
    <Value page="1">05</Value>
 +
  </Index>
 +
  <Index name="c_nomclient">
 +
    <Value page="1">MY COMPAGNY - CUISINES & BAINS</Value>
 +
  </Index>
 +
  <Index name="c_numbl">
 +
    <Value page="1">6547951</Value>
 +
  </Index>
 +
</Indexes>
 +
</syntaxhighlight>
 +
<translate>
 +
==Exemples de XSL== <!--T:54-->
  
==== Conversion XSL pour Alfresco ====
+
====Conversion XSL pour Alfresco==== <!--T:55-->
  <xsl:stylesheet xmlns:xsl="<nowiki>http://www.w3.org/1999/XSL/Transform</nowiki>" xmlns:xs="<nowiki>http://www.w3.org/2001/XMLSchema</nowiki>" version="1.0">
+
</translate>
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no" cdata-section-elements="field" exclude-result-prefixes="xsl xs"/>
+
<syntaxhighlight lang="xml">
<xsl:template match="/">
+
<?xml version="1.0" encoding="UTF-8"?>
<xsl:text disable-output-escaping='yes'><nowiki>&</nowiki>lt;!DOCTYPE properties SYSTEM "<nowiki>http://java.sun.com/dtd/properties.dtd</nowiki>"<nowiki>&</nowiki>gt;
+
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
</xsl:text>
+
  <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no" cdata-section-elements="field" exclude-result-prefixes="xsl xs"/>
<xsl:apply-templates/>
+
  <xsl:template match="/">
</xsl:template>
+
  <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"&gt;
 +
  </xsl:text>
 +
  <xsl:apply-templates/>
 +
  </xsl:template>
 
   
 
   
<xsl:template match="Indexes">
+
  <xsl:template match="Indexes">
<properties>
+
    <properties>
<!-- Activation du modele mp: -->  
+
    <!-- Activation du modele mp: -->              
<entry key="type">cm:content</entry>
+
      <entry key="type">cm:content</entry>
<entry key="aspects"></entry>
+
      <entry key="aspects"></entry>
<xsl:apply-templates/>
+
      <xsl:apply-templates/>
</properties>
+
    </properties>
</xsl:template>
+
  </xsl:template>
 
   
 
   
<xsl:template match="Meta">
+
  <xsl:template match="Meta">
<entry>
+
    <entry>
<xsl:attribute name="key">mp:<xsl:value-of select="translate(@name,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
+
      <xsl:attribute name="key">mp:<xsl:value-of select="translate(@name,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
</xsl:attribute><xsl:value-of select="."/>
+
      </xsl:attribute><xsl:value-of select="."/>
</entry>
+
    </entry>
</xsl:template>
+
  </xsl:template>
 
   
 
   
<xsl:template match="Index">
+
  <xsl:template match="Index">
<entry>
+
    <entry>
<xsl:attribute name="key">mp:<xsl:value-of select="translate(@name,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
+
      <xsl:attribute name="key">mp:<xsl:value-of select="translate(@name,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
</xsl:attribute><xsl:value-of select="Value"/>
+
      </xsl:attribute><xsl:value-of select="Value"/>
</entry>
+
    </entry>
</xsl:template>
+
  </xsl:template>
 
  </xsl:stylesheet>
 
  </xsl:stylesheet>
 +
</syntaxhighlight>

Version actuelle datée du 23 décembre 2024 à 08:20

Autres langues :
English • ‎français

Introduction

Cette documentation décrit la mise en oeuvre du script d'export en masse des documents archivés par l'outil Mapout / M-Storage.

Il s'agit d'un script php, lancé en ligne de commande, avec diverses options permettant de générer des fichiers PDF accompagnés ou non d'un fichier d'index xml.

Une exécution du script correspond à un et un seul dossier d'archives.

Pré-requis

L'extraction tourne exclusivement sur la plateforme Windows sur laquelle est installée M-Storage.

L'extraction des documents étant réalisée à partir des informations contenues dans la base de données MySQL de l'application Mapweb / M-Storage Web, il sera nécessaire, si cela n'est pas déjà le cas, d'installer M-Storage Web au préalable, puis de lancer la reconstruction des bases et index de chaque répertoire d'archive devant être exportés. Pour cette étape, se reporter aux manuels d'installation et d'utilisation de Mapweb / M-Storage Web.

Versions minimales requises :

- OS : Windows 2008, 2008r2, 2012, 2012r2, 7, 8, 8.1, 10

Le script étant écrit en php7, il n'est pas possible de l'exécuter sur des serveurs Windows 2003 et antérieurs

- M-Storage 7.2.0.37383 minimum.

Afin d'éviter de faire une mise à jour de M-Storage, un exécutable "M-Storage.exe" à copier dans le dossier d'installation de M-Storage est fourni avec le package du script d'export (dans le sous dossier "bin"). Cette version nécessite au préalable l'installation du package redistribuable Visual C++ pour Visual Studio 2013 (vcredist_x86). Cependant, si la version existante est encore basée sur "Mapout.exe", il sera tout de même nécessaire de procéder à une mise à jour complète vers M-Storage.

- M-Storage Web ou Mapweb : 7.1 ou 7.2

MapWeb / M-Storage Web nécessite :

  • Apache 2.2 ou 2.4
  • MySQL version 5.1 minimum
  • Une clé de licence pour l'utilisation de Mapweb est nécessaire. Elle pourra être fournie par Mapping si besoin.

Installation

Le script est fourni sous la forme d'un package comprenant les modules php ainsi que php 7.1.8 pour Windows.


1 - Décompresser le package et copier le dossier "MStorageExport" dans le dossier "MapWebFiles" de Apache.

Exemple : C:\Program files\Apache Software Foundation\Apache2.2\htdocs\MapWebFiles\MStorageExport


2- Si nécessaire, mettre à jour la version Mapout/M-Storage en 7.2.0.37383 minimum OU copier l'exécutable M-Storage.exe dans le dossier d'installation de M-Storage.

Il est disponible dans le dossier "bin" du package.

Warning-300px.pngAttention, si M-Storage est toujours utilisé pour prendre en charge de nouveaux documents, il ne faut pas remplacer la version M-Storage installée, mais plutôt procéder à une duplication d'environnement complet sur un autre serveur dédié à l'export des archives existantes.

Utilisation

1 - Avant de lancer la première extraction de documents, il est nécessaire de récupérer les informations suivantes permettant de construire la requête

  • L'emplacement du programme M-storage.exe fournie avec le package.
  • L'emplacement du dossier dans lequel se trouve les archives à exporter.


2 - Ouvrir une invite de commande (cmd) en tant qu'administrateur et se positionner sur le dossier MStorageExport :

Exemple :

cd "C:\Program files\Apache Software Foundation\Apache2.2\htdocs\MapWebFiles\MStorageExport"

Warning-300px.png Toutes les commandes suivantes devront impérativement être saisies à partir de cet emplacement !!!


3 - Pour obtenir de l'aide en ligne, saisir la commande suivante

php718\php help.php


4 - Commande de base de l'extraction

php718\php export.php


Paramètres obligatoires

______Paramètre______ Commentaire
--archive= Emplacement du dossier d'archives à exporter (exemple : D:\Archives\Factures). Il s'agit d'un dossier contenant divers fichiers dont Spool.cpr et Passwd.txt. Le nom du dossier NE DOIT PAS se terminer pas un anti-slash.
--dest= Destination des documents à extraire. Il s'agit du chemin complet du fichier PDF à créer, sans l'extension. Si les dossiers spécifiés n'existent pas, ils seront créés automatiquement. Le chemin peut contenir des valeurs de méta données (entre chevrons <xxxx> ) et d'index (entre doubles crochets [[c_xxxxx]]) et avec le préfixe "c_". Ne pas y mettre l'extension.

Facultatif si --action="listCriteria"

--pgm= Chemin complet du programme M-Storage.exe ou Mapout.exe (selon la version installée)
--action= Action du script :


--action="getCommands" : création de fichiers txt avec la commande M-Storage.exe permettant de créer le fichier PDF. Cette option permet de tester la commande rapidement sans créer les fichiers PDF


--action="generate" : génération des fichiers PDF


--action="listCriteria" : liste les index disponibles pour l'archive sélectionnée


Exemple de commande simple :

php718\php export.php --archive="D:\Archives\Factures" --dest="D:\Export Archives\<NomUser>\[[c_numfac]]_[[c_numcli]]" --pgm="C:\Mapping\M-Storage\m-storage.exe" --action="getCommands"


Paramètres facultatifs

______Paramètre______ Commentaire
--indexfile Si présent, chaque fichier PDF sera accompagné d'un fichier d'index XML portant le même nom
--xsl= Chemin d'un fichier xsl permettant de personnaliser le schéma du fichier xml afin de le rendre compatible avec un outil de GED tiers. La présence de ce paramètre active la transformation XSLT. Exemple : --xsl="C:\Mapping\Storage_Alfresco.xsl"
--rupt= Index de rupture, permettant de générer plusieurs PDF à partir d'un même spool d'impression. Par exemple, si les archives contiennent des spools d'impression multi-factures, il est possible, en spécifiant l'index du numéro de facture dans le paramètre --rupt, de générer un pdf par facture et non un pdf pour le spool complet. Il est possible d'avoir plusieurs ocurences de ce paramètre pour que la rupture se fasse sur plusieurs index différents. Exemple : --rupt="c_numfac"
--nextpage Lors de l'utilisation d'un ou plusieurs index de ruptures, il est possible que certaines pages ne comportent pas de valeur pour ces index, notamment parce que l'un des index en question n'est présent que sur la première page de chaque document. Dans ce cas, si le paramètre --nextpage est présent, les pages suivantes ne comportant pas de valeur seront incluses dans le document PDF généré.
--log= Chemin complet d'un fichier de log. A défaut, la totalité se la log se fera sur la sortie standard.
--filterindex_egal=

--filterindex_contains=

--filterindex_begin=


--filtermeta_egal=

--filtermeta_contains=

--filtermeta_begin=

Divers paramètres de filtres, sur les méta données et sur les index sont possible


Usage : --filter_XXXXXX="clé=valeur"

Liste des différents types de filtres

-- filtermeta_egal : filtre de type la méta donnée est égale à la valeur
-- filtermeta_contains : filtre de type la méta donnée contient la valeur
-- filtermeta_begin : filtre de type la méta donnée commence par la valeur
-- filterindex_egal : filtre de type l'index est égal à la valeur
-- filterindex_contains : filtre de type l'index contient la valeur
-- filterindex_begin : filtre de type l'index commence par la valeur

Exemple : --filterindex_egal="c_site=Paris" --filtermeta_begin="NomSpool=S2016"

La liste des index disponibles dépend de chaque archive. Cette liste est disponible via la table "criteres" de la base MySql. Tous les index doivent être spécifiés avec leur préfixe "c_".

Liste des méta données

La liste des méta données est quant à elle figée. Il s'agit des colonnes de la table "spools" de la base MySQL :
Warning-300px.png Attention : sensibles à la casse.
Warning-300px.png Il est courant que certaines de ces méta données soient détournées pour contenir des données "métier", surtout pour les archives issues de Mapping sur les plateformes Windows et Unix/Linux.

  • NomSpool : SPOOLNAME au format "Saaaammjjhhmmssxxxxxxxxx". Cette donnée étant indexée, elle convient très bien à une extraction par période, par exemple avec le paramètre --filtermeta_begin="NomSpool=S201706" pour extraire les documents de juin 2017.
  • DateDuSpoolFichier : DATE au format "aaaammjj"
  • NomTravail : NUM
  • NomUser : USERNAME
  • DescriptifPC
  • NumeroJob
  • FichierSpool
  • NumeroSpool
  • OUTQ : OUTQ
  • BiliothequeOUTQ
  • Reference : USERDATA
  • Format : FORMAT MapDraw / M-Designer
  • ProgrammeEdition : PROG
  • BibProgrammeEdition
  • Critere1
  • Critere2
  • Critere3
  • Critere4


Exemple de commande avancée :

Génération des documents PDF issus de l'archive D:\Archives\012018 pour lesquels le format MapDraw/M-Designer est "FACTURE", le nom du client "EXEMPLE" pour la période janvier 2018. Chaque PDF contiendra les données d'un seul client (rupture par c_numcli) et un fichier d'index non personnalisé accompagnera chaque fichier PDF. Le plan de classement des fichiers PDF générés sera dynamique et comportera la date, le nom du client et l'identifiant du spool d'impression.

php718\php export.php --action="generate" --archive="D:\Archives\012018" --filtermeta_egal="Format=FACTURE" --filterindex_contains="c_nomcli=EXEMPLE" --filtermeta_begin="NomSpool=201801" --rupt="c_numcli" --nextpage --indexfile --dest="D:\Export\[[c_date]]\[[c_nomcli]]_<NomSpool>" --pgm="D:\Mapping\M-storage\M-storage.exe"


Exemple de XML généré sans transformation XSL

 <?xml version="1.0" encoding="UTF-8"?>
 <Indexes name="Document_2503576">
   <Meta name="NomSpool">S2019052127391744561449</Meta>
   <Meta name="DateDuSpoolFichier">20190521</Meta>
   <Meta name="NomTravail">ED_BCHARG</Meta>
   <Meta name="NomUser">ADMIN2</Meta>
   <Meta name="NumeroJob">157478</Meta>
   <Meta name="FichierSpool">BR60400C</Meta>
   <Meta name="NumeroSpool">4 </Meta>
   <Meta name="OutQ">RICOH1</Meta>
   <Meta name="BibliothequeOutQ">QUSRSYS </Meta>
   <Meta name="Reference">BR60400C</Meta>
   <Meta name="Format"/>
   <Meta name="ProgrammeEdition">BR60400C</Meta>
   <Meta name="BibProgrammeEdition">MAP400</Meta>
   <Meta name="DescriptifPC">Bon Livraison Mail</Meta>
   <Meta name="Critere1"/>
   <Meta name="Critere2"/>
   <Meta name="Critere3"/>
   <Meta name="Critere4"/>
   <Index name="c_body">
     <Value page="1">c:\Vente_AvisExpedition_FR.txt</Value>
   </Index>
   <Index name="c_client">
     <Value page="1">185830</Value>
   </Index>
   <Index name="c_dosarc">
     <Value page="1">Bon Livraison BONDUES 2019</Value>
   </Index>
   <Index name="c_mois">
     <Value page="1">05</Value>
   </Index>
   <Index name="c_nomclient">
     <Value page="1">MY COMPAGNY - CUISINES & BAINS</Value>
   </Index>
   <Index name="c_numbl">
     <Value page="1">6547951</Value>
   </Index>
 </Indexes>

Exemples de XSL

Conversion XSL pour Alfresco

 <?xml version="1.0" encoding="UTF-8"?>
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
   <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no" cdata-section-elements="field" exclude-result-prefixes="xsl xs"/>
   <xsl:template match="/">
   <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"&gt;
   </xsl:text>
   <xsl:apply-templates/>
   </xsl:template>
 
   <xsl:template match="Indexes">
     <properties>
     <!-- Activation du modele mp: -->                
       <entry key="type">cm:content</entry>
       <entry key="aspects"></entry>
       <xsl:apply-templates/>
     </properties>
   </xsl:template>
 
   <xsl:template match="Meta">
     <entry>
       <xsl:attribute name="key">mp:<xsl:value-of select="translate(@name,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
       </xsl:attribute><xsl:value-of select="."/>
     </entry>
   </xsl:template>
 
   <xsl:template match="Index">
     <entry>
       <xsl:attribute name="key">mp:<xsl:value-of select="translate(@name,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
       </xsl:attribute><xsl:value-of select="Value"/>
     </entry>
   </xsl:template>
 </xsl:stylesheet>