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) |
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.