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

4D Discussion :

Démarrage automatique de méthode


Sujet :

4D

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Points : 6
    Points
    6
    Par défaut Démarrage automatique de méthode
    Bonjour,
    Dans le cadre du développement d'une gestion commerciale que j'ai réalisée pour un client, je souhaiterai pouvoir faire s'exécuter automatiquement une méthode (envoi de données par email en l'occurence - méthode déjà écrite) sur le Serveur (4D Server ouvert en permanence) à une heure donnée (exemple : 21:00:00 heures) tous les soirs.
    Si quelqu'un a dèjà développé ce type de cas, merci de me fournir qq indications pour ce traitement.
    Cordialement.

  2. #2
    Membre averti
    Homme Profil pro
    Bientôt retraité
    Inscrit en
    Juillet 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Bientôt retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 312
    Points : 385
    Points
    385
    Par défaut
    Salut, voici une piste:
    première étape lancer une procédure stockée au démarrage du serveur.
    Exemple :
    C_ENTIER LONG(<>NumProcMaj;<>StopMaj)
    <>StopMaj:=0
    <>NumProcMaj:=Nouveau process("P_ScheduleMaj";64000;"TravauxDeLanuit")
    Voici ce que fais la methode P_ScheduleMaj.

    C_HEURE(HeureDeb;HeureDebTotale)
    ENDORMIR PROCESS(Numero du process courant;100)
    Si (<>NumProcMaJ#0)
    C_ENTIER LONG($Duree;$Heure;$Minute;$Seconde)
    C_TEXTE($Temps)
    $Temps:=Chaine(?21:00:00?-Heure courante)**`le temps qu'il reste jusqu'a 21h00
    **`je découpe le temps restant en heure, minute et seconde. Je rajoute 1h et une minute car
    **`mon traitement doit touner après minuit.
    $Heure:=Num(Sous chaine($Temps;1;2))**`les heures
    $Minute:=Num(Sous chaine($Temps;4;2))**`*les minutes
    $Seconde:=Num(Sous chaine($Temps;7;2))**`les secondes
    $Duree:=(($Heure*216000)+($Minute*3600)+($Seconde*60))**`je calcule en ticks (1/60 de seconde)

    ENDORMIR PROCESS(<>NumProcMaJ;$Duree)**`je suspend pendant cette durée

    Repeter
    ************** Les travaux

    $Duree:=12*216000
    ENDORMIR PROCESS(Numero du process courant;$Duree)

    $Temps:=Chaine(?21:00:00?-Heure courante)**`le temps qu'il reste jusqu'a 21h00
    **`je découpe le temps restant en heure, minute et seconde. Je rajoute 1h et une minute car
    **`mon traitement doit touner après minuit.
    $Heure:=Num(Sous chaine($Temps;1;2))**`les heures
    $Minute:=Num(Sous chaine($Temps;4;2))+1**`*les minutes
    $Seconde:=Num(Sous chaine($Temps;7;2))**`les secondes
    $Duree:=(($Heure*216000)+($Minute*3600)+($Seconde*60))**`je calcule en ticks (1/60 de seconde)
    ENDORMIR PROCESS(<>NumProcMaJ;$Duree)**`je suspend pendant cette durée

    Jusque (<>StopMaj=1)

    Fin de si

    Après le tratement, j'endors le process pendant 12 heure pour éviter des problèmes de calculs du temps. Ex sir il est 11h du mat est que je calcul le temps restant jusqu'à 7h sans (?07:00:00?-heure courante) le résultat sera -04 car il prend le 7h du jour courant.

    Il y a probablement d'autres moyen mais celui-ci fonctionne.

    A +

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 94
    Points : 114
    Points
    114
    Par défaut
    Bonjour,

    Par rapport à MichelS, et si on a pas besoin que l'heure de début soit strictement 21:00, on peut faire un peu à la bourrin : le process qui exécute la tâche se contente de se réveiller toutes les 5 minutes. Il regarde l'heure, et s'il est 21:00 ou un peu plus, il lance le travail. Ca donnerait ça :

    ` Methode qui ance le process.
    ` * signifie : "ne pas lancer si existe déjà" (basé sur le nom)
    ` À installer dans la méthode base "Sur démarrage serveur"
    ` Si on veut lancer cela depuis 4D client, remplacer Nouveau process
    ` par Executer sur serveur
    $L_ignore:=Nouveau process("Envois_21h00";96*1024;"Envois vers 21H00";*)


    ` Méthode : Envois_21h00
    C_DATE($D_today)
    C_ENTIER LONG($L_kTICKS_5_MINUTES)
    `
    $L_kTICKS_5_MINUTES:=60*60*5
    `
    Repeter
    ` Endormir 5 minutes
    ENDORMIR PROCESS(Numero du process courant;$L_kTICKS_5_MINUTES)
    ` On est reveillé. S'il est 21h00 passée, on fait les envois,
    ` mais il faut les faire une seule fois. On sait qu'on les a déjà fait
    ` si $D_today = Date du jour
    Si (Heure courante>=†21:00:00†)
    Si ($D_today#Date du jour)
    ` OK, faire les envois
    Methode_qui_fait_les_envois
    ` Changer le flag, pour ne pas faire
    ` refaire les envois toutes les 5 minutes
    ` jusqu'à minuit ;-)
    $D_today:=Date du jour
    Fin de si ` Si ($D_today#Date du jour)
    Fin de si ` Si (Heure courante>=†21:00:00†)
    Jusque (ici_condition_de_fin)

    (une procédure stockée qui se réveille toutes les 5 minutes pour se rendormir ne consomme aucun temps cpu décelable)

    A+

    Thibaud

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Points : 6
    Points
    6
    Par défaut Bonne piste !
    Bonjour,

    Merci à tous les deux pour la possibilité d'automatisation à une heure H de mon traitement. Les 2 sont intéressantes et cela me conforte dans l'idée fausse que j'avais que ce type de process ralentisse mon CPU lorsqu'il se réveille pour tester l'heure... Je pense que je peux même faire varier le réveil à 30 mn car je ne suis pas à 5min près...
    Merci encore à MichelS et Thibaud.
    A+
    Cordialement.

  5. #5
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Juin 2006
    Messages : 72
    Points : 95
    Points
    95
    Par défaut TEmporisation
    Bonsoir à tous,

    pour ma part, j'utilise ceci qui ne permet pas de fixer une heure précise, mais me permet de recaler sur un démarrage aux environ de 6h00 (à adapter à ton besoin):

    **`permet de savoir quel est le décalage entre maintenant et 6h00 du mat le lendemain
    $DecalageHeure:=†30:00:00†-Heure courante**`30 heures = 24 H + 6 heures
    $NbHeures:=Num(Sous chaine(Chaine($DecalageHeure;"hh:mm");1;2))

    $Decalage:=$NbHeures*60*60*60**`N heures x 60 minutes x 60 secondes x 60 ticks

    ENDORMIR PROCESS(Numero du process courant;$Decalage)

    il suffit d'affiner au niveau des minutes pour faire quelque chose de précis.

    A+

    Denis

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Démarrage automatique des services
    Par barrique dans le forum Windows XP
    Réponses: 2
    Dernier message: 29/07/2008, 09h40
  2. démarrage automatique d'application
    Par velociraptor5679 dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 07/06/2006, 10h03
  3. [OEM] démarrage automatique
    Par lido dans le forum Oracle
    Réponses: 1
    Dernier message: 02/01/2006, 11h07
  4. [Windows XP][Service] Pb démarrage automatique
    Par joefou dans le forum Windows XP
    Réponses: 5
    Dernier message: 14/10/2005, 09h03
  5. [Windows XP][Démarrage]Démarrage automatique d'un programme
    Par Jean Claude90 dans le forum Windows XP
    Réponses: 5
    Dernier message: 02/03/2005, 12h55

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