Comment traverser sans afficher un lien N-N dans un TreeView

Bonjour,

Dans un treeview je veux afficher l’arbre d’un objet A qui est liée à un objet B par une relation N-N.
J’ai donc fait un lien virtuel pour pouvoir récupérer les objets B liés à A seulement dès que je rempli le filtre du lien virtuel j’ai une erreur, même si je mets uniquement ‘true’ dedans.
J’obtiens cette erreur :
java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: …

Mais lorsque je laisse le filtre vide je n’ai pas d’erreur.

un lien virtuel n’a pas de colonne physique, il est virtuel =

  • le lien virtuel est une search spec SQL ajoutée au “where” de la recherche de B. donc aucun filtre possible dessus, il faut filtrer les champs de B directement pour surfiltrer la search spec.
  • le filtre sur la FK du père est gérée automatiquement par substritution du [row_id] dans votre search spec

D’accord merci,
Mon problème est bien sur le deuxième point, le filtre sur la FK du père ne se fait pas correctement dans mon cas.
J’ai peut-être oublié une action lors de la création du lien virtuel.
Je l’ai créé via la modelBusinessObject en créant un lien 1-N entre mes deux objets et en indiquant pour l’attribut suppression = ignore puis j’ai continué le workflow de création du lien jusqu’à sa fin.

Il y a-t-il une autre étape pour le paramétrage de mon lien virtuel ?

Avez vous bien mis le nom physique de votre champ à vide ?
Envoyez nous le paramétrage de votre Field et du Link pour analyse.

Bonjour,

Je n’avais pas compris ce que vous entendiez par “un lien virtuel n’a pas de colonne physique”, j’ai mis le nom physique de mon field créé par le workflow de création d’un lien à vide et cela fonctionne.

Peut on créer un lien sans passer par ce workflow de création ?

Merci

Les workflows (ou plus exactement des screen-flows ou des wizards dans ce cas d’usage) sont des aides à la saisie de choses qui peuvent se faire unitairement.

Pour un lien virtuel :

  • Créer un attribut de type “Internal Id” sans nom physique (i.e. une foreign key non persistante)

  • Créer un attribut d’objet entre votre objet et ce champ, en indiquant l’objet lié à cette foreign key.

  • Dans le Link, mettre delete cascade à “ignore” et renseigner la search spec pour expliciter les jointures à effectuer`sans la forme d’un morceau de clause à insérer dans le “where”:

    exists (select 1 from ... where ...=t.row_id and ...=[row_id] and ...)

    • avec t = alias de la table de l’objet fils recherché en liste
    • [row_id] sera substitué à l’exécution par l"Id de l’objet père (formulaire, tree item…).