lundi 16 août 2010

Sécuriser une table.

Il est possible qu'on crée une procédure ainsi qu'un déclencheur pour pouvoir sécuriser une table (exemple la table employees du schéma SCOTT ou HR).

Voici le code de la procédure:

CREATE OR REPLACE PROCEDURE secure_dml
IS
BEGIN
IF TO_CHAR (SYSDATE, 'HH24:MI') NOT BETWEEN '08:00' AND '18:00'
OR TO_CHAR (SYSDATE, 'DY') IN ('SAT', 'SUN') THEN
RAISE_APPLICATION_ERROR (-20205,
'Vous avez le droit de manipuler la table EMPLOYE entre les heures du travail ');
END IF;
END secure_dml;
/

Et le déclencheur pour la procédure:

CREATE OR REPLACE TRIGGER secure_employees
BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
-- Appel de la procédure
secure_dml;
END secure_employees;

Exemple: On veut faire la mise à jour du salaire pour un employé numéro 204:

UPDATE EMPLOYEES
SET SALARY = SALARY * 1.2
WHERE EMPLOYEE_ID=204;

Voici le message d'erreur de PL/SQL Developer:



Abed

dimanche 8 août 2010

Mise en place d'un JavaBean dans Forms 10g.

Pour pouvoir utiliser des javabeans dans Oracle Forms 10g, on doit y aller au site http://forms.pjc.bean.over-blog.com/10-index.html pour télécharger un JavaBean qu'on va l'utiliser dans notre application (module Forms), c'est à dire qu'il faudrait télécharger le fichier JAR (showmessage.jar).

