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

Forms Oracle Discussion :

[Forms] Progress Bar


Sujet :

Forms Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 133
    Par défaut [Forms] Progress Bar
    Salam tout le monde,

    Voilà j'ai un programme sur forms qui fait plusieurs traitements sur des BD et ça prend pas mal de temps..
    Je voudrais utiliser une barre de progression pour que l'utilisateur puisse suivre la progression à chaque instant.

    Pourriez vous m'aider SVP??

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    ça n'est vraiment pas facile car Forms perd la main pendant toute la durée de la procédure. Ce qui revient à afficher 0% au lancement de la proc et 100% au retour

  3. #3
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Citation Envoyé par SheikYerbouti
    ça n'est vraiment pas facile car Forms perd la main pendant toute la durée de la procédure. Ce qui revient à afficher 0% au lancement de la proc et 100% au retour
    Je ne suis pas d'accord avec vous Mr shiek, on resoud ce problème en lancant
    la procèdure avec dbms_scheduler.create_job et dans ma forme je continue a suivre la progression de la prcèdure dans la vue V$session_longops avec une boucle et aussi dans la même forme j'ai même pas besoin de faire open_form .

    Je travaille sur un projet de progressbar, je l'ai pas encore terminé à 100%, des qu'il sera terminé je vais le poster sur le forum.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dbms_scheduler.create_job(
        job_name   => 'APEX__JOB_LANG_LAUFEND1'
       ,job_type   => 'stored_procedure'
       ,job_action => 'lang_laufend'
       ,start_date => sysdate
       ,enabled    => true
      );

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 133
    Par défaut
    Merci à vous deux..

    j'attend avec impatience la suite...

  5. #5
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Moi aussi. Cette solution est réellement interressante

  6. #6
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    salut,

    Ce lien m'a beaucoup aidé a réaliser ma progressBar, malheureusement il est en allemand mais le code qui a à l'intérieur est très intèressant
    http://www.oracle.com/global/de/comm...obs/index.html
    la procedure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    CREATE OR REPLACE procedure lang_laufend as
       rindex pls_integer := -1;
       slno   pls_integer;
     begin
       dbms_application_info.set_session_longops(
         RINDEX      => rindex
        ,SLNO        => slno
        ,OP_NAME     => 'APEX__JOB_LANG_LAUFEND'
        ,SOFAR       => 0
        ,TOTALWORK   => 60
       );
       for i in 1..10 loop
         DBMS_LOCK.SLEEP(6);
         dbms_application_info.set_session_longops(
           RINDEX      => rindex
          ,SLNO        => slno
          ,OP_NAME     => 'APEX__JOB_LANG_LAUFEND'
          ,SOFAR       => (i * 6)
          ,TOTALWORK   => 60
         );
       end loop;
     end;
    /
    J'ai adapté le code qui existe dans l'article a mes besoin ( forms)parceque lui il utilise JAVAscript,
    dans ma forms j'ai mis le code suivant
    when_new_form_instance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    set_item_property('blo_progress.progressbar',width,0);
    Dans mon block j'ai un boutton et text_item qui represente la progressBAR. Le boutton appelle la procedure via le dbms_scheduler
    et il contient aussi une boucle qui me permet de suivre la progression de la procedure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    begin 
    	 dbms_scheduler.create_job(
        job_name   => 'APEX__JOB_LANG_LAUFEND'
       ,job_type   => 'stored_procedure'
       ,job_action => 'lang_laufend'
       ,start_date => SYSDATE
       ,enabled    => TRUE
      );
     end ;
     
    declare
      v_percent number:=0;
    begin
     
      set_item_property('blo_progress.progressbar',width,	0);
    	v_percent :=0;
    	pause;
    	loop
      	exit when v_percent =100;
        select (sofar / totalwork) * 100
          into v_percent
        from v$session_longops
        where opname = 'APEX__JOB_LANG_LAUFEND' and sofar < totalwork;
       -- message(v_percent);pause;
        :blo_progress.percent:= v_percent||'%';
        set_item_property('blo_progress.progressbar',width,	round( v_percent,2));
        synchronize;
        dbms_lock.sleep(2);
    	end loop;
     
    	 exception
        when NO_DATA_FOUND then
          v_percent := -1;
      	  set_item_property('blo_progress.progressbar',width,	100);
    		  :blo_progress.percent:= '100'||'%';
        when TOO_MANY_ROWS then
          v_percent := -1;
       	  DBMS_SCHEDULER.drop_job (job_name => 'APEX__JOB_LANG_LAUFEND',FORCE=> true) ;
     
     
    end;
    Remarque : dbms_application_info.set_session_longops sert a créer une entrée dans la vue v$session_longops mais je ne l'ai pas encore essayé avec une procedure sans dbms_application_info.set_session_longops

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

Discussions similaires

  1. [Débutant] BackgroundWorker pour un Progress Bar et les contrôls d'une autre form
    Par abd75web dans le forum VB.NET
    Réponses: 13
    Dernier message: 16/06/2014, 12h28
  2. [RichFaces] Progress bar sous forme d'image
    Par FrenchFrogger dans le forum JSF
    Réponses: 0
    Dernier message: 22/07/2009, 16h48
  3. [Forms][debutant] progress bar & Forms
    Par Lust14 dans le forum Forms
    Réponses: 3
    Dernier message: 26/11/2006, 19h19
  4. [FORMS] PJC Progress Bar
    Par MxPx_23 dans le forum Oracle
    Réponses: 6
    Dernier message: 14/12/2005, 21h06

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