Tâches de fond et suivi

Le registre K.taches recense les opérations longues en cours : scan d'une campagne, indexation documentaire, import, passage de workflow. Il est distinct du moteur de workflows, qui porte lui aussi le mot tâche mais désigne autre chose. Cette page décrit les deux registres, le patron des ponts et le panneau de suivi.

Deux registres portent le mot tâche. K.workflows tient les tâches automatisables, qui sont aussi les outils de l'assistant IA, décrites en page Workflows et tâches. K.taches tient les tâches de fond, qui sont des opérations en cours à afficher. Les deux ne se recouvrent pas.

Déclarer une tâche de fond

var t = K.taches.demarrer({ id: 'campagne.scan.' + cle, titre: { fr: 'Analyse du dossier', en: 'Scanning folder' }, sujet: chemin, // affiche en second, sous le titre determinee: false, // aucune progression connue annulable: false }); t.avancer(0.4, 'Empreintes'); // si la tache est determinee t.reussir(); // s'efface seule t.echouer(message); // reste jusqu'a acquittement
RègleMotif
Une tâche ne se déclare annulable que si elle sait s'arrêter.Un bouton qui ne coupe rien est pire que pas de bouton.
Seul le succès s'efface tout seul.Un échec non lu disparaitrait avant d'avoir été vu.
Une tâche indéterminée l'annonce.Une barre qui progresse sans mesure réelle donne une attente fausse.
Le titre porte le nom court, le sujet le chemin complet.Deux scans simultanés doivent se distinguer sans infobulle.

Le patron des ponts

Un module qui produit des opérations longues n'appelle pas le registre lui-même. Il émet son cycle de vie sur le bus, et un petit fichier séparé écoute et crée les tâches. Le producteur et le registre s'ignorent, ce qui permet d'ajouter le suivi d'un module sans toucher à son code, et de le retirer de même.

// campagne : le producteur emet K.events.emit('campagne.scan.debut', { cle: cle, chemin: chemin }); K.events.emit('campagne.scan.fin', { cle: cle, erreur: null }); // taches-pont-campagnes.js : le pont ecoute K.whenShellReady(function () { K.events.on('campagne.scan.debut', function (e) { /* K.taches.demarrer */ }); K.events.on('campagne.scan.fin', function (e) { /* reussir ou echouer */ }); });

Les écoutes s'installent dans K.whenShellReady et non au chargement du fichier. Rien ne garantit que le registre soit chargé avant le pont dans le lot shell, et tester K.taches au chargement ferait abandonner en silence sans jamais réessayer.

Une garde contre le double départ est nécessaire : sans elle, un double clic laisse une tâche orpheline que l'événement de fin ne fermera qu'une seule fois.

Panneau Tâches

Le panneau liste les tâches en cours et les échecs non acquittés, avec leur titre, leur sujet et leur avancement quand il est connu. Il donne le bouton d'annulation aux seules tâches qui l'ont déclaré.

Le motif qui a rendu ce panneau nécessaire est le scan d'une campagne : l'attente occupe le panneau Campagne, si bien que sur un dossier de trois cents fichiers, l'utilisateur qui veut travailler ailleurs pendant le scan perd l'opération de vue. L'attente s'affiche donc là où elle est subie, pas seulement là où elle est déclenchée.

Le suivi

Le suivi permet de marquer un objet du logiciel comme à traiter, avec ou sans note, et de retrouver l'ensemble de ces marques dans un panneau unique : échantillons incomplets, scripts, projets, nœuds de chaine.

PointComportement
Pose d'une marquePar le menu contextuel de l'objet, agrégé depuis le registre de menus.
Types couvertsDéclarés dans un registre de types, un adaptateur par cible.
NoteFacultative. Une marque sans note reste une marque.
ÉcritureEn base, hors registre signé : un marqueur de suivi n'est pas une modification de donnée.

Les contributions de menu passent par K.menus, qui agrège toutes les contributions d'une même cible. Une entrée de suivi apparait donc dans les menus existants sans qu'aucun panneau ait à être modifié. Les contextes fournis par les panneaux ne portant pas tous une référence d'objet, le suivi installe un adaptateur par cible plutôt que d'imposer un champ commun à l'ensemble des panneaux.

Pages liées