Donc, on va mettre en place un JavaBean de type SHOWMESSAGE à la manière du Java (voir l'image).



Après le téléchargement du fichier JAR, vous devez le placer dans le répertoire approprié de Forms (C:\DevSuiteHome_1\forms\server\formsweb.cfg).


Copier le fichier JAR dans le dossier JAVA de Forms.

Voici les étapes pas à pas pour la mise en place de ce JavaBean dans Oracle FORMS 10g.
  • Créer un module (donner un nom quelconque).
  • Créer un canevas (nommer-le CVSM).
  • Créer un block de contrôle (on va le nommer CTRL).
  • Créer un bouton sur le canevas et changer le Label à 'Afficher un message de type Java).
  • Créer un Bean sur le canevas et changer les positions (mettre 1 partout pour qu'il ne sera pas visible sur le canevas) et nommer-le SHOW



Et pour le bouton et le Bean sur le canevas, voici l'image



On voit ici la flèche qui représente le bean qu'on a placé sur le canevas avec les positions 1 (fenêtre propriété de bean - voir l'image).



  • Mettre la classe du BEAN en allant à la propriété de ce dernier (oracle.forms.fd.ShowMessage- voir l'image)

  • Créer une unité de programme SHOWMESSAGE.

  • Cliquer sur ok pour taper le code suivant:
PROCEDURE showmessage
(
PC$Bean IN Varchar2,
PC$Text IN Varchar2,
PC$Title IN Varchar2 DEFAULT NULL,
PC$Icon IN Varchar2 DEFAULT 'P',
PN$Max IN NUMBER DEFAULT 150
) IS

LN$Slices Pls_Integer := 1 ;
LN$Rest Pls_Integer ;
LN$Pos Pls_Integer := 1 ;

BEGIN

-- Clear text --
Set_Custom_Property( PC$Bean, 1, 'CLEAR', '' ) ;

-- Set Title --
If PC$Title IS NOT NULL Then
Set_Custom_Property( PC$Bean, 1, 'SETTITLE', PC$Title ) ;
End if ;
-- Set icon --
If Upper( PC$Icon ) IN ('I','E','P','W') Then
Set_Custom_Property( PC$Bean, 1, 'SETICON', Upper( PC$Icon ) ) ;
End if ;
-- Set max line size --
If PN$Max IS NOT NULL Then
Set_Custom_Property( PC$Bean, 1, 'SETLINESIZE', To_Char( PN$Max ) ) ;
End if ;
-- Set text --
If PC$Text IS NOT NULL Then
If LENGTH( PC$Text ) > 1000 Then
LN$Slices := LENGTH( PC$Text ) / 1000 ;
LN$Rest := MOD( LENGTH( PC$Text ), 1000 ) ;
IF LN$Rest > 0 THEN LN$Slices := LN$Slices + 1 ; END IF ;
End if ;
FOR i IN 1..LN$Slices LOOP
message('.', no_acknowledge);
Set_Custom_Property( PC$Bean, 1, 'SETTEXT', SUBSTR( PC$Text, LN$Pos, 1000 ) ) ;
LN$Pos := LN$Pos + 1000 ;
END LOOP ;
End if ;
-- Show text --
If PC$Text IS NOT NULL Then
Set_Custom_Property( PC$Bean, 1, 'SHOW', '' ) ;
End if ;

END;

  • Compiler la procédure.
  • Créer un SmartTriggers pour le bouton en cliquant sur le bouton droit de la souris (trigger WHEN-BUTTON_PRESSED)


  • Mettre ce code : ShowMessage('CTRL.SHOW',' Suppression effectuée avec succès...','Message','I');
  • Ceci est un appel de la procédure SHOWMESSAGE en utilisant le Bean qui est placé sur le canevas.
  • Compiler le code PL/SQL.
  • Compiler le module et il va vous donner ce résultat en cliquant sur le bouton:


Abed

lundi 2 août 2010

Utiliser une bibliothèque d'objets dans Oracle Forms 10g.

Pour utiliser les mêmes alertes dans les modules sans être recrée les mêmes objets, on doit créer une bibliothèque d'objets qui regroupe tous les objets qu'on a besoin.

Exemple, si on veut utiliser la même alerte dans plusieurs modules, on doit procéder les étapes suivantes:

  • Créer une bibliothèque d'objet en allant dans Forms en créant un nouveau module, puis positionner sur le noeud Bibliothèque d'objets, ensuite cliquer sur (+) en haut pour créer l'objet.


  • Renommer l'objet (exemple LIBRARY)


  • Cliquer sur le menu Outils - Bibliothèque d’objets. Vous allez voir apparaître 2 onglets par défaut:


  • En utilisant les propriétés (F4) de chaque onglet au niveau du navigateur (noeud bibliothèque), renommer les onglets vers des noms plus descriptifs:


  • On fait la même chose pour le deuxième onglet (exemple Attributs visuels, mais dans notre cas, on va utiliser uniquement l'objet ALERTE).
  • Il nous reste maintenant qu'a remplir l'onglet avec l'objet.
  • Créer l'objet ALERTE

  • Créer un groupe d'objets et nommer-le GRP_ALERTE


  • Transférer l'alerte déjà créée vers le groupe d’objet GRP_ALERTE en sélectionnant puis glisser l'alerte.


  • L'objet en question contient maintenant une alerte de type STOP.
  • Ajouter le groupe d'objet dans la bibliothèque en sélectionnant le groupe GRP_ALERTE et en étant sur que la bibliothèque est visible avec l’onglet destination (dans ce cas l’onglet des objets de type ALERTES), glisser et déposer l’objet GRP_ALERTE dans l’onglet

  • On voit bien que l'objet GRP_ALERTE est dans la bibliothèque.
  • On va sauvegarder la bibliothèque pour la réutiliser dans notre application.
  • Se positionner sur la bibliothèque au niveau du noeud BIBLIOTHEQUE
  • Cliquer sur le menu FICHIER puis SAUVEGARDER SOUS…
  • Sélectionner le type Bibliothèque d’objets (*.olb) et taper le nom de votre bibliothèque. Dans notre cas, le nom est déjà choisi comme LIBRARY.


notre bibliothèque LIBRARY est maintenant disponible et on peut l’appeler dans les autres modules.
  • On va créer un module TEST et on va utiliser notre bibliothèque LIBRARY pour réutiliser une alerte.
  • Ouvrir la bibliothèque en cliquant sur Fichier puis ouvrir et sélectionner la bibliothèque.

  • On va réutiliser les objets de la bibliothèque : Se positionner sur LIBRARY puis cliquer sur le menu OUTILS-Bibliothèque d’objets. Les onglets sont maintenant visibles.
  • On va prendre l'objet et on va glisser dans le noeud Groupe d'objet.
  • Forms va afficher cette fenêtre afin de choisir le transfert
  • Référence : L’objet dans ce module fait toujours référence à l’objet de la bibliothèque. Donc, si l’objet ou groupe d’objets est modifié dans la bibliothèque, les changements sont automatiquement repercutés sur tous les modules dans lesquels on a mis cet objet ou ce groupe d’objets.
  • Copie : L’objet de la bibliothèque est copié au niveau de module. Ceci peut ne pas être intéressant, car toute future modification de l’Objet dans la bibliothèque ne sera pas répercuté au niveau de ce module.
  • Dans le cas de l’exemple, on va choisir transfert par référence.


  • Remarquez que l'objet est maintenant disponible dans notre module TEST. Il y’a une
    flèche ROUGE devant, car elle indique que l’on a fait un transfert par référence.


  • On peut créer autant d'objets dans la bibliothèque et les réutiliser dans les modules (comme par exemple les attributs visuels, les javabeans, etc...).
Testé sous Windows 7, Oracle Forms 10g.

Abed