IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

Comment récupérer la date et l'heure du moment d'exécution?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 47
    Par défaut Comment récupérer la date et l'heure du moment d'exécution?
    Bonjour,

    Après un moment à chercher en long, en large et en travers, je pose ma question pour laquelle je n'ai pas trouvé de réponse fonctionnelle.

    Je pose le contexte : pas le choix, je suis obligé d'utiliser XSLT 1.0, c'est une restriction liée à l'ERP (et ça coûterait bien trop cher de changer l'ERP complet).
    Le problème de départ est que la date d'"impression" affichée à la génération du document PDF n'est pas la date voulue (la date qui se met est la date Ã* laquelle le fichier XML a été mis à jour pour la dernière fois, et nous souhaitons afficher la date Ã* laquelle on lance la génération du fichier PDF pour l'imprimer).

    Je suis tombé sur les fonctions du genre current-date(), mais elles ne sont connues que sous XSLT 2, donc pour mon cas je ne peux pas m'appuyer dessus.
    Je suis également tombé sur un site en Anglais (pas sûr en tant que nouveau membre de pouvoir poster un lien, donc je m'abstiens) qui proposait 2 solutions pour XSLT 1.0 :
    - la première serait de récupérer l'extension "Dates and Times" de exslt.org sur Github pour ajouter le code suivant dans le header :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xsl:stylesheet version=”1.0″ xmlns:date=”http://exslt.org/dates-and-times” extension-element-prefixes=”date” …. >
     
    <xsl:import href=”/date.xsl”>
     
    <xsl:template match=”//root”>
     
    <xsl:value-of select=”date:date-time()/>
     
    </xsl:template>
     
    </xsl:stylesheet>
    Le téléchargement sur Github a résulté que l'antivirus a piaillé en indiquant "Malware.PHP/Pioneer.B", et en récupérant uniquement le fichier date.xsl j'avais des erreurs pas sympa.
    N'ayant pas envie de mettre mon emploi en danger, j'ai préféré supprimer le téléchargement !
    - la deuxième méthode parle d'intégrer du Java si on utilise Eclipse, mais ce n'est pas mon cas. J'ai donc laissé cette piste de côté.

    Mon fichier est actuellement construit de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- import des différents fichiers de template -->
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    	<xsl:output method="html"/>
    	<xsl:template match="order"> <!-- Pas le choix du template puisque c'est lié à l'ERP -->
    ...
    Y aurait-il une possibilité (je lis que la méthode de sortie est en HTML, peut-être une idée??) de récupérer la date courante (même si ça s'exécute du côté du serveur, le serveur d'exécution est sur le même serveur NTP que les ordinateurs clients) pour pouvoir l'intégrer au document?

    Je précise (sinon c'était pas marrant!) que j'ai seulement un peu de bases au niveau du développement (on va dire l'algorithmique basique et simple), mais que j'ai bien du mal avec les langages orientés Web, y compris le HTML...
    Alors n'hésitez pas à simplifier, même à écrire ce qui vous paraît évident, ça m'aidera certainement.
    Vous pouvez même vous mettre au niveau "il faut que même ma grand-mère puisse le faire", je ne me vexerai pas

    Merci d'avance pour vos idées

  2. #2
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 47
    Par défaut
    En complément, j'ai trouvé un bout de code qui devrait (si j'ai bien compris) me récupérer l'heure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script>
      // Get current date and time
      var now = new Date();
      var datetime = now.toLocaleString();
     
      // Insert date and time into HTML
      document.getElementById("datetime").innerHTML = datetime;
    </script>
    Sauf que non, l'espace où je devrais avoir ça reste désespérément blanc.
    Est-ce qu'il faut que je l'adapte un peu en mettant par exemple var afficheHeure = document.getElementById("datetime").innerHTML = datetime; pour ensuite mettre mon affichage dans une balise du genre <xsl:value-of select=$afficheHeure/> ?

    Ou bien c'est inutile parce que ça veut dire que le mécanisme en action n'interprétera pas le script ?

    Merci

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 47
    Par défaut
    Une dernière idée avant de déclarer la journée cuite.

    J'ai trouvé sur Stack overflow quelqu'un qui conseille un bout de code XML pour récupérer la date et l'heure du système :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <datetime>
       <date>System.getDate()</date>
       <time>System.getTime()</time>
    </datetime>
    L'idée me plaît bien, et j'ai mis ce morceau de code dans un fichier datetime.xml

    J'imagine qu'il faut que j'enregistre datetime.xml sur le serveur, que j'ajoute une balise du genre <!ENTITY datetime SYSTEM "datetime.xml"> (dans le bloc <!DOCTYPE stylesheet []>), mais après, comment je fais pour afficher ça?
    Et surtout, est-ce que c'est une bonne idée?

    Merci

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Hello,

    c'est pas magique.

    - XSLT 1.0 ne définit pas de fonction pour ça
    - Tu n'as pas accès à XSLT 2.0+
    - Tu n'as pas accès à EXSLT
    - Tu n'as pas accès à l'extension via Java ni, je suppose, via aucun langage. Peut-être que ton ERP propose de programmer des extensions pour XSLT, voire qu'il offre déjà le nécessaire pour accéder à la date et heure actuelle, à vérifier, mais on le connaît pas ton ERP.

    Le code JavaScript que tu as essayé, je ne sais pas pourquoi il n'affiche rien, mais de toute façon il n'allait pas afficher la date et heure de la génération du document. Il allait afficher la date et heure actuelle de l'ordinateur qui ouvre la page HTML produite.

    Le truc XML proposé, je ne vois pas à quoi il correspond.

    Il y aurait trois approches envisageables qui restent :

    - passer des paramètres à la feuille XSLT. Quand ton ERP applique cette feuille, quelque chose lui dit de le faire, sur quel document l'appliquer, et où envoyer le résultat. En principe il devrait être possible quand tu indiques le XSLT à appliquer, de lui donner aussi des paramètres. Avec un peu de chance, tu pourrais faire en sorte que l'ERP passe la date et heure en paramètre.

    - créer un fichier, soit .xml soit .xslt, de sorte qu'il contienne la date et heure actuelle, avant d'appliquer la feuille XSLT, et faire en sorte que la feuille XSLT lise ce fichier, avec import ou document. Mais encore faut-il pouvoir créer ce fichier avec le bon contenu, et à un endroit que la feuille XSLT peut trouver.

    - faire en sorte que la feuille XSLT demande un fichier XML via document(), en trouvant ce document avec un URL http, qui renvoie un XML qui contient la date et heure en cours. En principe c'est imparable, sauf si l'utilisation d'URL externes est interdite par le moteur XSLT de l'ERP.

    Il serait quand même plus malin de demander au support de l'ERP comment avoir la date et heure en cours dans la transformation XSLT.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 47
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Hello,

    c'est pas magique.
    C'est bien ce que je craignais

    Citation Envoyé par thelvin Voir le message
    - XSLT 1.0 ne définit pas de fonction pour ça
    - Tu n'as pas accès à XSLT 2.0+
    - Tu n'as pas accès à EXSLT
    - Tu n'as pas accès à l'extension via Java ni, je suppose, via aucun langage. Peut-être que ton ERP propose de programmer des extensions pour XSLT, voire qu'il offre déjà le nécessaire pour accéder à la date et heure actuelle, à vérifier, mais on le connaît pas ton ERP.
    L'ERP s'appelle Technique, c'est un ERP spécifique pour les imprimeries.
    Et pour le coup, l'éditeur nous laisse un peu nous débrouiller avec les gabarits de documents à générer, mais je tenterai peut-être de voir si j'arrive à avoir des infos de leur côté pour les extensions.

    Citation Envoyé par thelvin Voir le message
    Le code JavaScript que tu as essayé, je ne sais pas pourquoi il n'affiche rien, mais de toute façon il n'allait pas afficher la date et heure de la génération du document. Il allait afficher la date et heure actuelle de l'ordinateur qui ouvre la page HTML produite.
    C'est justement ce que je cherchais, savoir à quelle date/heure on ouvre la page.
    Le fichier XML généré, on a déjà sa date de génération (qui correspond au moment où la personne qui a fait le dossier de fabrication l'a refermé), mais ça ne nous dit pas à quelle date/heure on a imprimé ledit document.

    J'ai eu un exemple sur un dossier, la dernière modification du dossier était le 06/09.
    J'ai imprimé le fichier PDF mercredi matin, la date imprimée sur le PDF était le 6, pas le 11.
    Et ce que je cherche à faire, c'est d'afficher la date d'impression, si par exemple je réessaie lundi je voudrais qu'il me dise le 16/09

    Citation Envoyé par thelvin Voir le message
    Le truc XML proposé, je ne vois pas à quoi il correspond.
    Donc j'abandonne la piste, ça m'évitera de faire une c0nnerie.

    Citation Envoyé par thelvin Voir le message
    Il y aurait trois approches envisageables qui restent :

    - passer des paramètres à la feuille XSLT. Quand ton ERP applique cette feuille, quelque chose lui dit de le faire, sur quel document l'appliquer, et où envoyer le résultat. En principe il devrait être possible quand tu indiques le XSLT à appliquer, de lui donner aussi des paramètres. Avec un peu de chance, tu pourrais faire en sorte que l'ERP passe la date et heure en paramètre.
    Encore faut-il que j'arrive à obtenir de l'éditeur un mode opératoire pour envoyer la date et l'heure système en paramètre au XSLT, ça risque d'être funky

    Citation Envoyé par thelvin Voir le message
    - créer un fichier, soit .xml soit .xslt, de sorte qu'il contienne la date et heure actuelle, avant d'appliquer la feuille XSLT, et faire en sorte que la feuille XSLT lise ce fichier, avec import ou document. Mais encore faut-il pouvoir créer ce fichier avec le bon contenu, et à un endroit que la feuille XSLT peut trouver.
    Pour avoir l'endroit où la feuille XSLT peut le trouver, c'est pas un problème puisque ma feuille en appelle d'autres.

    En revanche, comment je peux faire pour que le fichier XML ou XSLT se mette à jour (s'il existe une commande qui récupère la date et l'heure au moment de son exécution, ça me va, si pas, je peux aussi accepter qu'on mette à jour une fois par heure, je n'ai pas besoin d'une précision à la milliseconde)?
    Vu que je n'ai pas accès à XSLT 2, je ne peux pas récupérer current-date() ?
    Et XML permet-il de récupérer la date et l'heure système?

    [QUOTE=thelvin;12043652]
    - faire en sorte que la feuille XSLT demande un fichier XML via document(), en trouvant ce document avec un URL http, qui renvoie un XML qui contient la date et heure en cours. En principe c'est imparable, sauf si l'utilisation d'URL externes est interdite par le moteur XSLT de l'ERP.[QUOTE=thelvin;12043652]
    Là j'avoue que je ne sais pas
    Quand tu parles d'URL externes, ça inclut aussi une URL sur le réseau local (genre http://192.168.1.1/partage/date.xml) ?
    Si jamais, je peux tenter la chose.
    Le serveur sur lequel sont stockés les fichiers .xsl fait également serveur Web, d'où ma question sur les URL du réseau local.
    Juste, comme je pars de très loin sur XML et XSLT, j'avoue que je n'ai jamais utilisé la fonction document(), et je me demande dans ce cas comment récupérer la date et l'heure pour les injecter dans un fichier XML...
    Sachant qu'en plus, l'ERP accède aux fichiers de modèles via un chemin UNC du type \\serveur\partage$\dossier, pas sûr que le moteur IIS permette d'atteindre ce dossier partagé pour y enregistrer le fichier XML

    Citation Envoyé par thelvin Voir le message
    Il serait quand même plus malin de demander au support de l'ERP comment avoir la date et heure en cours dans la transformation XSLT.
    ça peut se tenter, mais encore une fois je ne suis pas sûr de pouvoir avoir une réponse.
    L'historique est que mes prédécesseurs ont dû se débrouiller seuls pour créer les templates.

    En tout cas, merci pour ces premières pistes, si on peut creuser le sujet du fichier XML ou XSLT, ou le lien externe, je suis preneur

    Et mes excuses pour le temps de réponse, ça me donne l'impression que j'ai laissé l'image du type qui a posé sa question et qui est parti...

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Citation Envoyé par Sylv_62 Voir le message
    J'ai eu un exemple sur un dossier, la dernière modification du dossier était le 06/09.
    J'ai imprimé le fichier PDF mercredi matin, la date imprimée sur le PDF était le 6, pas le 11.
    Et ce que je cherche à faire, c'est d'afficher la date d'impression, si par exemple je réessaie lundi je voudrais qu'il me dise le 16/09
    ... Mais enfin...

    XSLT s'occupe de la transformation, pas de l'impression. Ce que tu demandes n'a rien à voir avec XSLT voyons !

    Ensuite tu nous parles de PDF et de HTML. ... Tu comprends que ce n'est pas la même chose ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 47
    Par défaut
    Citation Envoyé par thelvin Voir le message
    ... Mais enfin...

    XSLT s'occupe de la transformation, pas de l'impression. Ce que tu demandes n'a rien à voir avec XSLT voyons !
    Si XSLT avait pu me donner la date et l'heure de la transformation, ça m'aurais bien avancé
    Mais ce n'est possible qu'avec XSLT 2+ je crains

    Citation Envoyé par thelvin Voir le message
    Ensuite tu nous parles de PDF et de HTML. ... Tu comprends que ce n'est pas la même chose ?
    Honnêtement, je n'ai toujours pas compris pourquoi j'ai dans les premières lignes du template <xsl:output method="html"/> alors que l'ERP génère un fichier PDF...

    Je pense que nous allons passer le sujet en résolu car la solution ne se trouve pas côté XSLT, peut-être plutôt côté éditeur.
    J'ai tenté parce que c'était plus souple en interne de pouvoir modifier les templates en .xsl ou en .xml que de contacter l'éditeur qui considérera côté support que ce n'est pas prioritaire (ce que je comprends, puisque ça n'empêche pas de produire).

Discussions similaires

  1. Recuperer la date sans l'heur dans un champ datetime
    Par bob33 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 22/06/2010, 12h59
  2. [FAQ] Comment récupérer la date et l'heure courante
    Par Baptiste Wicht dans le forum Vos Contributions VBScript
    Réponses: 0
    Dernier message: 15/11/2007, 10h35
  3. Réponses: 2
    Dernier message: 13/11/2007, 10h14
  4. [c#] comment récuperer la date et l'heure en cours
    Par juloul dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/10/2005, 16h43
  5. Comment récuperer une date depuis une chaine?
    Par shopoto dans le forum ASP
    Réponses: 4
    Dernier message: 12/05/2004, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo