Chemin d'accès pour récupérer une icone via le code

Bonjour,

Dans mon projet, j’ai mis des icones de base du catalogue par défaut de Simplicité, pour représenter chacun de mes objets métier
Lorsque l’utilisateur fait une recherche dans une vue, on lui affiche un visuel représentant sa recherche et pour un soucis de lisibilité, je voudrais reprendre l’iconographie utilisé
Ceci étant, via code javascript, j’ai réussi à récupérer le nom de l’icone, cependant je ne sais comment où est stocké cette icone dans Simplicité

Par exemple, un de mes objets possède l’icone “feedback” dans son paramètrage d’icone


Où se trouve l’icone “feedback” dans Simplicité ? Existe-t-il une méthode qui pourrait renvoyer l’image, ou même une chemin d’accès Simplicité pour pouvoir y accéder

[Platform]
Status=OK
Version=4.0.P24
BuiltOn=2020-04-08 23:09 (revision 83223f7d64877480512f64d623a8c7cb202cc6d5)
DBPatchLevel=P24;83223f7d64877480512f64d623a8c7cb202cc6d5

Cordialement,
KWu

Le nom de l’icon fait partie des metatdata de l’objet envoyé en front :

obj.metadata.icon

et son élément graphique :

$ui.view.icon(obj.metadata.icon)

Dans votre exemple, il suffit d’insérer ce que retourne $ui.view.icon("feedback","myicon") dans votre DOM. ou pour une icone à base de font awesome: $ui.view.icon("far/circle","myicon"), etc.

et où “myicon” peut être une classe CSS à ajouter pour définir votre style (width, color, font-size…).

Je ne sais pas si c’est disponible dans le contexte des vues, mais je rappelle l’existence de l’expression [EXPR:[OBJECTICON:BCSIAbbreviation]] qu’on utilise fréquemment pour les icônes de zones d’attributs, et qui retourne l’icône de l’objet spécifié.

Si ce n’est pas disponible, on pourra penser à généraliser cette expression.

Pourquoi [EXPR:...] ? Ca devrait marcher sans…
Le [EXPR:...] c’est justement fait pour les cas où il pas de tag [<keyword>:...] adapté au besoin

Cette syntaxe n’est pas reconnue dans un template HTML front.
Elle sert en back dans la définition d’un objet pour forcer son icone à être égale à celle d’un autre objet, typiquement une zone d’attributs avec les champs d’un objet lié, avant d’être envoyé dans les metadata de l’objet.

Dites-en nous plus sur la façon de construire votre vue, code front, copie d’écran… car j’ai l’impression que vous réinventez une recherche indexée / multi-objets.

Bonjour,

Dans mon projet, je voudrais juste reprendre l’iconographie afin que le visuel qu’on a ajouté pour le projet soit plus précis pour les utilisateurs
Nous utilisons Cytoscape, j’obtiens ce visuel
cytoscape

Cela est fait à grace à ce code posé dans la vue

cy.add({ data: { id: o.metadata.target.object + "/" + o.metadata.target.rowId, name: o.metadata.userKey }, style: { 'background-image': 'https://live.staticflickr.com/7272/7633179468_3e19e45a0c_b.jpg'} });

J’ai réussi à retrouver le nom de l’icone (dans mon exemple précédent, c’était l’icone “feedback”), je n’ai juste pas le path à mettre dans le ‘background-image’ afin de lui donner l’icone

Cordialement,
KWu

L’URL d’une icone de type image est donnée par l’usage d’une API, il ne faut pas y accéder avec une URL en dur (car la tuyauterie peut être amenée à évoluer, pas l’API) :

app.getIconURL(icon)

Et son élément UI :

$('<img/>').attr("src", app.getIconURL(icon));

et où par exemple app=$ui.getAjax() et icon="feedback"

https://docs.simplicite.io/4.0/jsdoc/Simplicite.Ajax.html

Attention : ça ne marche que pour les icones de type image, si vous utilisez des fonts (glyph ou awesome) comme icone d’objet, il faudra les insérer autrement dans votre code, car ce ne sont pas des URL.

Pour le cas général, il serait donc préférable d’insérer dans votre graph directement l’élément $ui.view.icon(icon) si c’est possible, sans passer par un CSS background.