Loading CHANGELOG.md +1 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ Idem pour les attestations et le privilège "Modification des attestations conce - Optimisation de l'export CSV des thèses - Pages de téléversement et de recherche des rapports annuels. - Correction d'un bug dans la recherche de thèses par nom du doctorant. - Correction d'un bug dans le package Oracle APP_IMPORT qui ne filtrait pas les thèses selon l'établissement spécifié. - Possibilité d'attribuer un "identifiant permanent" à un fichier (ex: 'RAPPORT_ANNUEL_MODELE') facilitant l'intégration de lien de téléchargement de ce fichier dans une page. - Listes de diffusion dynamique Sympa alimentées par SyGAL : pages de consultation des listes de diffusion déclarées Loading doc/release-notes/v1.4.7.md +103 −0 Original line number Diff line number Diff line Loading @@ -131,4 +131,107 @@ insert into PRIVILEGE(ID, CATEGORIE_ID, CODE, LIBELLE, ORDRE) -- -- ATTENTION >>> Dans l'interface graphique, accorder ces nouveaux privilèges aux profils voulus (a minima Doctorant et AdminTech). -- create or replace PACKAGE BODY "APP_IMPORT" IS PROCEDURE REFRESH_MV( mview_name VARCHAR2 ) IS BEGIN DBMS_MVIEW.REFRESH(mview_name, 'C'); EXCEPTION WHEN OTHERS THEN UNICAEN_IMPORT.SYNC_LOG( SQLERRM, mview_name ); END; PROCEDURE SYNC_TABLES IS BEGIN -- mise à jour des tables à partir des vues sources -- NB: l'ordre importe ! UNICAEN_IMPORT.MAJ_STRUCTURE(); UNICAEN_IMPORT.MAJ_ETABLISSEMENT(); UNICAEN_IMPORT.MAJ_ECOLE_DOCT(); UNICAEN_IMPORT.MAJ_UNITE_RECH(); UNICAEN_IMPORT.MAJ_INDIVIDU(); UNICAEN_IMPORT.MAJ_DOCTORANT(); UNICAEN_IMPORT.MAJ_THESE(); UNICAEN_IMPORT.MAJ_THESE_ANNEE_UNIV(); UNICAEN_IMPORT.MAJ_ROLE(); UNICAEN_IMPORT.MAJ_ACTEUR(); UNICAEN_IMPORT.MAJ_VARIABLE(); UNICAEN_IMPORT.MAJ_FINANCEMENT(); UNICAEN_IMPORT.MAJ_TITRE_ACCES(); REFRESH_MV('MV_RECHERCHE_THESE'); -- NB: à faire en dernier END; -- -- Recherche des changements de type UPDATE concernant la colonne de table observée et -- enregistrement de ces changements dans une table. -- PROCEDURE STORE_UPDATE_OBSERV_RESULT(importObservEtab IMPORT_OBSERV_ETAB%ROWTYPE) IS u_col_name VARCHAR2(50); where_to_value CLOB; i_query CLOB; importObserv IMPORT_OBSERV%ROWTYPE; TYPE r_cursor is REF CURSOR; rc r_cursor; l_id CLOB; l_detail CLOB; BEGIN select * into importObserv from IMPORT_OBSERV where id = importObservEtab.IMPORT_OBSERV_ID; -- Construction du nom de la colonne de la vue V_DIFF_X indiquant un changement de valeur dans la table X. -- Ex: 'U_RESULTAT' (dans la vue V_DIFF_THESE, indiquant que la colonne THESE.RESULTAT a changé). u_col_name := 'U_' || importObserv.COLUMN_NAME; -- Construction de la clause permettant de ne prendre en compte que la prise de valeur qui nous intéresse. -- Ex: "v.COLONNE = 'VALEUR'" ou "v.COLONNE IS NULL". where_to_value := 'v.' || importObserv.COLUMN_NAME || case when importObserv.TO_VALUE is null then ' is null' else ' = ''' || importObserv.TO_VALUE || '''' end; -- Construction de la requête recherchant dans la vue V_DIFF_X les lignes correspondant à : -- une prise de valeur particulière spécifiée par IMPORT_OBSERV.TO_VALUE, -- de la colonne spécifiée par IMPORT_OBSERV.COLUMN_NAME, -- dans la table spécifiée par IMPORT_OBSERV.TABLE_NAME. i_query := 'select v.source_code, t.' || importObserv.COLUMN_NAME || ' || ''>'' || v.' || importObserv.COLUMN_NAME || ' detail ' || 'from V_DIFF_' || importObserv.TABLE_NAME || ' v ' || 'join ' || importObserv.TABLE_NAME || ' t on t.source_code = v.source_code ' || 'join etablissement e on t.etablissement_id = ' || importObservEtab.ETABLISSEMENT_ID || ' ' || 'where ' || u_col_name || ' = 1 and ' || where_to_value || ' ' || 'order by v.source_code'; --DBMS_OUTPUT.PUT_LINE(i_query); OPEN rc FOR i_query; LOOP FETCH rc INTO l_id, l_detail; EXIT WHEN rc%NOTFOUND; --DBMS_OUTPUT.PUT_LINE(l_id); DBMS_OUTPUT.PUT_LINE(l_detail); insert into IMPORT_OBSERV_ETAB_RESULT(ID, IMPORT_OBSERV_ETAB_ID, DATE_CREATION, SOURCE_CODE, RESULTAT, TOO_OLD) values (IMPORT_OBSERV_RESULT_ID_SEQ.nextval, importObservEtab.ID, sysdate, l_id, l_detail, 0); END LOOP; END; PROCEDURE STORE_OBSERV_RESULTS IS BEGIN -- Parcours des IMPORT_OBSERV_ETAB de type UPDATE et non désactivés. for importObservEtab in ( select ioe.* from IMPORT_OBSERV_ETAB ioe join IMPORT_OBSERV io on ioe.IMPORT_OBSERV_ID = io.ID and io.OPERATION = 'UPDATE' where ioe.ENABLED = 1 ) loop STORE_UPDATE_OBSERV_RESULT(importObservEtab); end loop; END; PROCEDURE SYNCHRONISATION IS BEGIN STORE_OBSERV_RESULTS; SYNC_TABLES; END; END APP_IMPORT; / ``` Loading
CHANGELOG.md +1 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ Idem pour les attestations et le privilège "Modification des attestations conce - Optimisation de l'export CSV des thèses - Pages de téléversement et de recherche des rapports annuels. - Correction d'un bug dans la recherche de thèses par nom du doctorant. - Correction d'un bug dans le package Oracle APP_IMPORT qui ne filtrait pas les thèses selon l'établissement spécifié. - Possibilité d'attribuer un "identifiant permanent" à un fichier (ex: 'RAPPORT_ANNUEL_MODELE') facilitant l'intégration de lien de téléchargement de ce fichier dans une page. - Listes de diffusion dynamique Sympa alimentées par SyGAL : pages de consultation des listes de diffusion déclarées Loading
doc/release-notes/v1.4.7.md +103 −0 Original line number Diff line number Diff line Loading @@ -131,4 +131,107 @@ insert into PRIVILEGE(ID, CATEGORIE_ID, CODE, LIBELLE, ORDRE) -- -- ATTENTION >>> Dans l'interface graphique, accorder ces nouveaux privilèges aux profils voulus (a minima Doctorant et AdminTech). -- create or replace PACKAGE BODY "APP_IMPORT" IS PROCEDURE REFRESH_MV( mview_name VARCHAR2 ) IS BEGIN DBMS_MVIEW.REFRESH(mview_name, 'C'); EXCEPTION WHEN OTHERS THEN UNICAEN_IMPORT.SYNC_LOG( SQLERRM, mview_name ); END; PROCEDURE SYNC_TABLES IS BEGIN -- mise à jour des tables à partir des vues sources -- NB: l'ordre importe ! UNICAEN_IMPORT.MAJ_STRUCTURE(); UNICAEN_IMPORT.MAJ_ETABLISSEMENT(); UNICAEN_IMPORT.MAJ_ECOLE_DOCT(); UNICAEN_IMPORT.MAJ_UNITE_RECH(); UNICAEN_IMPORT.MAJ_INDIVIDU(); UNICAEN_IMPORT.MAJ_DOCTORANT(); UNICAEN_IMPORT.MAJ_THESE(); UNICAEN_IMPORT.MAJ_THESE_ANNEE_UNIV(); UNICAEN_IMPORT.MAJ_ROLE(); UNICAEN_IMPORT.MAJ_ACTEUR(); UNICAEN_IMPORT.MAJ_VARIABLE(); UNICAEN_IMPORT.MAJ_FINANCEMENT(); UNICAEN_IMPORT.MAJ_TITRE_ACCES(); REFRESH_MV('MV_RECHERCHE_THESE'); -- NB: à faire en dernier END; -- -- Recherche des changements de type UPDATE concernant la colonne de table observée et -- enregistrement de ces changements dans une table. -- PROCEDURE STORE_UPDATE_OBSERV_RESULT(importObservEtab IMPORT_OBSERV_ETAB%ROWTYPE) IS u_col_name VARCHAR2(50); where_to_value CLOB; i_query CLOB; importObserv IMPORT_OBSERV%ROWTYPE; TYPE r_cursor is REF CURSOR; rc r_cursor; l_id CLOB; l_detail CLOB; BEGIN select * into importObserv from IMPORT_OBSERV where id = importObservEtab.IMPORT_OBSERV_ID; -- Construction du nom de la colonne de la vue V_DIFF_X indiquant un changement de valeur dans la table X. -- Ex: 'U_RESULTAT' (dans la vue V_DIFF_THESE, indiquant que la colonne THESE.RESULTAT a changé). u_col_name := 'U_' || importObserv.COLUMN_NAME; -- Construction de la clause permettant de ne prendre en compte que la prise de valeur qui nous intéresse. -- Ex: "v.COLONNE = 'VALEUR'" ou "v.COLONNE IS NULL". where_to_value := 'v.' || importObserv.COLUMN_NAME || case when importObserv.TO_VALUE is null then ' is null' else ' = ''' || importObserv.TO_VALUE || '''' end; -- Construction de la requête recherchant dans la vue V_DIFF_X les lignes correspondant à : -- une prise de valeur particulière spécifiée par IMPORT_OBSERV.TO_VALUE, -- de la colonne spécifiée par IMPORT_OBSERV.COLUMN_NAME, -- dans la table spécifiée par IMPORT_OBSERV.TABLE_NAME. i_query := 'select v.source_code, t.' || importObserv.COLUMN_NAME || ' || ''>'' || v.' || importObserv.COLUMN_NAME || ' detail ' || 'from V_DIFF_' || importObserv.TABLE_NAME || ' v ' || 'join ' || importObserv.TABLE_NAME || ' t on t.source_code = v.source_code ' || 'join etablissement e on t.etablissement_id = ' || importObservEtab.ETABLISSEMENT_ID || ' ' || 'where ' || u_col_name || ' = 1 and ' || where_to_value || ' ' || 'order by v.source_code'; --DBMS_OUTPUT.PUT_LINE(i_query); OPEN rc FOR i_query; LOOP FETCH rc INTO l_id, l_detail; EXIT WHEN rc%NOTFOUND; --DBMS_OUTPUT.PUT_LINE(l_id); DBMS_OUTPUT.PUT_LINE(l_detail); insert into IMPORT_OBSERV_ETAB_RESULT(ID, IMPORT_OBSERV_ETAB_ID, DATE_CREATION, SOURCE_CODE, RESULTAT, TOO_OLD) values (IMPORT_OBSERV_RESULT_ID_SEQ.nextval, importObservEtab.ID, sysdate, l_id, l_detail, 0); END LOOP; END; PROCEDURE STORE_OBSERV_RESULTS IS BEGIN -- Parcours des IMPORT_OBSERV_ETAB de type UPDATE et non désactivés. for importObservEtab in ( select ioe.* from IMPORT_OBSERV_ETAB ioe join IMPORT_OBSERV io on ioe.IMPORT_OBSERV_ID = io.ID and io.OPERATION = 'UPDATE' where ioe.ENABLED = 1 ) loop STORE_UPDATE_OBSERV_RESULT(importObservEtab); end loop; END; PROCEDURE SYNCHRONISATION IS BEGIN STORE_OBSERV_RESULTS; SYNC_TABLES; END; END APP_IMPORT; / ```