Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Forms
Forms Forum d'entraide sur Oracle Forms
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/04/2007, 17h38   #1
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 133
Points : 33
Points : 33
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??
kikouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 17h42   #2
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
ç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
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 18h05   #3
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

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

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
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 :
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
  );
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 18h29   #4
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 133
Points : 33
Points : 33
Merci à vous deux..

j'attend avec impatience la suite...
kikouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 21h51   #5
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Moi aussi. Cette solution est réellement interressante
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 22h07   #6
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

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

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
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 :
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 :
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 :
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
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 13h27   #7
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 133
Points : 33
Points : 33
merci bcp,

mais je vais juste utiliser une progression simple comme dans l'aide de Oracle/forms6i...

Merci encore une fois...
kikouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 14h55   #8
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

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

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

Une petite remarque :

De préference rajouter un dbms_lock.sleep(5) ou dbms_lock.sleep(10) pour Laisser un peu de temps au serveur d'executer le job lancé, sinon ça risque que je rentre dans ma boucle avant que le serveur commence à executer le job
Code :
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
43
begin 
	 dbms_scheduler.create_job(
    job_name   => 'APEX__JOB_LANG_LAUFEND'
   ,job_type   => 'stored_procedure'
   ,job_action => 'lang_laufend'
   ,start_date => SYSDATE
   ,enabled    => TRUE
  );
 dbms_lock.sleep(5) 
 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;
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 10h25   #9
Invité régulier
 
Inscription : juillet 2007
Messages : 30
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 30
Points : 6
Points : 6
Est ce qu'on peut appeler une procedure avec parametres dans le job?
Comment?
mnbcmnbc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 15h51   #10
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

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

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

Tu trouveras un exemple dans ce lien :
http://schelabi.developpez.com/progressbar/
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 18h14   #11
Nouveau Membre du Club
 
Inscription : juillet 2006
Messages : 133
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 133
Points : 33
Points : 33
Salam,

Merci bcp...
kikouu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h54.


 
 
 
 
Partenaires

Hébergement Web