Le lien de recherche automatique : lance.asp?ref=...  (et lance_liste.asp)

version n°1 PB le 09/07/2001

Cette page effectue une recherche documentaire dans l'intranet, en fonction de son paramètre "ref" nourri avec la doc_ref_orig ou la ann_ref_orig, lesquels sont normalement uniques dans la base.

On peut y ajouter des paramètres supplémentaires suivant le résultat que l'on veut obtenir au terme de la requête :

- "&type=..." : pour différencier les pages de contenu ('C') et la page de généralités ('G').
- "&titre=..." : pour faire une recherche sur le titre de l'annexe ou de version de document.
- "&num=..." : pour différencier les pages de contenu (de 1 à n) et la page de généralités (=0).
- "&liste=1" : pour obtenir la liste de toutes les pages, de généralités comme de contenu.

var today = new Date;
var where = "";
var my_doc_id = "init";
var ref = Request.QueryString("ref");
var my_href = "init";

// ETAPE 1 : LE DOCUMENT EST-IL DANS LES DOCUMENTS ?
var sqlquery =select doc_id, doc_type_doc, doc_dept_code from documents where doc_ref_orig = '" + ref + "'"
Si on trouve,
on garde le doc_id en mémoire : my_doc_id = OBJECT_doc_id.cursor.GetValue ('doc_id');
on charge le département en variable de session : Session ("dept_code") = OBJECT_doc_id.cursor.GetValue ('doc_dept_code');
on effectue une requête sur departements pour obtenir le libelle correspondant que l'on charge en Session ("dept_libelle");
on note que la cible est dans les documents : where = "doc";
on rafraîchit le portail (haut + gauche);

