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 :

probleme PL/SQL sous forms 10g


Sujet :

Forms Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut probleme PL/SQL sous forms 10g
    Bonjour,

    bien voila mon pb. J'ai ce code qui doit interdire à tout utilisateur n'ayant pas comme activité 'ADMINISTRATEUR', le droit d'enregistrer des données d'un écran forms en appuyant sur un bouton 'enregistrer'. le trigger se déclenche à l'aide de l'événement when_button_pressed.
    le code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DECLARE
    alerte number;
    monactivite utilisateur.role%type;
    uti_record utilisateur%type;
     
    BEGIN
    If (:global.monactivite ='ADMINISTRATEUR') then commit_form; 
    endif;
     
    if not (:global.monactivite='ADMINISTRATEUR') then set_alert_property ('aleror',alert_message_text_,'vous ne pouvez effectuer cette opération');
    alerte:=show_alert ('aleror');
    raise_form_trigger_failure;
    endif;
    end;
    L'écran se compile correctement, mais le code n'empèche pas l'action commit pour les utilisateurs non 'ADMINISTRATEUR'.
    Pouvez-vous m'aider svp..............
    ps: BD oracle 9i, forms 10g.

  2. #2
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Je me demandais s'il ne fallait pas poster sur le forum forms, mais bon je ne suis pas trop sur que ça n'ait rien à voir avec pl/sql.

    Une autre option serait de désactiver ou d'inhiber le bouton "enregistrer" de ton formulaire à l'affichage de façon à ce que l'utilisateur ne puisse pas cliquer dessus s'il n'est pas l'admin

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Merci pour la repponse je vais essayer ça.............

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    peux tu me dire comment désactiver mes trigger en fonction de mes utilisateurs, g essayé mais ça ne passe pas.............
    je suis vraiment dans le besion please help.................

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Personne n'a une idée pour m'aider à resoudre ce pb.
    peut-on m'éclairer sur la façon dont je peux regler ce pb?
    Peut-on inhiber le trigger en fonction des utilisateurs?
    svp de l'aide

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Merci d'éditer votre message pour mettre en forme le CODE (icone #), et de fermer le sujet dans PL/SQL

    2 choses : Pour débugger savoir par où passe le programme, mettez des traces. Que contient la global ?
    Pourquoi gérer le IF NOT ? Si le champ est NULL ça passera pas, et puis trop de code c'est pas bon.
    Ca compile bien tout ça (endif; raise_form_trigger_failure; ) ?

    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
     
    message('Global:'|| :global.monactivite ||':');
    message(' ');
     
    If  :global.monactivite ='ADMINISTRATEUR'
    THEN 
      message('On enregistre');
      message(' ');
       commit_form;
    ELSE
      message('On enregistre pas');
      message(' ');
    set_alert_property ('aleror',alert_message_text,'vous ne pouvez effectuer cette opération');
    alerte:=show_alert ('aleror');
    raise form_trigger_failure;
    END IF;

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Bonjour McM et surtout merci pour le code.
    Il se compile correctement, cependant il n'empêche toujours pas l'insertion d'information d'un utilisateur n'ayant pas le role ADMINISTRATEUR.

    :global.monactivite:=uti_record.role;

    De plus, ni le message ni l'alerte n'apparaisse.

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Ici, je vous montre le code de connexion qui permet à un utilisateur d'entrer dans l'application:
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     
     
    DECLARE
    	alerte NUMBER;
    	CURSOR rechUtilisateur IS
    	SELECT * FROM utilisateurs;
    	trouve NUMBER(1):=0;
    	monActivite utilisateurs.role%TYPE;
            uti_record    utilisateurs%rowtype;
     
    BEGIN
    	 IF ((:nom IS NULL))
    	 THEN set_alert_property('alerror',alert_message_text,'Vous devez   saisir un nom ...');
    	     	alerte := show_alert('alerror');
    	     	raise form_trigger_failure;
    	 END IF;
        	 IF ((:mot_passe IS NULL))
    	 THEN set_alert_property('alerror',alert_message_text,'Vous devez saisir un mot de passe ...');
    	     	alerte := show_alert('alerror');
    	     	raise form_trigger_failure;
     	 END IF;
    	  	 IF NOT rechUtilisateur%ISOPEN
     	 THEN OPEN rechUtilisateur;
     	 END IF;
     	 LOOP
     	 	  FETCH rechUtilisateur INTO uti_record;
     	 	  EXIT WHEN ((rechUtilisateur%NOTFOUND) OR (trouve=1));
     	 	  IF ((:nom = uti_record.nom) AND (:mot_passe = uti_record.mot_passe))
     	 	  	THEN trouve := 1;
     	 	  	     :GLOBAL.monActivite := uti_record.role;
     	 	  END IF;
     	 END LOOP;
     	 CLOSE rechUtilisateur;
     	 IF (trouve = 0)
    	 THEN set_alert_property('alerror',alert_message_text,'Nom utilisateur et/ou mot de passe incorrect...');
    	     	alerte := show_alert('alerror');
    	     	raise form_trigger_failure;
     	 END IF;
     	IF (:GLOBAL.monActivite = 'ADMINISTRATEUR') 
     	 THEN 
     	 new_form('C:\CRM\Forms\menu');	
     
    	 ELSIF (:GLOBAL.monActivite = 'DIRECTEUR') 
     	 THEN 
     	new_form('C:\CRM\Forms\menu');	
              ELSIF (:GLOBAL.monActivite = 'AGENTSE') 
     	 THEN 
     	new_form('C:\CRM\Forms\menu');	
     	 ELSIF (:GLOBAL.monActivite = 'AGENTAC') 
     	 THEN 
      	new_form('C:\CRM\Forms\menu');	
     	ELSIF (:GLOBAL.monActivite = 'AGENTDCM') 
     	 THEN 
     	new_form('C:\CRM\Forms\menu');	 	
     	END IF; 
     
    END;
    Ce que je voudrais faire par la suite c'est sécuriser les écrans de l'application en fonction des diffrentes activités.
    Mais le code se plante à chaque fois qu'en il s'agit empêcher un commit_form; en fonction de l'utilisateur.

  9. #9
    Expert éminent sénior
    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
    Points : 11 862
    Points
    11 862
    Par défaut
    Il existe un mécanisme très simple pour cela. Il s'appelle "RÔLES".
    Créez ces rôles dans votre base et déclarez-les dans vos menus. Forms fera tout le reste pour vous.

    Si par contre tous vos utilisateurs se connectent avec le même compte générique, gérez cela au moment ou vous contrôlez le user dans votre table.
    Créez un trigger KEY-COMMIT de niveau form et vérifiez la globale dans ce trigger pour déclencher ou non l'instruction commit_form.

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Bonjour Monsieur,
    Dois-je associer la recherche obtenue à l'aide de mon curseur à key-commit?

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Pour récapituler,
    l'application du mécanisme de ROLES dans mon cas n'est pas possible. je ne dispose pas d'un menu permettant d'effectuer des actions d'insert etc.....
    J'ai créé un block comportant des boutons asscoiés à l'evenement when-button-pressed qui permet d'effectuer les actions suivantes:
    afficher,
    supprimer,
    enregistrer,
    etc....

    Etant donné que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ......
    IF (:GLOBAL.monActivite = 'ADMINISTRATEUR') 
     	 THEN  	 
       new_form('C:\CRM\Forms\menu');
    l'ecran utilisateur est un sous-menus du menu principal appelé par cette condition.
    Maintenant je voudrais pouvoir autoriser ou refuser l'execution de ces actions en fonction de l'activité (ou role) d'un utilisateur.

  12. #12
    Expert éminent sénior
    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
    Points : 11 862
    Points
    11 862
    Par défaut
    L'idéal est de griser les boutons auxquels l'utilisateur n'a pas droit. (certains préfèrent même les supprimer). Donc, au chargement de la forme (When-New-Form-Instance), vous pouvez les griser (Set_Item_Property()) en fonction du contenu de votre variable globale.

  13. #13
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Désolé d'arriver un peu en retard, mais j'aimerais bien savoir comment t'as résolu ton problème finalement.

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    salut,
    Je pensais l'avoir résolu mais en fait ça n'a pas marché.
    Ce que je cherche à faire maintenant c'est grisé les boutons ou les écrans ne devant subir des modification venant uniquement de l'administrateur.

  15. #15
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Citation Envoyé par yanchoux Voir le message
    peux tu me dire comment désactiver mes trigger en fonction de mes utilisateurs, g essayé mais ça ne passe pas.............
    je suis vraiment dans le besion please help.................
    Je ne sais pas utiliser forms, mais je faisais ça avec VB et JAVA. Lors du chargement d'une fenetre, je faisais un test pour savoir quel est l'user connecté. Et selon l'user, j'active ou inhibe les objets (bouton, menu, etc.) que je veux.

    C'est pas très compliqué je pense, poste sur le forum forms je suis sûr que tu auras une reponse dans les delais raisonnables.

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

Discussions similaires

  1. Problème de menu sous forms 10g
    Par ilboudfr dans le forum Forms
    Réponses: 2
    Dernier message: 07/05/2010, 13h08
  2. probleme requete sql sous oracle 8
    Par bouclette dans le forum Oracle
    Réponses: 4
    Dernier message: 06/12/2006, 17h04
  3. Problème ouverture de document sous forms 10G
    Par squallJ dans le forum Forms
    Réponses: 1
    Dernier message: 22/08/2006, 14h27
  4. Recuperer Nom_machine sous Forms 10G
    Par Challenger dans le forum Forms
    Réponses: 10
    Dernier message: 31/05/2005, 17h06
  5. résultat de requêtte sql sous form de table
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 5
    Dernier message: 08/03/2004, 15h19

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