Optimiser vos bannettes

Transcription

Optimiser vos bannettes
Optimiser vos bannettes
Il arrive un moment où votre base de données commence à prendre du volume et inévitablement, vous commencerez à avoir quelques lenteurs sur
votre page d'accueil.
Cela s'explique sur le fait que l'affichage du nombre de courriers se base sur la vue res_view_letterbox qui pointe sur l'ensemble des courriers
enregistrés (avec 100k lignes les requêtes commencent à fatiguer ...).
La solution que nous vous proposons est de créer une vue supplémentaire destinée à l'affichage des courriers dans les bannettes.
Pour cela, plusieurs actions seront à réaliser :
• créer une vue supplémentaire se basant sur res_view_letterbox
• modifier le php de modules/baskets/ajaxNbResInBasket.php
• modifier le php de apps/maarch_entreprise/documents_list_with_attachments.php
Sommaire
• 1 Procédure
♦ 1.1 Création de la vue res_view_letterbox_baskets
♦ 1.2 Modification de ajaxNbResInBasket
♦ 1.3 Modification de documents_list_with_attachments
♦ 1.4 Attention
Procédure
Création de la vue res_view_letterbox_baskets
Basez-vous sur la vue res_view_letterbox et rajouter dans la clause WHERE une limitation sur la date de création des courrier :
• Par exemple, si les courriers qui sont actifs dans les bannettes ne remontent pas plus des 6 derniers mois, vous pourrez rajouter :
creation_date > (CURRENT_TIMESTAMP - INTERVAL '183')
• Voici la requête de la vue pour la version 1.5.1 :
CREATE OR REPLACE VIEW res_view_letterbox_baskets AS
SELECT r.tablename,
r.is_multi_docservers,
r.res_id,
r.type_id,
r.policy_id,
r.cycle_id,
d.description AS type_label,
d.doctypes_first_level_id,
dfl.doctypes_first_level_label,
dfl.css_style AS doctype_first_level_style,
d.doctypes_second_level_id,
dsl.doctypes_second_level_label,
dsl.css_style AS doctype_second_level_style,
r.format,
r.typist,
r.creation_date,
r.relation,
r.docserver_id,
r.folders_system_id,
f.folder_id,
f.destination AS folder_destination,
f.is_frozen AS folder_is_frozen,
r.path,
r.filename,
r.fingerprint,
r.offset_doc,
r.filesize,
r.status,
r.work_batch,
r.arbatch_id,
r.arbox_id,
r.page_count,
r.is_paper,
r.doc_date,
r.scan_date,
r.scan_user,
r.scan_location,
r.scan_wkstation,
r.scan_batch,
r.doc_language,
r.description,
r.source,
r.author,
r.reference_number,
r.custom_t1 AS doc_custom_t1,
r.custom_t2 AS doc_custom_t2,
r.custom_t3 AS doc_custom_t3,
r.custom_t4 AS doc_custom_t4,
r.custom_t5 AS doc_custom_t5,
r.custom_t6 AS doc_custom_t6,
r.custom_t7 AS doc_custom_t7,
r.custom_t8 AS doc_custom_t8,
r.custom_t9 AS doc_custom_t9,
r.custom_t10 AS doc_custom_t10,
r.custom_t11 AS doc_custom_t11,
r.custom_t12 AS doc_custom_t12,
r.custom_t13 AS doc_custom_t13,
r.custom_t14 AS doc_custom_t14,
r.custom_t15 AS doc_custom_t15,
r.custom_d1 AS doc_custom_d1,
r.custom_d2 AS doc_custom_d2,
r.custom_d3 AS doc_custom_d3,
r.custom_d4 AS doc_custom_d4,
r.custom_d5 AS doc_custom_d5,
r.custom_d6 AS doc_custom_d6,
r.custom_d7 AS doc_custom_d7,
r.custom_d8 AS doc_custom_d8,
r.custom_d9 AS doc_custom_d9,
r.custom_d10 AS doc_custom_d10,
r.custom_n1 AS doc_custom_n1,
r.custom_n2 AS doc_custom_n2,
r.custom_n3 AS doc_custom_n3,
r.custom_n4 AS doc_custom_n4,
r.custom_n5 AS doc_custom_n5,
r.custom_f1 AS doc_custom_f1,
r.custom_f2 AS doc_custom_f2,
r.custom_f3 AS doc_custom_f3,
r.custom_f4 AS doc_custom_f4,
r.custom_f5 AS doc_custom_f5,
f.foldertype_id,
ft.foldertype_label,
f.custom_t1 AS fold_custom_t1,
f.custom_t2 AS fold_custom_t2,
f.custom_t3 AS fold_custom_t3,
f.custom_t4 AS fold_custom_t4,
f.custom_t5 AS fold_custom_t5,
f.custom_t6 AS fold_custom_t6,
f.custom_t7 AS fold_custom_t7,
f.custom_t8 AS fold_custom_t8,
f.custom_t9 AS fold_custom_t9,
f.custom_t10 AS fold_custom_t10,
f.custom_t11 AS fold_custom_t11,
f.custom_t12 AS fold_custom_t12,
f.custom_t13 AS fold_custom_t13,
f.custom_t14 AS fold_custom_t14,
f.custom_t15 AS fold_custom_t15,
f.custom_d1 AS fold_custom_d1,
f.custom_d2 AS fold_custom_d2,
f.custom_d3 AS fold_custom_d3,
f.custom_d4 AS fold_custom_d4,
f.custom_d5 AS fold_custom_d5,
f.custom_d6 AS fold_custom_d6,
f.custom_d7 AS fold_custom_d7,
f.custom_d8 AS fold_custom_d8,
f.custom_d9 AS fold_custom_d9,
f.custom_d10 AS fold_custom_d10,
f.custom_n1 AS fold_custom_n1,
f.custom_n2 AS fold_custom_n2,
f.custom_n3 AS fold_custom_n3,
f.custom_n4 AS fold_custom_n4,
f.custom_n5 AS fold_custom_n5,
f.custom_f1 AS fold_custom_f1,
f.custom_f2 AS fold_custom_f2,
f.custom_f3 AS fold_custom_f3,
f.custom_f4 AS fold_custom_f4,
f.custom_f5 AS fold_custom_f5,
f.is_complete AS fold_complete,
f.status AS fold_status,
f.subject AS fold_subject,
f.parent_id AS fold_parent_id,
f.folder_level,
f.folder_name,
f.creation_date AS fold_creation_date,
r.initiator,
r.destination,
r.dest_user,
r.confidentiality,
mlb.category_id,
mlb.exp_contact_id,
mlb.exp_user_id,
mlb.dest_user_id,
mlb.dest_contact_id,
mlb.address_id,
mlb.nature_id,
mlb.alt_identifier,
mlb.admission_date,
mlb.answer_type_bitmask,
mlb.other_answer_desc,
mlb.process_limit_date,
mlb.closing_date,
mlb.alarm1_date,
mlb.alarm2_date,
mlb.flag_notif,
mlb.flag_alarm1,
mlb.flag_alarm2,
mlb.is_multicontacts,
r.video_user,
r.video_time,
r.video_batch,
r.subject,
r.identifier,
r.title,
r.priority,
mlb.process_notes,
r.locker_user_id,
r.locker_time,
ca.case_id,
ca.case_label,
ca.case_description,
en.entity_label,
en.entity_type AS entitytype,
cont.contact_id,
cont.firstname AS contact_firstname,
cont.lastname AS contact_lastname,
cont.society AS contact_society,
u.lastname AS user_lastname,
u.firstname AS user_firstname,
list.item_id AS dest_user_from_listinstance,
list.viewed,
r.is_frozen AS res_is_frozen,
COALESCE(att.count_attachment, 0::bigint) AS count_attachment
FROM doctypes d,
doctypes_first_level dfl,
doctypes_second_level dsl,
ar_batch a
RIGHT JOIN res_letterbox r ON r.arbatch_id = a.arbatch_id
LEFT JOIN ( SELECT res_attachments.res_id_master,
count(res_attachments.res_id_master) AS count_attachment
FROM res_attachments
WHERE res_attachments.status::text <> 'DEL'::text
GROUP BY res_attachments.res_id_master) att ON r.res_id = att.res_id_master
LEFT JOIN entities en ON r.destination::text = en.entity_id::text
LEFT JOIN folders f ON r.folders_system_id = f.folders_system_id
LEFT JOIN cases_res cr ON r.res_id = cr.res_id
LEFT JOIN mlb_coll_ext mlb ON mlb.res_id = r.res_id
LEFT JOIN foldertypes ft ON f.foldertype_id = ft.foldertype_id AND f.status::text <> 'DEL'::text
LEFT JOIN cases ca ON cr.case_id = ca.case_id
LEFT JOIN contacts_v2 cont ON mlb.exp_contact_id = cont.contact_id OR mlb.dest_contact_id = cont.contact_id
LEFT JOIN users u ON mlb.exp_user_id::text = u.user_id::text OR mlb.dest_user_id::text = u.user_id::text
LEFT JOIN listinstance list ON r.res_id = list.res_id AND list.item_mode::text = 'dest'::text
WHERE r.type_id = d.type_id AND d.doctypes_first_level_id = dfl.doctypes_first_level_id AND d.doctypes_second_level_id = dsl.doctypes_second
and r.creation_date > (CURRENT_TIMESTAMP - INTERVAL '183');
Modification de ajaxNbResInBasket
Une fois la vue créée, il faut changer la vue cible dans les requêtes qui vont compter le nombre de courriers depuis la page d'accueil :
* Environ ligne 14, modifier la vue par '''res_view_letterbox_baskets''' :
$db->query('select * from res_view_letterbox_baskets'
. ' where ' . $_SESSION['user']['baskets'][$i]['clause'], true);
Modification de documents_list_with_attachments
Il faut changer la vue cible dans les requêtes qui vont lister les courriers depuis les bannettes :
• Environ ligne 81, on va changer la cible de la vue pour la partie bannette :
//Basket information
if(!empty($_SESSION['current_basket']['view'])) {
$table='res_view_letterbox_baskets';
} else {
$table = $_SESSION['current_basket']['table'];
}
Voila! Les banettes des utilisateurs devraient être plus réactives !
Attention
Évaluez bien votre périmètre maximal de l?ensemble de vos bannettes ou vous pourrez perdre des courriers dans celles-ci.
• Par exemple, si une bannette peut potentiellement avoir des courriers qui date de plus de 6 mois, ceux-ci n?apparaitront plus dans cette
bannette.