Obtenir des informations à partir d'enregistrements correspondants
La méthode Fetch
La méthode Fetch de la classe Module est utilisée pour obtenir des informations à partir du jeu de résultats une fois que la recherche d’un module a été exécutée. Le serveur maintient l’ensemble des enregistrements correspondants dans une liste et la méthode Fetch peut être utilisée pour récupérer n’importe quelle information à partir de n’importe quel bloc contigu d’enregistrements dans la liste.
La forme la plus simple de la méthode Fetch prend quatre arguments :
flagoffsetEnsemble, les arguments
flagetoffsetdéfinissent la position de départ du bloc d’enregistrements à récupérer. L’argumentflagest une chaîne de caractères et doit être l’un des suivants :startcurrentend
Les indicateurs
startetendfont référence au premier et au dernier enregistrement du jeu de résultats. L’indicateurcurrentfait référence à la position du dernier enregistrement récupéré lors de l’appel précédent à la méthodeFetch. Si la méthodeFetchn’a pas été appelée,currentfait référence au premier enregistrement du jeu de résultats.L’argument
offsetest un entier. Il ajuste la position de départ par rapport à la valeur de l’argumentflag. Une valeur positive pouroffsetindique un début après la position spécifiée parflaget une valeur négative indique un début avant la position spécifiée parflag.Par exemple, appeler
Fetchavec unflagdestartet unoffsetde 3 renverra les enregistrements à partir du quatrième enregistrement du jeu de résultats. Spécifier unflagdeendet unoffsetde -8 renverra les enregistrements à partir du neuvième enregistrement en partant de la fin du jeu de résultats.Pour récupérer l’enregistrement suivant après le dernier renvoyé lors de l’appel précédent à
Fetch, il convient de passer unflagdecurrentet unoffsetde 1.countL’argument
countspécifie le nombre maximum d’enregistrements à récupérer.Passer une valeur
countde 0 est valide. Cela amèneFetchà modifier l’enregistrement en cours sans récupérer réellement les données.L’utilisation d’une valeur négative pour
countest également valide. Cela amèneFetchà renvoyer tous les enregistrements du jeu de résultats à partir de la position de départ (spécifiée parflagetoffset).columnsL’argument
columnsest utilisé pour spécifier quelles colonnes doivent être incluses dans les enregistrements renvoyés. L’argument peut être unString, unString[]ou unList<string>. Dans sa forme la plus simple, chaqueStringcontient un seul nom de colonne, ou plusieurs noms de colonnes séparés par des points-virgules ou des virgules.La valeur de l’argument
columnspeut être autre chose que de simples noms de colonnes. Voir Spécification des colonnes pour plus de détails.
Il existe un certain nombre de variantes de la méthode Fetch. Consultez la documentation de référence pour plus de détails sur chacune d’entre elles.
Par exemple :
- Récupérer le premier enregistrement à partir du début du jeu de résultats :
C#
Module parties = new Module("eparties", session); string columns = "NamFirst;NamLast"; ModuleFetchResult result = parties.Fetch("start", 0, 1, columns);
VB
Dim parties = New IMu.Module("eparties", session) Dim columns = "NamFirst;NamLast" Dim result = parties.Fetch("start", 0, 1, columns)
L’argument columns peut également être spécifié sous la forme d’une référence à un tableau :
C#
Module parties = new Module("eparties", session); string[] columns = { "NamFirst", "NamLast" }; ModuleFetchResult result = parties.Fetch("start", 0, 1, columns);
VB
Dim parties = New IMu.Module("eparties", session) Dim columns() = { "NamFirst", "NamLast" }
Dim result = parties.Fetch("start", 0, 1, columns)
- Récupérer tous les résultats d’un jeu de résultats :
C#
Module parties = new Module("eparties", session); string[] columns = { "NamFirst", "NamLast" }; ModuleFetchResult result = parties.Fetch("start", 0, -1, columns);
VB
Dim parties = New IMu.Module("eparties", session)
Dim columns() = { "NamFirst", "NamLast"
} Dim result = parties.Fetch("start", 0, -1, columns)
- Définir l’enregistrement en cours sur l’enregistrement suivant du jeu de résultats sans récupérer de données :
C#
parties.Fetch("start", 1, 0);
VB
parties.Fetch("start", 1, 0)
- Récupérer le dernier enregistrement à partir de la fin du jeu de résultats :
C#
Module parties = new Module("eparties", session) ; string[] columns = { "NamFirst", "NamLast" } ; ModuleFetchResult result = parties. Fetch("end", 0, 1, colonnes) ;
VB
Dim parties = New IMu.Module("eparties", session) Dim columns() = { "NamFirst", "NamLast" } Dim result = parties. Fetch("end", 0, 1, colonnes)
La méthode Fetch retourne les enregistrements demandés dans un objet ModuleFetchResult. Il contient trois propriétés en lecture seule :
CountLe nombre d’enregistrements retournés par la requête
Fetch.HitsNombre estimé de résultats dans le jeu de résultats. Ce nombre est renvoyé pour chaque
Fetchcar l’estimation peut diminuer à mesure que les enregistrements du jeu de résultats sont traités par la méthodeFetch.RowsLa propriété
Rowsest un tableau contenant le jeu d’enregistrements demandés. Chaque élément du tableauRowsest lui-même un objetMap. Chaque objetMapcontient des entrées pour chaque colonne demandée.Note: La classe IMu
Mapest une sous-classe de la classe standardDictionaryde .Net. Il définit son type de clé comme étant une chaîne. Il fournit également des méthodes pratiques pour convertir les types des éléments stockés dans la map. Consultez la documentation de Référence pour plus de détails.
Par exemple, les propriétés Count et Hits sont récupérées et tous les enregistrements renvoyés sont parcourus à l’aide de la propriété Rows :
C#
String[] columns =
{
"NamFirst",
"NamLast"
};
ModuleFetchResult result = parties.Fetch("start", 0, 2, columns);
long count = result.Count;
long hits = result.Hits;
Console.WriteLine("Count: {0}", count);
Console.WriteLine("Hits: {0}", hits);
Console.WriteLine("Rows:");
foreach (IMu.Map row in result.Rows)
{
int rowNum = row.GetInt("rownum");
long irn = row.GetInt("irn");
String first = row.GetString("NamFirst");
String last = row.GetString("NamLast");
Console.WriteLine(" {0}. {1}, {2} ({3})", rowNum, last, first,
irn);
}
VB
Cela génère des résultats similaires à ceux qui suivent :
Count: 2 Hits: 4 Rows: 1. ECCLES-SMITH, Kate (100573) 2. SMITH, Ian (100301)
Spécification des colonnes
Cette section décrit les valeurs qui peuvent être incluses ou utilisées comme arguments columns de la méthode Fetch de la classe Module.
Il s’agit par exemple de simples noms de colonnes du type déjà mentionné :
NamFirst
Les valeurs des colonnes atomiques sont renvoyées sous forme de chaînes :
C#
string[] columns = { "NamFirst" }; ModuleFetchResult result = parties.Fetch("start", 0, -1, columns); for (int i = 0; i < rows.Length; i++) { Map row = rows[i]; string first = row.GetString("NamFirst"); // ⋯ }
VB
Dim columns() = { "NamFirst" } Dim result = parties.Fetch("start", 0, -1, columns) For i = 0 To rows.Length - 1 Dim row = rows(i) Dim first = row.GetString("NamFirst") ' ⋯ Next
Les tables imbriquées sont des colonnes qui contiennent une liste de valeurs. Elles sont spécifiées de la même manière que les colonnes atomiques :
NamRoles_tab
Les valeurs des tables imbriquées sont renvoyées sous la forme String[]. Chaque membre du tableau est une chaîne de caractères qui correspond à une ligne de la table imbriquée :
C#
string[] columns = { "NamRoles_tab" }; ModuleFetchResult result = parties.Fetch("start", 0, -1, columns); IMu.Map[] rows = result.Rows; foreach (IMu.Map row in rows) { String[] roles = row.GetStrings("NamRoles_tab"); foreach (String role in roles) { // ⋯ } }
VB
Dim columns() = { "NamRoles_tab" } Dim result = parties.Fetch("start", 0, -1, columns) For i = 0 To rows.Length - 1 Dim row = rows(i) Dim first = row.GetString("NamFirst") ' ⋯ Next
Une pièce jointe est un lien entre un enregistrement dans un module et un enregistrement dans le même module ou dans un autre. Les colonnes d’un enregistrement joint peuvent être spécifiées en spécifiant d’abord la colonne de fichier joint, puis la colonne à récupérer à partir de l’enregistrement joint :
SynSynonymyRef_tab.SummaryData
Plusieurs colonnes peuvent être spécifiées à partir de l’enregistrement joint :
SynSynonymyRef_tab.(NamFirst,NamLast)
Les valeurs renvoyées pour les colonnes provenant d’enregistrements joints dépendent du type de la colonne de fichier joint. Si la colonne de fichier joint est atomique, les valeurs de la colonne sont renvoyées sous forme de tableau associatif. Si la colonne de fichier joint est une table imbriquée, les valeurs sont renvoyées sous forme de tableau. Chaque membre du tableau est un tableau associatif contenant les valeurs de colonne demandées pour chaque enregistrement joint :
C#
String[] columns = { "SynSynonymyRef_tab.(NamFirst,NamLast)" }; ModuleFetchResult result = partiesFetch("start", 0, 1, columns); foreach (IMu.Map row in result.Rows) { foreach (IMu.Map synonymy in row.GetMaps("SynSynonymyRef_tab")) { String first = synonymy.GetString("NamFirst"); String last = synonymy.GetString("NamLast"); // ⋯ } }
VB
Un fichier joint inversé permet de spécifier des colonnes provenant d’autres enregistrements du même module ou d’autres modules auxquels l’enregistrement en cours est rattaché par l’intermédiaire d’une colonne spécifiée.
Par exemple :
- Récupérez la colonne TitMainTitle (Titre principal) pour tous les enregistrements Catalogue qui ont l’enregistrement Personnes / Organisations en cours joint à leur colonne CreCreatorRef_tab (Créateur) :
<ecatalogue :CreCreatorRef_tab>. TitMainTitle
- Récupérez la colonne NarTitle (Titre) pour tous les enregistrements Narrations qui ont l’enregistrement Narration en cours joint à leur colonne HieChildNarrativesRef_tab (Narrations enfants) :
<enarratives :HieChildNarrativesRef_tab>. NarTitle
Plusieurs colonnes peuvent être spécifiées à partir de l’enregistrement de fichier joint inversé :
<ecatalogue:CreCreatorRef_tab>.(TitMainTitle,TitObjectCategory)
Les fichiers joints inversés sont renvoyés sous forme de tableau. Chaque membre du tableau est un tableau associatif contenant les valeurs de colonne demandées pour chaque enregistrement du module spécifié (le module Catalogue dans l’exemple ci-dessous) qui a l’enregistrement en cours joint à la colonne spécifiée (la colonne CreCreatorRef_tab dans l’exemple ci-dessous) :
C#
String[] columns = { "<ecatalogue:CreCreatorRef_tab>.(TitMainTitle,TitObjectCategory)" }; ModuleFetchResult result = parties.Fetch("start", 0, 1, columns); foreach (IMu.Map row in result.Rows) { foreach (IMu.Map object in row.GetMaps("ecatalogue:CreCreatorRef_tab")) { String title = object.GetString("TitMainTitle"); String category = object.GetString("TitObjectCategory"); // ⋯ } }
VB
Un ensemble de colonnes de table imbriquées peut être regroupé en les spécifiant entre crochets.
Par exemple, pour regrouper les Contributeurs et leur rôle à partir du module Narrations :
[NarContributorRef_tab.SummaryData,NarContributorRole_tab]
Chaque ensemble de lignes correspondantes des tables imbriquées fournies est renvoyé sous la forme d’une seule ligne dans les résultats. Par défaut, le groupe reçoit le nom group1, group2 et ainsi de suite. Ce nom de groupe peut être changé en préfixant les colonnes groupées avec un nom alternatif :
contributors=[NarContributorRef_tab.SummaryData,NarContributorRole_tab]
Les tables imbriquées groupées sont renvoyées sous forme de tableau. Chaque membre du tableau est un tableau associatif contenant les lignes correspondantes des tables imbriquées :
C#
String[] columns = { "[NarContributorRef_tab.SummaryData,NarContributorRole_tab]" }; ModuleFetchResult result = narratives-Fetch('start', 0, 1, columns); foreach (IMu.Map row in result.Rows) { foreach (IMu.Map group in row.GetMaps("group1")) { IMu.Map contributor = group.GetMap("NarContributorRef_tab"); String summary = contributor.GetString("SummaryData"); String role = group.GetString("NarContributorRole_tab"); // ⋯ } }
VB
Les colonnes virtuelles sont des colonnes qui n’existent pas réellement dans la table EMu à laquelle on accède. Au lieu de cela, le serveur IMu interprète la requête concernant la colonne et génère une réponse adaptée. Certaines colonnes virtuelles ne peuvent être utilisées que dans certains modules, comme indiqué ci-dessous :
Les colonnes virtuelles suivantes peuvent être utilisées dans n’importe quel module EMu :
-
insertedTimeStamp
Renvoie la date et l'heure d'insertion de l'enregistrement au format
YYYY-MM-DDThh:mm:ss, par exemple1999-12-31T23:59:59Ce format est similaire au format de date ISO8601, à l’exception de l’indicateur de fuseau horaire qui n’est pas inclus. -
modifiedTimeStamp
Renvoie la date et l'heure de modification de l'enregistrement au format
YYYY-MM-DDThh:mm:ss.
C#
String[] columns = { "insertedTimeStamp", "modifiedTimeStamp" }; ModuleFetchResult result = parties.Fetch("start", 0, 1, columns); foreach (IMu.Map row in result.Rows) { String inserted = row.GetString("insertedTimeStamp"); String modified = row.GetString("modifiedTimeStamp"); // ⋯ }
VB
Les colonnes virtuelles suivantes peuvent être utilisées dans n’importe quel module EMu, à l’exception du module Multimédia :
- application
Renvoie des informations sur le multimédia d’application préféré associé à un enregistrement.
Note: Actuellement, le multimédia d’application préféré correspond à la première entrée de la liste renvoyée par la colonne virtuelle applications. Toutefois, les futures versions d’EMu pourraient permettre de désigner d’autres multimédias comme préférés ; dans ce cas, la colonne application renverra les informations relatives au multimédia d’application préféré plutôt qu’au premier de la liste.
- applications
Renvoie des informations sur tous les multimédias d’application associés à un enregistrement.
-
audio
Renvoie des informations sur le multimédia audio préféré associé à un enregistrement.
- audios
Renvoie des informations sur tous les multimédias audio associés à un enregistrement.
- image
Renvoie des informations sur le multimédia image préféré associé à un enregistrement.
- images
Renvoie des informations sur tous les multimédias image associés à un enregistrement.
- multimedia
Renvoie des informations sur tous les multimédia associés à un enregistrement.
- video
Renvoie des informations sur le multimédia video préféré associé à un enregistrement.
- videos
Renvoie des informations sur tous les multimédias video associés à un enregistrement.
Pour plus d’informations, consultez Multimédia.
Les colonnes virtuelles suivantes ne peuvent être utilisées que dans le module Multimédia :
- master
Retourne des informations sur le fichier multimédia principal.
- resolutions (résolutions)
Renvoie des informations sur toutes les résolutions multimédia.
- resource (ressource)
Renvoie des informations minimales sur le fichier multimédia principal, notamment un descripteur de fichier ouvert pointant vers une copie temporaire de ce fichier multimédia.
- resources (ressources)
Identique à la colonne virtuelle ressource, sauf que des informations et des descripteurs de fichiers sont fournis pour tous les fichiers multimédias.
- supplementary (supplémentaire)
Renvoie des informations sur tous les fichiers multimédias supplémentaires.
- thumbnail (vignette)
Renvoie des informations sur le multimédia vignette.
Pour plus d’informations, consultez Multimédia.
La colonne virtuelle suivante ne peut être utilisée que dans le module Narrations :
- trails
Renvoie des informations sur la position de l’enregistrement actuel dans la hiérarchie du module Narrations.
La colonne virtuelle suivante ne peut être utilisée que dans le module Descriptions des collections :
- extUrlFull_tab
Un ensemble Fetch permet de préenregistrer un groupe de colonnes sous un nom unique. Ce nom peut ensuite être passé à la méthode Fetch pour récupérer les colonnes spécifiées.
Les ensembles Fetch sont utiles si la méthode Fetch est appelée plusieurs fois avec le même ensemble de colonnes, car :
- Les colonnes requises n’ont pas besoin d’être spécifiées à chaque fois que la méthode
Fetchest appelée. Ceci est utile pour maintenir l'état. - Chaque fois que la méthode
Fetchest appelée, le serveur IMu doit analyser les colonnes fournies et les comparer au schéma EMu. Pour les ensembles de colonnes complexes, en particulier ceux impliquant plusieurs références ou références inverses, cela peut prendre du temps.
La méthode de classe IMuModule AddFetchSet est utilisée pour enregistrer un ensemble de colonnes. Cette méthode prend deux arguments :
nameLe nom à utiliser pour l’ensemble de colonnes. La valeur de cet argument peut être passée à n’importe quel appel à la méthode
Fetchet l’ensemble des colonnes spécifié par l’argumentcolumnssera renvoyé.columnsL’ensemble des colonnes à associer à l’argument
name.
La méthode de classe IMuModule AddFetchSets est similaire, sauf que plusieurs ensembles peuvent être enregistrés en même temps.
Les résultats sont renvoyés comme si vous aviez fourni les colonnes directement à la méthode Fetch.
Par exemple :
- Ajouter un ensemble Fetch unique en utilisant la méthode
AddFetchSet:String[] columns = { "NamFirst", "NamLast", "NamRoles_tab" }; parties.AddFetchSet('person_details', $columns); - Ajouter plusieurs ensembles Fetch à l’aide de la méthode
AddFetchSets:IMu.Map sets = new IMu.Map(); sets.Add("person_details", new String[]{ "NamFirst", "NamLast", "NamRoles_tab" }); sets.Add("organisation_details", new String[]{ "NamOrganisation", "NamOrganisationAcronym" }); parties.AddFetchSets(sets);
- Récupérer un ensemble Fetch à l’aide de la méthode
Fetch:ModuleFetchResult result = parties.Fetch("start", 0, 1, "person_details"); foreach (IMu.Map row in result.Rows) { String first = row.GetString("NamFirst"); String last = row.GetString("NamLast"); String[] roles = row.GetStrings("NamRoles_tab"); foreach (String role in roles) { // ⋯ } }
Avertissement
Le nom du set fetch doit être la seule valeur transmise comme argument
columnsde la méthodeFetch. Cela pourrait être modifié dans une future version de l’API IMu.
Les colonnes peuvent être renommées dans les résultats renvoyés en les préfixant d’un autre nom :
first_name=NamFirst
La valeur de la colonne spécifiée est désormais renvoyée sous le nom alternatif :
String[] columns = { "first_name=NamFirst" }; ModuleFetchResult result = parties.Fetch("start", 0, 1, $columns); foreach (IMu.Map row in result.Rows) { String first = row.GetString"first_name"); // ⋯ }
D’autres noms peuvent également être fournis pour d’autres spécifications de colonnes :
roles=NamRoles_tab
synonyms=SynSynonymyRef_tab.(NamFirst,NamLast)
objects=<ecatalogue:CreCreatorRef_tab>.(TitMainTitle,TitObjectCategory)
D’autres noms peuvent également être utilisés pour toutes les colonnes spécifiées entre parenthèses ou crochets :
SynSynonymyRef_tab.(first_name=NamFirst,last_name=NamLast)
contributors=[contributor=NarContributorRef_tab.SummaryData,role=NarContributorRole_tab]
vD’autres noms peuvent également être fournis dans les ensembles Fetch :
String[] columns = { "first_name=NamFirst", "last_name=NamLast", "roles=NamRoles_tab" }; parties.AddFetchSet("person_details", columns);
Un exemple simple
Dans cet exemple, nous créons une application console .Net simple pour rechercher dans le module Personnes / Organisations par nom de famille et afficher l’ensemble complet des résultats.
using System;
using IMu;
namespace a_simple_example
{
class Program
{
static void Main(string[] args)
{
string host = "oxford.man.kesoftware.com";//"imu.mel.kesoftware.com";
int port = 40136;
Session session = new Session(host, port);
// début_exemple
Module parties = new Module("eparties", session);
Terms terms = new Terms();
terms.Add("NamLast", "Smith");
long hits = parties.FindTerms(terms);
String[] columns =
{
"NamFirst",
"NamLast"
};
ModuleFetchResult result = parties.Fetch("start", 0, 2, columns);
// exemple_fin
int count = result.Count;
IMu.Map[] rows = result.Rows;
Console.WriteLine("Count: {0}", count);
Console.WriteLine("Hits: {0}", hits);
Console.WriteLine("Rows:");
foreach (IMu.Map row in rows)
{
int rowNum = row.GetInt("rownum");
long irn = row.GetLong("irn");
String firstName = row.GetString("NamFirst");
String lastName = row.GetString("NamLast");
Console.WriteLine(" {0}. {1}, {2} ({3})",
rowNum, lastName, firstName, irn);
}
Console.WriteLine("Press any key to finish...");
Console.ReadKey();
}
}
}
Dans cet exemple, le paramètre name saisi via la page de recherche HTML est soumis au script .Net. Le script recherche les enregistrements de Personnes / Organisations dont le nom de famille correspond à la valeur saisie et affiche le prénom et le nom dans un tableau HTML.

