Fonctionnalité #18094
ferméRecherche par agent SEDA 2
Description
En tant que service demandeur d'archives, je veux rechercher les unités d'archives selon les informations d'un agent présent dans les métadonnées descriptives afin de retrouver les contenus liés à un agent.
Détail
Le SEDA 2 a introduit la structure Agent pour rattacher des personnes ou organismes à la description des unités d'archive, avec des rôles prédéfinis (destinataire, rédacteur, émetteur, etc...)
Le SEDA 2.2 ajoutera un agent "générique" et utilisera la notion de rôle pour définir la relation avec le contenu décrit.
Ces structures sont intégrées sous la forme de tableau d'objets agents.
Dans la version 2.7, la recherche n'est possible qu'en mode texte intégral, moins fiable que des index et des mots-clés, ce qui pose des problèmes lorsque l'agent est l'un des principaux critères métier discriminants (bulletins de salaire).
La demande est donc d'ajouter au moteur de recherche la gestion d'un critère "agent" avec la construction d'une requête dans le document descriptif, à la manière de ce qui est fait pour les mots-clés qui sont aussi un tableau d'objet.
Dans un premier temps, il est raisonnable par contre de restreindre à une seule ligne de critère (recherche un seul agent) pour ne pas complexifier le moteur et grever les performances.
Conditions d'acceptation
Le formulaire de recherche du registre des archives publiques comporte un bloc permettant de saisir tout ou partie des valeurs de propriétés d'un agent recherché (nom, prénom, date de naissance, fonction, rôle, identifiant...) à l'aide d'égalité stricte ou de termes approchants (joker)
Les critères des parties d'agent sont liés par un opérateur "ET"
Lorsque le rôle n'est pas précisé, la recherche est réalisée dans TOUS les agents liés (nommés en SEDA 2.1 ou générique "agent") avec un opérateur "OU".
En SEDA 1, l'usage de ce formulaire ne ramène aucun résultat (AND avec autres critères, sous peine de tout ramener si aucun autre critère)
Mis à jour par Cyril VAZQUEZ il y a environ 3 ans
Analyse d'impact et complexité :
Front¶
- formulaire agent dans le registre
- sérialisation JSON du formulaire :
{
"agent": {
"firstName": "Alain",
"givenName" : "CONNU",
"role" : "addressee"
}
}
Back¶
Ajouter le critère "Agent" de type objet aux interfaces :
- ext/archivesPubliques/presentation/maarchRM/UserStory/archiveRetrieval/searchPublicArchiveInterface.php
- ext/archivesPubliques/bundle/archivesPubliques/contentInterface.php
Opportunité d'ajouter en tant que tableau (comme mots-clés) pour prévoir la fonction plus tard ?
Ajouter le code de construction du SQL dans le contrôleur :
- ext/archivesPubliques/bundle/archivesPubliques/Controller/content.php
Pour les fonctions find() et count(), ajouter le critère dans les paramètres.
Pour la fonction searchJson() construire le SQL spécifique :
if (is_array($agent) && !empty($agent)) {
// SEDA 2 and 2.1 named agent groups
// New SEDA 2.2 agents will use 'role' attribute
$namedAgents = ['authorizedAgent', 'writer', 'addressee', 'recipient', 'transmitter', 'sender'];
$queryAgent = [];
foreach ($agent as $agentObj) {
if (isset($agentObj->role) && in_array($agentObj->role, $namedAgents)) {
$properties = [$agentObj->role];
unset($agentObj->role);
} else {
$properties = array_merge($namedAgents, ['agent']);
}
$queryAgentParts = [];
foreach ($properties as $property) {
$queryAgentPropertyParts = [];
foreach ($agentObj as $name => $value) {
$queryAgentPropertyParts[] = '"description"->\''.$property.'\' @> \'[{"'.$name.'": "'.$value.'"}]\'';
}
$queryAgentParts[] = '('.implode (' AND ', $queryAgentPropertyParts).')';
}
$queryAgent[] = implode (' OR ', $queryAgentParts);
}
$queryParts['agent'] = '<?SQL ('.implode(' OR ', $queryAgent).') ?>';
}
Pour la fonction searchTable renvoyer une requête fausse:
if (is_array($agent) && !empty($agent)) {
$queryParts['agent'] = '0=1';
}
Mis à jour par Emmanuel DILLARD il y a environ 3 ans
- Statut changé de R&D - A planifier à R&D - En cours
Mis à jour par Emmanuel DILLARD il y a environ 3 ans
- Statut changé de R&D - En cours à R&D - A planifier
- Priorité changé de 0-Bloquant à 1-Majeur
Mis à jour par Cyril VAZQUEZ il y a presque 3 ans
- Statut changé de R&D - A planifier à En cours
- Assigné à mis à Cyril VAZQUEZ
- Version cible changé de 2.8 à 2.8.2
- Tags RM
2.8.0supprimé
Lié à transformation SIP conformément à modèle OAIS, autre demande #
Mis à jour par Cyril VAZQUEZ il y a presque 3 ans
- Statut changé de En cours à Rejeté
Rendu inutile par conversion AIP V3