Afficher les derniers auteurs
1 {{box title="**Sommaire**"}}
2 {{toc/}}
3 {{/box}}
4
5 page en cours de construction
6
7 = A savoir avant de commencer =
8
9 L'export de données muséologiques vers un tableur met en évidence la particularité de leur organisation technique.
10
11 Pour pouvoir répondre aux exigence scientifiques de leur description, il n'est pas possible d'utiliser des grilles de saisie de type tableur, avec juste des lignes et des colonnes, il faudrait un nombre inifini de colonnes.
12
13 Les grilles de saisie dans Flora,s'appuient donc sur deux notions extrèmement puissantes : **les blocs répétables et les champs multivalués**
14
15 == //Comprendre les blocs répétables et les champs multivalués// ==
16
17 Ces deux notions sont fondamentales en informatique muséologique. Elles permettent de s'affranchir des limites techniques imposées par les bases de données traditionnelles (tables de jointures).
18 Historiquement on appelait cela des bases de données XML, aujourd'hui (entre informaticiens) on parlerait plutôt de NoSql
19
20 Ces notions sont fonctionnellement très puissantes en saisie, mais elles imposent quelques rêgles** quand on veut remettre  les données "à plat"** pour des affichages, des impressions, des exports.
21
22 (% class="box infomessage" %)
23 (((
24 Ces rêgles peuvent paraitre "exotiques" quand on a l'habitude de manipuler un tableur ou une base de donnée SQL. Cet article wiki a donc pour but d'expliciter tout ce qui peut etre exploité pour une **"remise à plat sans perte de sens" **de données muséologiques dans un tableur en lignes / colonnes
25 )))
26
27 //Exemple ~://
28
29 [[image:1698219762510-708.png]]
30
31
32 (% class="wikigeneratedid" %)
33 __**Dans un export CSV pour excel ou calc,:**__
34
35 * Par défaut **les champs multivaluées seront concaténés avec un séparateur virgule+espace entre chaque valeur.**.. donc ça marche tout seul
36 ** Exemple : si je demande à exporter juste le champ Auteuir-Exécutant, dans une colonne je récupererai les 4 auteurs ci dessus, séparés par virgule+espace, mais sans savoir de quel "type" ils dépendent
37 * Par contre, pour les blocs répétables, comme il n'est pas possible de générer un nombre de colonnes variables dans l'export, en général **on concaténera les champs d'un même blocs, puis les différentes occurences d'un même bloc dans une seule et unique Colonne**
38 ** Exemple : si je demande à exporter Le bloc "Création-exécution" dans une colonne ,je devrai paramétrer le mode de concaténation des différents champs qu'il contient, aisni que le mode de concaténation  de chaque occurence de bloc. de facto j'aurai besoin de pouvoir paramétrer des séparateurs, ajouter des libellés de champs....bref "formater" la conaténation des blocs
39
40 = Paramètres généraux d'un modele etp =
41
42 dans l'entête du fichier etp les paramétres suivants pourront etre défini
43
44 **<table**
45
46 **name="MUS_STRATIGRAPHIE"**
47 //nom interne de la table à exporter//
48
49 **charset="ISO-8859-1" **
50 //jeu de caractere du fichier résultat
51 Attention, il est préférable de conserver ce paramétre car les publications réalisées sont ensuiote déclarées avec un type mime et une extension CSV, de manière a étre ouvertes automatiquement dans Excel par un double clic sur le nom de fichier//
52
53 **separator="\t"**
54 //Le séparateur tabulation est préférable car il est certain qu'il n'a pas été saisi dans une des notices exportées, la publication génére **donc un fichier CSV mais dont les sépareurs de colonnes sont des tabulations**//
55
56 **compressChar=" ; "**
57 //caracteres utilisé lors de concaténation automatiques de données dans des blocs répétables//
58
59 **newLine="\r\n"**
60 //caracteres délimitant les changement d'enregistrement  \r=chr(13)  |n=chr(10)//
61
62 **multiValueSeparator=', '**
63 //caracteres utiliser pour concaténer les données des champs multivaluées virgule+espace//
64
65 **valueDelimiter='"'>**
66 //ne pas modifier, permet d'englober les contenus de colonne contenant des \n ou des apsotrophes pour éviter und écalage à l'oiuverture du fichier csv publié//
67
68
69 //Exemple ~://
70 [[image:1698143160183-538.png||class="img-thumbnail"]]
71
72
73 = Export d'un champ =
74
75 Les exemples ci aprés sont issus de l'export CSV de la table Stratigraphie, mais sont transposables dans toutes les tables de Flora
76
77 == Formatage automatique selon le mode de saisie ==
78
79 Par défaut, Flora mettra en forme l'export des champs en fonction de leur mode de saisie de la manière suivante
80
81 === Champs texte libre sur une seule ligne ===
82
83 //Exemple ~://
84
85 (% style="text-align:center" %)
86 [[image:1698221408368-344.png||class="img-thumbnail"]]
87
88 La ligne ci dessous génèrera une colonne dont le titre sera égal au label et les contenus alimentés par le champs cité dans name
89
90 **<field name='TYPE_UE'  label='Type Unité d_enregistrement '/> **
91
92 (% class="box warningmessage" %)
93 (((
94 //Attention ne pas mettre d'apostrophe ou guillemets à l'interieur d'un contenu de la balise label (cela génére une erreur bloquante à la publication)//
95 )))
96
97 * **name :** nom interne du champ dans la table Flora
98 * **label : **intitulé qu'aura la colonne dans le fichier csv
99
100 (% style="text-align:center" %)
101 [[image:1698233535559-410.png||class="img-thumbnail"]]
102
103 === Champs texte libre multiligne (avec retours à la ligne) ===
104
105 (% style="text-align:center" %)
106 [[image:1698220705279-359.png||class="img-thumbnail"]]
107
108 **<field name='PRECISION_UE'  label='Précisions UE '/> **aura pour résultat
109
110 (% style="text-align:center" %)
111 [[image:1698220966238-507.png||class="img-thumbnail"]]
112
113 === Champs multivalués liés à des listes, thésaurus ou table d'autorité ===
114
115 (% style="text-align:center" %)
116 [[image:1698220773700-234.png||class="img-thumbnail"]]
117
118 **<field name='INTERPRETATION'  label='Interpretation'/> **aura pour résultat
119
120 (% style="text-align:center" %)
121 [[image:1698221043701-405.png||class="img-thumbnail"]]
122
123 (% class="box infomessage" %)
124 (((
125 Par défaut Flora exporte la valeur "affichée" du champ. c'est à dire le même contenu textuel que ce qui s'affiche dans les vues.
126 Il est possible de demander l'export de la valeur "interne" du champ (code pour les listes, unique_key pour les tables d'autorité, recordId pour les thésaurus), dans ce cas il faut spécifier display=''false' dans le champs field
127 <field name='INTERPRETATION'  label='Interpretation '** display='false"/> **
128 )))
129
130
131 == Formatages personnalisés sur un champ ==
132
133 * **dataBefore :** separateur avant la donnee du champ, répété en cas de multivaluation     (Chaine vide si non defini)
134 * **dataMultiValueSeparator : **separateur de champ multivalue (Si non defini c'est celui qui est defini dans l'attribut   multiValueSeparator du tag 'table', ou si non defini c'est '/' slash par defaut)
135 * **dataAfter : **separateur apres la donnee du champ répété en cas de multivaluation   (Chaine vide si non defini)
136
137 **Exemple : <field name='INTERPRETATION'  label='Interpretation'  dataBefore="texte avant " dataAfter=" texte aprés" dataMultiValueSeparator=" ; "/>**
138
139 (% style="text-align:center" %)
140 [[image:1698221647528-156.png||class="img-thumbnail"]]
141
142 (% class="box infomessage" %)
143 (((
144 **Truc et astuce : **utiliser des retours lignes comme séparateur **avec \n **peut améliorer la lisibilité des données dans le tableur
145 )))
146
147 **<field name='INTERPRETATION'  label='Interpretation'  dataBefore="texte avant : " dataAfter=" (texte aprés)" dataMultiValueSeparator="\n"/>**
148
149 (% style="text-align:center" %)
150 [[image:1698221798735-336.png||class="img-thumbnail"]]
151
152 == Exporter une valeur constante ==
153
154 Toutes les lignes auront la même valeur dans la colonne
155
156 **<constant name="C1" label="Constante1"  dataDefValue="myConstante1" />**
157
158 (% style="text-align:center" %)
159 [[image:1698229509017-535.png||class="img-thumbnail"]]
160
161 == Exporter un ou plusieurs champs d'une table d'autorité liée ==
162
163 (% class="wikigeneratedid" %)
164 par défaut, les champs liés à des table d'autorité s'exportent avec la concaténation standard  des champs de la table liée (dans Flora on appelle ça le digest de la table, il est défini dans le fichierconf/local/musee/db/A.musee.xml  digest ou link-digest s'il est défini).
165 De facto, tout se retrouve dans une seule et même colonne
166
167 (% class="wikigeneratedid" %)
168 **Exemple avec le champ qui lie la Table Stratigraphie à la Table Opération**
169
170 (% class="box infomessage" %)
171 (((
172 pour la table Opération le link-digest est composé des champs suivants
173 <concat param1="TYPE_OPERATION,30/NOM,50, : /NUM_IDENTIFIANT,20, - /OPERATEUR,60,- /DATE_OPERATION_DEBUT,20, du /DATE_OPERATION_FIN,20, au  "/>
174 )))
175
176 (% class="wikigeneratedid" %)
177 A minima, l'export sera réalisé ainsi, avec le champ DISPLAY_OPERATION qui n'est pas répété ni multivalué. c'est un champ caché de Flora qui ne contient que la première de toutes les opérations potentiellement liées à la notice stratigraphie
178
179 (% class="wikigeneratedid" %)
180 **<field name='DISPLAY_OPERATION'  label='Opération1'/> **
181
182 (% class="wikigeneratedid" %)
183 [[image:1698222516214-545.png]]
184
185 (% class="wikigeneratedid" %)
186 il est donc possible "d'éclater" les champs de la table liée par colonne via le **linked_field. **Chaque champ exportée de la table liée sera positionné dans un colonne dédiée. de cette manière on n'est p^lus bridé par le digest ou le link-digest
187
188 (% class="wikigeneratedid" %)
189 **<linked_field name='DISPLAY_OPERATION'>
190 <field name='NUM_IDENTIFIANT' label="Identifiant Opération"  />
191 <field name='TYPE_OPERATION' label="Type opération" dataBefore="(" dataAfter=")" />
192 </linked_field>**
193
194 (% class="wikigeneratedid" %)
195 [[image:1698222350876-551.png]]
196
197
198 SI on utilise le champ OPERATION (dans le bloc découverte de la grille de saisie), IL est possible d'y saisir plusieurs Opérations liées
199 Dans ce cas, le découpage sera respecté dans chacune des colonnes, mais il ny' aura toujours que 2 colonnes
200
201 **<linked_field name='OPERATION'>
202 <field name='NUM_IDENTIFIANT' label="Identifiant(s) Opération"  />
203 <field name='TYPE_OPERATION' label="Type opération(s)" dataBefore="(" dataAfter=")" />
204 </linked_field>**
205
206 [[image:1698222944107-105.png]]
207
208
209 (% class="box infomessage" %)
210 (((
211 **Question : **pourquoi y a t'il parfois des virgule et des points virgules entre chaque valeur de la colonne Type opération.. d'ou viennent ces points virgules ?
212 **Réponse : **en fait L**e champ Opération(s) dans la table Stratigraphie n'est pas multivalué mais il est positionné dans un bloc répétable**
213
214 (% style="text-align:center" %)
215 [[image:1698226080684-439.png||height="478" width="1071"]]
216
217 **Rappel : **
218 Dans les paramétrages généraux du fichier etp on a défini **compressChar=" ; " **//caracteres utilisés lors de concaténation automatiques de données dans des blocs répétables. c'est donc lui qui est utilisé dans le cas présent . les points virgules marquent donc les séparations de blocs répétables//
219 Et on a aussi défini **multiValueSeparator=', ' **//caracteres utiliser pour concaténer les données des champs multivaluées virgule+espace c'est donc lui qui est utilisé dans le cas présent pour lexport du champ TYpe Opération de la table Opération..champ qui est multivaléu dans ladite table//
220
221
222 (% style="text-align:center" %)
223 [[image:1698226465622-838.png||height="285" width="966"]]
224
225
226 Cet exemple illustre la complexité de manipulation des données muséologique car les blocs répétables et champs multivalués y sont légion
227 Mais il faut retenir que le paramétrage par défaut des exports etp gére tout cela de manière transparente avec des réglages par défaut qui rendent les données lisibles à minima
228 )))
229
230 = Concaténation libre de champs dans une seule colonne =
231
232 Dans de nombreux  cas il sera nécéssaire de regrouper différents champs de la table dans une seule et même colonne
233
234 //Exemple : concaténer tous les champs de Données intrinsèque d'une notice Stratigraphie dans une seule colonne//
235
236 (% style="text-align:center" %)
237 [[image:1698234060502-846.png]]
238
239 De facto il sera judicieux
240
241 * de ne pas perdre les libellés de champs (on les indiquera dans **dataBefore**)
242 * de n'avoir des séparateurs de champs que si un au moins des champs précédents est non vide...sinon le contenu de la colonne commencera par un séparateur (on les indiquera dans **dataJoinSeparator**)
243
244 == A minima ==
245
246 on va donc créer une "boite" qui va assembler les données de la colonne en concaténant les champs cités
247
248 **<concat name="donnees_descr_intr label="Données descriptives intrinsèques">**
249 <field name='TEXTURE'  dataBefore='Texture '/> 
250 <field name='STRUCTURE' dataBefore='Structure ' dataJoinSeparator=" ; "/> 
251 <field name='COULEUR'  dataBefore='Couleur ' dataJoinSeparator=" ; "/> 
252 <field name='RISQUE_INTRUSION'  dataBefore='Risque d_intrusion ' dataJoinSeparator=", " />
253 <field name='DESCRIPTION_INTRINSEQUE'  dataJoinSeparator="\n"/>
254 **</concat>**
255
256
257 [[image:1698234916860-664.png]]
258
259 == Ajout de données avant - aprés ==
260
261 Cette "boite" concat est vue comme un "groupe" de données. a ce titre il est possible de lui adjoindre les paramétres suivants
262
263 * **groupDataBefore **: donnee avant le groupe
264 * **groupDataAfter **: donnee apres le groupe
265
266 **<concat name="donnees_descr_intr label="Données descriptives intrinsèques"**
267
268 **~ groupDataBefore="texte avant le groupe\n"**
269
270 **~ groupDataAfter="\ntexte aprés le groupe"**
271
272 **>**
273 <field name='TEXTURE'  dataBefore='Texture '/> 
274 <field name='STRUCTURE' dataBefore='Structure ' dataJoinSeparator=" ; "/> 
275 <field name='COULEUR'  dataBefore='Couleur ' dataJoinSeparator=" ; "/> 
276 <field name='RISQUE_INTRUSION'  dataBefore='Risque d_intrusion ' dataJoinSeparator=", " />
277 <field name='DESCRIPTION_INTRINSEQUE'  dataJoinSeparator="\n"/>
278 **</concat>**
279
280 //A noter les \n qui se transforment en retour à la ligne dans la colonne et le datajoinSeparator qui poermet de choisir si on veut un point virgule ou un retour ligne entre chaque champs//
281
282 [[image:1698235351939-869.png]]
283
284 == Ajout de données par défaut entre les champs du groupe ==
285
286 Dans l'exemple ci-aprés, on a positionnés les séparateurs de champs dans chacun des champs avec le DataJoinSeparator
287
288 on pourrait aussi définir une valeur par défaut pour tous les champs du groupe, le **subGroupDataSeparator** ce qui simplifie le paramétrage
289
290 <concat name="donnees_descr_intr" label="Données descriptives intrinsèques"
291 groupDataBefore="texte avant le groupe\n"
292 groupDataAfter="\ntexte aprés le groupe"
293
294 **subGroupDataSeparator=" - champ suivant - "**
295
296 **~ >
297 **<field name='TEXTURE'  dataBefore='Texture '/> 
298 <field name='STRUCTURE' dataBefore='Structure ' /> 
299 <field name='COULEUR'  dataBefore='Couleur ' /> 
300 <field name='RISQUE_INTRUSION'  dataBefore='Risque d_intrusion '  />
301 <field name='DESCRIPTION_INTRINSEQUE'  **dataJoinSeparator="\n"/>**
302 **</concat>**
303
304 //**A noter : **comme on a conservé un DataJoinSeparator sur le dernier champ (car on voulait un retour ligne dans ce cas),le subGoupDAtaSeparator ne s'y applique pas car ce n'est qu'une valeur par dfaut//
305
306 //**résultat obtenu :** Nous avons mis en rouge le subGoupDataSeparator  pour bien comprendre qu'il s'applique "à chaque champ", mais pas à chaque valeur d'un champ multivalué.
307 Dans notre jargon technique on dira que le field dans un concat est un sous-groupoe//
308
309 [[image:1698235881598-485.png]]
310
311 (% class="box infomessage" %)
312 (((
313 les notions de subGroupDataBefore et subGroupDataAfter peuvent aussi etre paramétrées mais n'ont pas grand intéret dans les concat, elles seront plutôt utilisées dans le cas des blocs répétables
314 )))
315
316 = Export des champs d'un bloc répétable =
317
318 Tout ce qui est décrit ci dessus sera exploitable dans les exports de bloc répétable.Un export de bloc répétable pourra contenir des fields, des linked_field, des concats, des constantes
319
320 Globalement il ressemblera beaucoup à un concat, à la différence prés qu'un concat ne se joue qu'une seule fois, alors que le bloc de champs se jouera dans l'export autant de fois qu'il y a de groupe saisis dans la notice courante
321
322 (% class="box infomessage" %)
323 (((
324 On peut se representer cela comme une boucle d'éxécution qui tournera tant qu'il existe encore un bloc répété à exporter
325 )))
326
327 //Exemple avec un bloc de champ répétable contenant 3 champs avec une saisie lacunaire (il est rare que tous les champs soient remplis dans un bloc)//
328
329 (% style="text-align:center" %)
330 [[image:1698249410427-526.png||class="img-thumbnail"]]
331
332 le paramétrage de l'export sera défini tel que :
333
334 **~ <group_field name="INTERVENANT"
335 groupDataType              = "group"
336 label                      = "Intervenants"
337 groupDataSubGroupSeparator = "\n\n"
338 \\>  **
339
340 **~ <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
341 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
342 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"/> 
343 </group_field>**
344
345 et génerera la colonne ci dessous
346
347 (% style="text-align:center" %)
348 [[image:1698249964685-586.png||class="img-thumbnail"]]
349
350 (% class="box infomessage" %)
351 (((
352 Les labels des field dans un group_field de type group ne sont pas exportés, nous les conservons pour que le fichier etp soit plus lisible car on ne connait pas toujours les noms internes de champs (name)
353 Dans ce cas, les "Sous groupe" seront alimentés via une boucle tournant sur chaque occurence de bloc, générant au final une seule colonne
354 )))
355
356 La nouveauté ici c'est le **groupDataSubGroupSeparator **qui permet de définir le séparateur qui s'exporte **entre chaque sous-groupe** (deux sauts de ligne \n dans le cas présent)
357
358 (% class="box infomessage" %)
359 (((
360 Un sous-groupe est un ensemble de champs qui appartiennent a la même entite :  au meme bloc de champs (type=set), a la même notice liée ou a la même notice qui référence la notice courante
361 )))
362
363 Il est possible de choisir un** type= "sous groupe"**
364
365 <group_field name="INTERVENANT"
366 **groupDataType   ** = **"SubGroup"**
367 label                      = "Intervenants"
368 ~> 
369
370 <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
371 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
372 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"/> 
373 </group_field>
374
375 (% class="wikigeneratedid" %)
376 Dans ce cas chaque élément du groupe générera sa propre colonne, donc ce n'est pas trés différent d'avoir positionné ces 3 champs directement dans le template etp, sans tenir compte du group_field, ou bien directement dans un concat, mais avec la contrainte de ne pouvoir y inclure que des champs du bloc répétable courant
377
378
379 A noter que pour les type=SUbGroup le label du group_field est ignoré et que ce sont les labels de chaque élément qui sont pris en compte dans les intitulé de colonne
380
381 (% style="text-align:center" %)
382 [[image:1698308536947-443.png||class="img-thumbnail"]]
383
384
385 == Paramétrages complémentaires pour les blocs répétables ==
386
387 il est possible d'inclure aussi dans un group_field
388
389 * une concaténation formalisée des champs du bloc répétable courant via le tag concat
390 * des champs des notices liées a un des champs du bloc via le tag 'linked_field'
391 * des notices qui référencent la notice courante : tag 'reference' pour les liens parent/enfants. ce tag est étudié plus loin dans l'article
392
393 === Ajout de données avant - après chaque sous-groupe ===
394
395 * **subGroupDataBefore **: séparateur avant les données d'un sous-groupe   (Chaine vide si non défini)
396 * **subGroupDataSeparator **: séparateur entre les données d'un sous-groupe   (Espace si non défini)
397 * **subGroupDataAfter **: séparateur après les donnes d'un sous-groupe    (Chaine vide si non défini)
398
399 === Ajout de données avant - après le groupe ===
400
401 Uniquement si groupDataType="group" car la colonne unique contiendra une concaténation de tous les  sous-groupes en un seul groupe
402
403 * **groupDataBefore **: séparateur avant les données du groupe    (Chaine vide si non défini)
404 * **groupDataSubGroupSeparator **: séparateur entre les sous-groupes   (' / ' espace slash espace si non défini)
405 * **groupDataAfter **: séparateur après les données du groupe   (Chaine vide si non défini)
406
407 === Exemple global ===
408
409 <**group_field **name="INTERVENANT"
410 groupDataType              = "**group**"
411 label                      = "Intervenants"
412 groupDataBefore            = "- texte avant le groupe -\n"
413 groupDataSubGroupSeparator = "\n{séparateur par défaut entre les sous groupe}\n"
414 groupDataAfter             = "\n-texte aprés le groupe"
415 subGroupDataBefore         = "- texte avant le sousgroupe - "
416 subGroupDataSeparator      = " {séparateur par défaut dans le sous groupe} "
417 subGroupDataAfter          = " - texte aprés avant le sousgroupe -"
418 \\>
419 \\ <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
420 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
421 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"/> 
422 </group_field>
423
424 (% style="text-align:center" %)
425 [[image:1698310122900-966.png||class="img-thumbnail"]]
426
427 == Filtre sur les données du groupe ==
428
429 D'un certaine manière un bloc répétable peut être considéré comme une table liée embarquée dans la notice courante
430
431 Il sera donc possible de filtrer les occurences d'un bloc répatable en fonction du contenu d'un ou de plusieurs de ces champs avec une syntaxe de type Sql [NOM_DU_CHAMP] opérateur [VALEUR]. De facto seuls les blocs répondant à cette condition seront exportés , les autres seront ignorés
432
433 === Masquer des sous-groupes ===
434
435 //Exemple : je voudrais n'exporter que les blocs Intervenants dont le champ Fonction est rempli//
436
437 <**group_field **name="INTERVENANT"
438 groupDataType              = "**group**"
439 label                      = "Intervenants"
440 **subGroupDataFilter         **= "(FONCTION_INTERVENANT != null)"
441 groupDataBefore            = "- texte avant le groupe -\n"
442 groupDataSubGroupSeparator = "\n{séparateur par défaut entre les sous groupe}\n"
443 groupDataAfter             = "\n-texte aprés le groupe"
444 subGroupDataBefore         = "- texte avant le sousgroupe - "
445 subGroupDataSeparator      = " {séparateur par défaut dans le sous groupe} "
446 subGroupDataAfter          = " - texte aprés avant le sousgroupe -"
447 \\>
448 <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
449 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
450 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"/> 
451 </group_field>
452
453
454 Seul le bloc n° 2 est exporté
455
456 (% style="text-align:center" %)
457 [[image:1698310843667-475.png||class="img-thumbnail"]]
458
459 === Masquer des champs dans un sous-groupe ===
460
461 //Exemple : je voudrais n'exporter que les blocs Intervenants dont le champ Fonction est rempli//
462
463 <group_field name="INTERVENANT"
464 groupDataType              = "**group**"
465 label                      = "Intervenants"
466 groupDataBefore            = "- texte avant le groupe -\n"
467 groupDataSubGroupSeparator = "\n{séparateur par défaut entre les sous groupe}\n"
468 groupDataAfter             = "\n-texte aprés le groupe"
469 subGroupDataBefore         = "- texte avant le sousgroupe - "
470 subGroupDataSeparator      = " {séparateur par défaut dans le sous groupe} "
471 subGroupDataAfter          = " - texte aprés avant le sousgroupe -"
472 \\>
473 \\ <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
474 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
475 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"  **inputGroupFieldFilter="(FONCTION_INTERVENANT is null)**"/> 
476 </group_field>
477
478 dans le lLoc n° 2  le cchamp PRECISIONS_INTERVENANT n'est pas exporté
479
480 (% style="text-align:center" %)
481 [[image:1698311103593-686.png||class="img-thumbnail"]]
482
483 === Limiter le nombre de sous-groupe exportés ===
484
485 (% class="wikigeneratedid" %)
486 **subGroupDataMultMaxi**="1" fera en sorte que seul le premier bloc sera exporté
487
488 (% class="wikigeneratedid" %)
489 **subGroupDataMultMaxi**="4" fera en sorte que seuls les 4 premiers blocs seront exportés
490
491 == Imbrication de groupes ==
492
493 Il n'y a pas de limite au nombre de niveaux imbriqués, il est donc possible de "suivre" la strucre hiérarchique d'un bloc répétable
494
495 Exemple avec les lots archéo
496
497 <group_field name="LOT_ELEMENT"
498 groupDataType              = "group"
499 label                      = "Archéo - lot"
500 groupDataSubGroupSeparator = "\n\n"
501 subGroupDataSeparator      = ""
502 >
503 <field name='DOMAINE_ELEMENT' />
504 <field name='DENOMINATION_ELEMENT' dataJoinSeparator=" ; " />
505 <field name='APPELLATION_ELEMENT' dataJoinSeparator=" ; " />
506 <field name='TYPOLOGIE_ELEMENT'  dataJoinSeparator=" ; " />
507
508 <group_field name="LOT_DENOMBREMENT"
509 groupDataType              = "group"
510 label                      = "Element - lot"
511 groupDataBefore ="\n"
512 groupDataSubGroupSeparator = " ; "
513 subGroupDataSeparator      = ""
514 >
515 <field name='LOT_TYPE_ELEMENT' dataBefore="" />
516 <field name='LOT_NB_FRAGMENTS' dataBefore=" (" dataAfter=")"/>
517 <field name='LOT_QTE_ESTIMEE' dataBefore=" (" dataAfter=")"/>
518 </group_field>
519
520 <field name='ELEMENT_NB_FRAGMENT'  dataJoinSeparator="\nNb Tot. " />
521 <field name='ELEMENT_NMI'  dataJoinSeparator="\nNMI " />
522 <field name='ELEMENT_POIDS'  dataJoinSeparator="\nPoids " dataAfter=" g" />
523 <field name='ELEMENT_PRECISION'  dataJoinSeparator="\n" />
524 </group_field>
525
526 (% style="text-align:center" %)
527 [[image:1719328382500-862.png||class="img-thumbnail"]]
528
529 = Export des via des liens par héritage (référence) =
530
531 Des notices qui référencent la notice courante : tag 'reference'
532
533 Actuellement ce tag s'appuie sur l'index Q des liens inverses entre table (sans précision du champ qui établit le lien).
534
535 ON ne pourra donc pas l'utiliser pour faire remonter la liste des notices filles liées à une notice méré car dans MUS_BIEN plusieurs champs sont liés à MUS_BIEN
536
537 (% class="box infomessage" %)
538 (((
539 A noter c'est **compressChar **en entete qui est utilisé comme séparateur  de notices liées
540 )))
541
542 il permettra par exemple de
543
544 == lister les notices récolement ou constat d'état liées à un bien dans un export des biens ==
545
546 <?xml version="1.0" encoding="ISO-8859-1"?>
547 <export-conf>
548 <table name="MUS_BIEN" charset="ISO-8859-1" separator="\t"** compressChar="\n" **newLine="\r\n" multiValueSeparator=', ' valueDelimiter='"'>
549
550 <field name='UNIQUE_KEY'  label='Unique Key'/> 
551 <field name='MUSEE'  label='Préfixe'/>
552 <field name='NUM_INVENTAIRE'  label='Numéro D'inventaire'/>
553
554 **<reference source='musee' table='MUS_RECOLEMENT'**
555 groupDataType         = "subGroup"
556 label                 = "Récolements et localisations"
557 subGroupDataBefore    = ""
558 subGroupDataSeparator = ", "
559 subGroupDataAfter     = "" >
560
561 <field name='ETAT_MODIFIE_LE'  label='Réalisé le/> 
562 <field name='ETAT_MODIFIE_PAR'  label='Réalisé par/> 
563 **<linked_field name='EMPLACEMENT' label='Emplacement théorique'>**
564 <field name='LABEL_PARENT' label='Empl. référence hiéra' display='true'/>
565 </linked_field>
566
567 **~ <linked_field name='EMPLACEMENT_NOUVEAU' label='Emplacement nouveau'>**
568 <field name='LABEL_PARENT' label='Empl. référence hiéra' display='true'/>
569 </linked_field>
570 </reference>
571
572
573 Il serait théoriquement possible de filtrer récolement
574
575 **subGroupDataFilter         **= "(ETAT_AVANCE_RECOL != '6')"
576
577 et relocalisations
578
579 **subGroupDataFilter         **= "(ETAT_AVANCE_RECOL = '6')"
580
581 == lister les notices exemplaires liées à une notice bib ==
582
583 <?xml version="1.0" encoding="ISO-8859-1"?>
584 <export-conf>
585 <table name="UNIMARC" charset="ISO-8859-1" separator="\t" compressChar="||" newLine="\r\n" >
586
587 ....
588
589 <linked_field name='712a'>
590 <field name='210a' label='712a-Nom' display='true'/>
591 <field name='210b' label='712a-Subdivision' display='true'/>
592 </linked_field>
593
594 <reference source='system' table='ICOMM_ITEM'
595 groupDataType         = "subGroup"
596 label                 = "Exemplaires"
597 subGroupDataBefore    = "{ "
598 subGroupDataSeparator = ", "
599 subGroupDataAfter     = "}" >
600 <field name='STATUS' label='EX-STATUS_DISPLAY' display='true'/>
601 <field name='CODE'   label='Ex-CODE' display='false'/>
602 <field name='SITE'   label='Ex-Bibliothèque' display='true'/>
603 </reference>
604
605
606 == lister les biens liés à un colis ==
607
608 (% class="box infomessage" %)
609 (((
610 A noter : le tag reference peut imbrique des linked_field, ce qui permet de remonter jusqu'à MUS_BIEN en passant par MUS_JOIN_COLIS
611 )))
612
613 <?xml version="1.0" encoding="ISO-8859-1"?>
614 <export-conf>
615 <table name="MUS_COLIS" charset="ISO-8859-1" separator="\t" **compressChar="\n"** newLine="\r\n" multiValueSeparator=', ' valueDelimiter='"'>
616
617 <field name='ETAT_MODIFIE_LE'  label='Etat modifié le'/>
618 <field name='ETAT_AVANCE_COLIS'  label='Etat d_avancement'/>
619 <field name='UNIQUE_KEY'  label='Numéro de Code'/>
620
621 <linked_field name='LOCATION_REFERENCE' label='Emplacement de référence'>
622 <field name='LABEL_PARENT' label='Empl. référence hiéra' display='true'/>
623 </linked_field>
624 <linked_field name='LOCATION_CURRENT' label='Localisation actuelle '>
625 <field name='LABEL_PARENT' label='Loc. Actuelle hiéra' display='true'/>
626 </linked_field>
627
628 **<reference source='musee' table='MUS_JOIN_COLIS'**
629 groupDataType         = "subGroup"
630 label                 = "Biens liés"
631 subGroupDataBefore    = ""
632 subGroupDataSeparator = ", "
633 subGroupDataAfter     = "" >
634
635 *
636 ** <linked_field name='BIEN' label='Bien'>
637 **~ <field name='DISPLAY' label='Bien' display='true'/>
638 </linked_field>
639
640 </reference>**
641
642 **<reference source='musee' table='MUS_JOIN_COLIS_MOUV'**
643 groupDataType         = "subGroup"
644 label                 = "Biens en mvmnt liés"
645 subGroupDataBefore    = ""
646 subGroupDataSeparator = ", "
647 subGroupDataAfter     = "" >
648 **<linked_field name='MOUVEMENT_BIEN' label='Bien'>**
649 <field name='DISPLAY' label='Bien' display='true'/>
650 </linked_field>
651 </reference>
652
653
654 = Autres paramétrages =
655
656 == Conversions de dates et datations ==
657
658 **dataDateFormatDisplay**='yyyy-MM-dd'
659
660 dataDateFormatDisplay='yyyy'
661
662 .....
663
664 //Cela fonctionne pour les champs dates, time et datation//
665
666 time <field name='CREATE_DATE'  label='Saisi le' dataDateFormatDisplay='yyyy-MM-dd'/>
667
668 date <field name='ETAT_MODIFIE_LE'  label='Etat modifié le ' dataDateFormatDisplay='yyyy-MM-dd'/>
669
670 datation <field name='DATATION_BIEN_DEBUT' dataDateFormatDisplay='yyyy' /> Pour l'instant les dates Avant Jésus-Christ ne sont pas mentionnées comme telmes quand on applique cette conversion
671
672 (% class="box infomessage" %)
673 (((
674 Attention Excel applique ensuite ses propres automates de formatage à l'ouverture du fichier
675 )))
676
677 == valeur par défaut ==
678
679 **dataDefValue**="maValeurtextuelle"
680
681 si le field, linked_field, concat, group_feld est vide, c'est cette valeur qui sera exportée
682
683 //Exemple : utilisé dans l'export e-recolnat pour avoir par défaut la colonne langue = FR sans devoir la saisir dans toutes les notices. si le champ Langue de  notice est non vide il écrasera la dataDefValue//
684
685 == Données textuelles ajoutées en multilangue ==
686
687 Flora gére des fichiers de mots clés pour la traduction des labels textuels dans les différentes languies (dans les fichiers *.properties)
688
689 [[image:1698311785574-970.png||height="133" width="841"]]
690
691 ces mots clés peuvent etre utilisés dans toutes les valeurs textuelles posées dans les tags
692
693 //Exemple//
694
695 <field name='TYPE_UE'  label='Type Unité d_enregistrement ' dataBefore='**${menu.label.inventory} **: '/>
696
697 (% style="text-align:center" %)
698 [[image:1698311964289-353.png||class="img-thumbnail"]]
699
700
701 == Export des liens ark vers les images ==
702
703 Il est toujorus délicat d'incorporer les images en tant que telles dans une colonne excel ou calc car cela rend enuite le fichier difficile à manipuler, et dans le cas de calc elels ne suivent pas les tris réalisés sur le tableau ce qui rend les onnées incohérentes
704
705 de plus sur de gros volumes cela peut générer des fichiers de trop grande taille, surtout si on intégre les images originales au liue de se contenter des imagettes
706
707 Nous avons donc choisi de publier les images dans les tablmeurs vai des liens ark
708
709 la colonne devra donc etre paramétrée ainsi
710
711 **name="PHOTO_INV" **=nom du champ contenant le lien vers la phototheque (si l'export concerne MUS_PHOTO on indiquera UNIQUE_KEY)
712
713 **subGroupDataMultMaxi="1" **Nombre de notices photos lues**, **il est recommandé de ne mettre qu'un seul lien ark car de facto le lien sera automatiquemenrt clicable dans excel (aprés avoir cliqué dans la cellule)
714
715 **dataMultMaxi="1" **Nombre de fichiers images lus par notice photo, il est recommandé de ne mettre qu'un seul lien ark car de facto le lien sera automatiquemenrt clicable dans excel (aprés avoir cliqué dans la cellule)
716
717 **dataBefore="${flora-url}/ark:**" reprendra automatiquement la racine de l'url de votre applucation flora. SI cette url est accessible par internet et que vous avecz activé le service ark sur votre application, la visualisation des uimages sera possible sur tout poste de travail connecté à internet
718
719 **dataAfter="/low" **renverra l'imagette,
720
721 * si on met** /medium **on aura un fichier de 800 pixels,
722 * si on met **/high** on aura l'image originale non redimensionnées (mais pas la THDEF)
723
724 <linked_field name="PHOTO_INV"
725 label="Image"
726 inputRecordFilter=""
727 groupDataType="group"
728 subGroupDataSeparator=" ~~ "
729 subGroupdataMultiValueSeparator="|"
730 subGroupDataMultMaxi="1"
731 >
732
733 <class_extractor
734 extractorClassName="com.ezida.services.musee.extractor.MusPhotoArkExtractor"
735 name="PHOTO_INV_ARK"
736 label=""
737 inputRecordFilter=""
738
739 dataJoinSeparator="|"
740 dataMultiValueSeparator="|"
741 dataMultMaxi="1"
742 dataBefore="${flora-url}/ark:"
743 dataDefValue=""
744 dataAfter="/low"/>
745 </linked_field>
746
747
748 résultat obtenu.. avec un clic sur le lien ark exporté
749
750 (% style="text-align:center" %)
751 [[image:1698400681257-169.png||class="img-thumbnail"]]
752
753
754 Avec Excel vous pouvez utiliser ce lien ark pour intégrer l'image dans la cellule si vous le souhaitez, mais ce n'est pas automatique. le plus simple est de procéder par copie d'écran partielle
755
756 * Touche Impr Ecran de votre ordinateur,
757 * selection de la zone image à copier,
758 * puis Edition/coller dans la cellule de votre choix
759
760 SI aprés avoir appuyé sur Impr Ecran vous ne pouvez pas selectionner une zone à l'écran, utilisez un outil de capture. dans le présent arcticle nous avons utilisé le freeware Screenpresso
761
762 //Note ! La ligne excel ne s'agrandit pas toute seule, à vous de le faire pour garder une bonne lisibilité. Dans Excel, si vous triez les lignes, les images ainsi collées vont suivre (mais pas dans calc de Libre office)//
763
764 [[image:1698401052018-622.png]]
765
766
767
768
769