Création d'un chrono sous Documentum
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.
Sommaire
Votre avis
Nobody voted on this yet
|
|
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
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.
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
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