// NON ? : 
if (my_doc_id == "init"){

//ALORS ETAPE 2 : RECHERCHE DANS LES ANNEXES

var sqlquery ="select doc_id, ann_id from annexes where ann_ref_orig = '" + ref + "'";
Si on trouve,
my_doc_id = OBJECT_doc_id.cursor.GetValue ('doc_id');
my_ann_id = OBJECT_doc_id.cursor.GetValue ('ann_id');
where = "ann"

if ( my_doc_id != "init") {    // SI ON A TROUVE LE DOC_ID, 
RECHERCHE DU max(VER_ID) pour les documents ou max(VAN_ID) pour les annexes
on recherche la dernière version valable : max (...), dans le créneau d'application

if (where == "doc") {var my_table = "documents_versions"; var prefixe = "ver"; } ;
if (where == "ann") {var my_table = "annexes_versions"; var prefixe = "van"; };

 
var sqlquery ="select max(" + prefixe + "_id) from " + my_table + " where doc_id = " + parseInt(my_doc_id) + "";
if (where == "ann") sqlquery += " and ann_id = " + my_ann_id;

var date_visu = Session("Date_Visu");
var int_date_visu = parseInt (date_visu.substring (6,10) + formatage (date_visu.substring (3,5),2) + formatage (date_visu.substring (0,2), 2));
var int_today = parseInt (format_time_comp (today));
... if (int_date_visu == int_today) : situation le jour même ... if (int_date_visu < int_today) : situation dans le passé ... if (int_date_visu > int_today ) : situation à venir

message += " = trad('sit_auj') : " + format_time (today)

sqlquery +=
if (Session ("projets") == "non" ){
" and " + prefixe + "_no_projet = 0";
" and " + prefixe + "_application_date <= cast ('" + format_time (today) + "' as datetime)";
" and (" + prefixe + "_peremption_date > cast ('" + format_time(today) + "' as datetime)";
" or " + prefixe + "_peremption_date is null)"}

message += " = trad('SIT_PAS') + date_visu

sqlquery +=
if (Session ("projets") == "non" ){
" and " + prefixe + "_no_projet = 0";
" and " + prefixe + "_application_date <= cast('" + date_visu + "' as datetime)";
" and (" + prefixe + "_peremption_date > cast ('" + date_visu + "' as datetime)";
" or " + prefixe + "_peremption_date is null)"}
if (Session ("projets") == "non" ){
message += " = trad('SIT_FUT') + date_visu

sqlquery +=
" and " + prefixe + "_no_projet = 0";
" and " + prefixe + "_application_date <= cast ('" + date_visu + "' as datetime)";
" and (" + prefixe + "_peremption_date > cast ('" + date_visu + "' as datetime)";
" or " + prefixe + "_peremption_date is null)"
if (Session ("projets") == "oui" ) {
message += " = trad('sit_fut_val_nonval') " + date_visu

sqlquery +=
"and " + prefixe + "_application_date <= cast('" + date_visu + "' as datetime)";
" and (" + prefixe + "_peremption_date > cast('" + date_visu + "' as datetime)";
" or " + prefixe + "_peremption_date is null)"

Si on cherche dans les annexes, on a tout ce qu'il nous faut : doc_id, ver_id, van_id
On refait un accès base de données et on charge la van_ref_info dans la variable de résultat "my_href"
select van_ref_info from annexes_versions where doc_id = parseInt (my_doc_id) and ann_id = parseInt (my_ann_id) and van_id = Object1.cursor.GetValue (0)

Si on cherche dans les documents, il manque encore le pag_id (pour faire une redirection directe sur la page voulue):
On refait un accès base de données (select pag_ref_info from documents_pages where doc_id=" + parseInt(my_doc_id) + " and ver_id=" + OBJECT1.cursor.GetValue(0) + "")
On vérifie que le lien ne possède pas de précision supplémentaire, auquel cas on complète la requête SQL (and ...) :
- si "&num=..." : 0 pour la page de généralités, 1 à n pour une page de contenu.
- si "&titre=..." :
- si "&type=..." : 'G' pour la page de généralités, 'C' pour les pages de contenu
- par défaut (si la précision "&liste=1" n'est pas demandée) : page_type = 'G' (page de généralités).
On charge le résultat (la ligne unique ou la première) dans "my_href".

LA REDIRECTION FINALE : gère si il y a 0 , 1 ou plusieurs résultats à la recherche.

             if (my_href == "init") {
             //il n'y a rien à afficher
             Response.Write ("lance_non_trouve.asp?ref=" + ref));
             }
        else {
             //il y a au moins 1 page à afficher (peut être plus)
             OBJECT2.cursor.MoveNext (); //OBJECT2 = recherche de la pag_ref_info ou van_ref_info
             
             if (OBJECT2.cursor.EOF()) {
                  //il n'y avait effectivement qu'une seule page
                  Response.Write (my_href);
                  }
             else {
                  if ("undefined" != "" + Request.QueryString ("liste")) {
                      //l'utilisateur veut une liste
                      Response.Write ("lance_liste.asp?doc_id=" + parseInt(my_doc_id) + "&ver_id=" + OBJECT1.cursor.GetValue(0) + "&plus=liste");
                      }
                  else if ("undefined" != "" + Request.QueryString ("titre")) {
                      //on lance la liste à partir des titres de page
                      Response.Write ("lance_liste.asp?doc_id=" + parseInt(my_doc_id) + "&ver_id=" + OBJECT1.cursor.GetValue(0) + "&titre=" + Request.QueryString ("titre"));
                      }
                  else {
                      //on lance la liste des contenus
                      Response.Write ("lance_liste.asp?doc_id=" + parseInt(my_doc_id) + "&ver_id=" + OBJECT1.cursor.GetValue(0) + "&plus=C");
                      };
                  }
             }
                        

La page lance_liste.asp :

"La recherche a donné plusieurs résultats"

if RQ("plus") == "C") {"select pag_titre, pag_ref_info, pag_ref_info_file from documents_pages where doc_id=" +  R.Q("doc_id") + " and ver_id=" +  R.Q("ver_id") + " and pag_type='C'";}
if RQ("plus") == "liste") {"select ... idem ... where doc_id=" +  R.Q("doc_id") + " and ver_id=" +  R.Q("ver_id") + "";}

if RQ("titre") != "undefined") {"select ... idem ... where doc_id=" +  R.Q("doc_id") + " and ver_id=" +  R.Q("ver_id") + " and pag_titre='" + replace("" + R.Q("titre"),"'","''") + "'";}
else {"select ... idem ... where doc_id=" +  R.Q("doc_id") + " and ver_id=" +  R.Q("ver_id") + "";}

var nom_file = ""; var index = 0; var long = 0;

for (on balaie le resultset) {
    nom_file = "" + GetValue('pag_ref_info_file');
    index = Application ("dir_out").length ;
    long = nom_file.length; 
    Response.Write ("" + nom_file.substring (index, long) avec lien vers pag_ref_info + ":" + pag_titre)
    }

Si la recherche manquait de renseignements ou si telle était la volonté de l'administrateur, l'utilisateur peut alors choisir lui-même ce qu'il recherche dans la liste de liens par un simple clic.