Treeview et liens cachés

Request description

Bonjour, je constate un comportement que je n’arrive pas à expliquer lors de l’utilisation d’un treeview.
Alors que je filtre ce qui devrait apparaitre :

@Override
	public boolean canReference(String obj, String fk) {
	    if (isTreeviewInstance()) {
		    return "BCSIBCBusinessCapability".equals(obj) && "BCMotherId".equals(fk);
	    }
	  return super.canReference(obj, fk);
	}

J’ai le resultat :

En théorie, le deuxième item de la treeview ne devrait pas apparaitre car son fieldName = BCMotherIdWk comme on peut constater dans les logs ci-dessous

Y-a-t-il un détail qui m’échappe ?

Technical information

Instance /health
[Platform]
Status=OK
Version=5.3.45

[Server]
ServerInfo=Apache Tomcat/9.0.93
ServerType=WEB
ServerActiveSessions=1
ServerSessionTimeout=30
CronStarted=true

[OS]
Name=Linux
Architecture=amd64
Version=6.1.90+
DockerImageName=almalinux9
SystemEncoding=UTF-8

[JavaVM]
Version=17.0.12
Vendor=Eclipse Adoptium
VMName=OpenJDK 64-Bit Server VM
VMVersion=17.0.12+7
ScriptEngine=rhino
ScriptEngineVersion=Rhino 1.7.13 2020 09 02


[Database]
Vendor=2
VendorName=mysql
ProductName=MySQL
ProductVersion=5.7.44-google-log
DriverName=MySQL Connector/J


Simplicite logs
BCSIBCBusinessCapability|canReference||Event: Obj = BCSIBCBusinessCapability field = BCMotherIdWk
BCSIBCBusinessCapability|canReference||Event: Obj = BCSIBCBusinessCapability field = BCMotherId

Bonjour,

Il faudrait peut être mieux cibler l’objet/attribut

if (isTreeviewInstance() && "BCSIBCBusinessCapability".equals(obj))
   return "BCMotherId".equals(fk);
...

Sinon vous allez filtrer tous les autres objets aussi dans votre Treeview.

  • Est-ce un lien reflexif sur l’objet ?
  • Et rien ne dit que BCMotherIdWk c’est “Business capability (Parent)” ?

Mettez des logs pour voir ce qui passe dans le hook.

Bonjour François, merci pour ton retour.

  • Est-ce un lien reflexif sur l’objet ?
    En effet, c’est un lien reflexif.

  • Et rien ne dit que BCMotherIdWk c’est “Business capability (Parent)” ?
    Dans les logs que j’ai mis dans mon premier poste, je vois le nom des liens filtrés par la condition.
    Je le vois aussi sur le panel de l’objet en inspectant le html, je vois bien data-key="BCSIBCBusinessCapability_BCMotherId" et data-key="BCSIBCBusinessCapability_BCMotherIdWk" `
    D’ailleurs ce même filtre fonctionne comme attendu sur les panels.

Bonjour,

Effectivement l’arbre parcourt les liens réflexifs sans utiliser de canReference. Il se sert de ce hook pour construire un arbre entièrement dynamique, sinon il utilise la définition des nodes du Treeview.

Pour masquer certains liens réflexifs, à mon avis il faut agir sur votre instance Treeview au niveau de obj.getReflexiveLinks() pour débrayer/retirer les Link que vous ne voulez pas au postLoad.

Sinon il faudrait nous donner un peu plus d’info sur votre modèle d’objets et sur la définition de votre treeview pour reproduire votre cas.