Utiliser des liens virtuels dans le modeler

Bonjour,

Dans mon modèle de données, j’ai un objet Flux qui peut être associé à des Flux fils via un lien de Flux vers Flux. Les Flux fils sont associés à des Data.
A l’aide d’un lien virtuel j’affiche dans le Flux père, les Data de ses Flux fils.

Je me demandais s’il était possible d’utiliser ce lien virtuel dans le modeler, c’est à dire sans insérer les fils, afficher leurs Data et les attacher au père. J’ai fait quelques tests et ça n’a pas l’air possible mais je demande au cas où !

Merci d’avance
Emmanuelle

Version=4.0.P25
BuiltOn=2021-01-25 18:55 (revision 8e9b757c68b3391e16a0570ac07b374ccc25a0e6)

Et question subsidiaire si ce n’est pas possible : comment fonctionne l’option Show Field ? Quels champs sont affichés si on choisit “summary” ?

Le but est-il d’afficher les “data” comme des objets avec des relations/fleches vers un “flux” ? ou comme des items d’objet (dans la boite “flux”) ?

Sinon oui, le modeleur sait passer au travers des liens virtuels. Il faut juste configurer les relations dans le bon sens.

  • Le “show field” sert à afficher certains attributs de l’objet dans le Node. “Summary” doit afficher la clé fonctionnelle et les champs non étendus en formulaire (le nom du flux, ses extrémités…). On peut limiter les champs affichés en jouant sur le setMore(true|false) des champs de l’instance “model_ajax_xxx”.
  • Puis les contenus 0,n (lien direct ou virtuel) peuvent aussi s’afficher en dessous des attributs de l’objet
1 Like

C’est une excellente nouvelle que les liens virtuels soient gérés ! Je vais essayer de configurer ça.
Mon besoin est d’afficher les data comme des items d’objet. Donc sur mon node Flux, je veux en items les Data de ses Flux fils.

J’ai testé le show Field mais rien ne s’affiche sur mon node, je ne dois pas le faire correctement :-/

Pas sûr que si on changes le “show fields” après coup, il soit pris en compte dans chaque Node des anciens modèles.

Sinon au niveau du menu contextuel d’un node, il faut activer le “show/hide fields” en plus du “show/hide contents”.

1 Like

J’ai pu configurer le lien virtuel donc c’est très bien pour moi comme ça, merci beaucoup.
Pour plus de lisibilité j’aurais aimé pouvoir changer la couleur de fond des items car j’en ai deux types différents et seul un trait les sépare. Mais j’ai l’impression que ce n’est pas possible ?
Sinon est-il possible de les “titrer” c’est à dire afficher sur le modèle l’intitulé du champ name ?

image

Pour changer l’affichage d’un item, il faut nécessairement passer par le hook onDrawItem du template.
Celui-ci est appelé à chaque affichage d’item de node (titre, fields, contents).

onDrawItem: function(node, data, display) {
   // default rendering
  var g = display();
  // field item ?
  if (data.item && data.item.field && ...) {
     $("rect",g).first().css("fill", "#AAAAFF"); // fill in blue
  }
},

Mettez un point d’arrêt pour voir le contenu de data, le display retourne par défaut un group SVG (inspectable dans le debugger aussi) qui contient un rectangle, un texte, une puce… Mais on peut tout à fait ne pas appeler le display par défaut pour afficher autre chose et binder d’autres événements sur le double-click, etc.

1 Like

Ca marche nickel et le résultat est très joli, merci !

Bonjour, je reviens sur ce ticket car je ne trouve pas le paramètre permettant de réduire les marges des nodes dans le modeler. J’ai une grosse perte de place à cause de ces marges, j’aimerais les ramener au minimum.

J’ai l’impression que c’est proportionnel à la taille du texte mais je ne vois pas où c’est calculé.
Dans le debugger je ne vois que la taille du rectangle en dur.
Y a-t-il un moyen ?

Merci d’avance !
Emmanuelle

C’est plutôt un nouveau sujet.

Le padding est effectivement “en dur” sur un titre, de mémoire il est de 15 si le titre est seul (sans field/content dans le node) alors qu’il est de 6 sinon. En SVG, Simplicité positionne tous les éléments par code, car il n’y a pas de notion de margin/padding css entre les éléments du DOM : pour centrer un <text> dans un <rect> avec un padding, il faut tout calculer positions x,y et tailles w,h, afin d’être supporté par tous les navigateurs (IE supporte un seul alignement de texte, et pas de center…).

Bref, on pourrait rendre paramétrable le padding par code au niveau du onDrawNode par exemple.

Dans votre cas il faudrait plutôt utiliser une shape sans texte, ou surcharger le onDrawNode/display pour afficher un simple cercle car si c’est un objet flux (N,N entre 2 objets) même le libellé n’apporte rien au diagramme.

1 Like

Merci pour ce retour, est-ce que j’ouvre un nouveau ticket ?
J’ai besoin du nom du flux et parfois d’y attacher des items donc je crois que c’est ma seule solution.
Mais sur mon modèle j’ai l’impression que plus le texte est long, plus la marge est grande.

Effectivement c’est étrange, pourtant les paddings sont bien en dur, il doit y avoir une erreur de calcul de la taille totale du node, on va vérifier.

(sinon après vérif c’est Edge qui ne supporte que les “text” en position “baseline” et à cause de qui on doit tout re-calculer pour centrer du texte par exemple).

1 Like

Il y avait bien un soucis entre le style SVG text-anchor:middle du titre des noeuds vides et le calcul de la position du texte qui sert à celui du rectangle au dessus.

Ca a été corrigé et sera poussé sur toutes les versions 4 et 5 asap.

1 Like