Création d'un chrono sous Documentum

De EjnTricks
Révision de 13 novembre 2013 à 16:35 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Il est parfois utile d'avoir d'un chrono dans la docbase. Dans des cas simple, nous pouvons utiliser une séquences Oracle qui se charge de l'unicité des numéros. La création d'une séquence au niveau oracle est décrite à la page Séquence Oracle.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Icon-database.png Création séquence Oracle

Cependant, l'accès à la base de données n'est pas toujours disponible. Mais il est possible de passer des requêtes SQL directement en API. Le script API est le suivant:

execsql,c,CREATE SEQUENCE "SEQ_DOCUMENT_CHRONO" MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE NOCYCLE
execsql,c,CREATE OR REPLACE FUNCTION F_DOCUMENT_CHRONO RETURN NUMBER IS i_seqnumber NUMBER; BEGIN 
SELECT SEQ_DOCUMENT_CHRONO.NEXTVAL INTO i_seqnumber FROM dual;  RETURN i_seqnumber; END;
execsql,c,CREATE OR REPLACE FORCE VIEW V_DOCUMENT_CHRONO (nextdocid) AS SELECT F_DOCUMENT_CHRONO FROM dual

Le contenu de la fonction doit être mis sur une seule ligne pour que la création fonctionne sous Samson. Dans le cas contraire, la fonction est créée mais avec une erreur


Icon-database.png Création table enregistrée

La création de la table enregistrée respecte les recommandations faites dans l'article création d'une table enregistrée.

Après la création de la vue dans la base de données, il suffit d'enregistrer cette table enregistrée à l'aide de la requête DQL:

register table dm_dbo.v_document_chrono (nextdocid int)

Il est recommandé de contrôler les droits d'accès au niveau des tables enregistrées. Un premier contrôle permet de ne permettre que les options de lecture, en exécutant la requête DQL:

update dm_registered object set world_table_permit = 1, set group_table_permit = 1, 
set owner_table_permit = 1, set acl_name = 'chrono_acl', set acl_domain = 'dm_dbo' where object_name in ('v_document_chrono')

Il est également possible de réduire encore plus les accès, en positionnant une ACL (dans l'exemple chrono_acl) ne donnant que des droits de lecture.


Icon-database-search.png Utilisation du chrono

La requête suivante permet alors de récupérer le prochain numéro de chrono:

select * from dm_dbo.v_document_chrono


Format-number-icon.png Formatage du chrono

Mais il est souvent demandé d'avoir des 0 précédent le chrono, afin d'avoir une référence sur X chiffres par exemple. Ceci peut s'effectuer par la modification de la vue sur la fonction, au niveau Oracle. La première tentative s'effectue en créant la vue ainsi, chrono sur 7 chiffres:

execsql,c,CREATE OR REPLACE FORCE VIEW V_DOCUMENT_CHRONO (nextdocid) AS SELECT TO_CHAR(F_DOCUMENT_CHRONO, '0000009') FROM dual

Le résultat attendu est "correct" au niveau de Oracle. Mais étrangement lors de la requête DQL, les 0 disparaissent.

Il existe cependant un moyen simple pour corriger cela, il faut utiliser la syntaxe FM0000009 dans le formateur. La déclaration de la vue est donc:

execsql,c,CREATE OR REPLACE FORCE VIEW V_DOCUMENT_CHRONO (nextdocid) AS SELECT TO_CHAR(F_DOCUMENT_CHRONO, 'FM0000009') FROM dual