Ouverture d'un objet externe hors d'une vue

Bonjour,

Afin de créer un objet métier, je passe d’abord par un objet externe, accessible via un bouton d’action ([EXPR:HTMLTool.getExternalObjectURL(“objet externe”, “nav=new”)], afin de préremplir manuellement certaines informations, puis automatiquement d’autres grâce au code spécifique.
Côté Java, mon objet hérite de ResponsiveExternalObject.

Le problème est que lorsque l’utilisation du bouton d’action se fait sur la vue d’accueil, alors l’objet externe est affiché dans la vue. Je souhaite que l’affichage se fasse hors de cette vue :


J’ai tenté de manipulé les paramètres URL, notamment avec nav=new, mais je toujours “coincé” dans la vue.

Or, l’affichage cible est celui-ci, obtenu en ajoutant l’objet externe à la liste du menu déroulant :

Est-ce qu’il y a une solution pour ouvrir l’objet externe pour s’affranchir de la vue présente ?

Par avance, merci.

Romain

Bonjour,

[EXPR:HTMLTool.getExternalObjectURL(“objet externe”, “nav=new”)]
est une syntaxe legacy V3 qui ne permet pas de spécifier dans quel container on veut afficher la réponse.

Depuis la V4, il est préférable de toujours utiliser les API front pour afficher un contenu ($ui.loadURL, $ui.displayForm, $ui.displayList…) qui ont toujours le container en paramètre. Si on met null, ça ira dans #work = la zone principale.

L’action front devra être un javascript pour s’exécuter en front :

// null = zone de travail
javascript:$ui.loadURL(null, $app.getExternalObjectURL("MyObjExt", "nav=new"))

// ou si on veut la charger dans une div de son template de formulaire
javascript:$ui.loadURL($("#mydiv"), $app.getExternalObjectURL("MyObjExt", "nav=new"))

nav=new sert juste à créer un nouveau fil d’ariane en haut de page, ça n’indique pas où afficher le contenu.

($app doit être $ui.app en V5.3)

Merci pour votre réponse.

Lorsque j’avais tenté de passer par une syntaxe en javascript, je n’obtenais pas un affichage correct du HTML. Il ne s’affiche que sous forme de JSON. Là, c’est encore le cas :

Est-ce que c’est parce que je passe par une classe Java héritant de ResponsiveExternalObject et utilisant la méthode surchargée : public JSONObject data(Parameters params) ou il s’agit d’une question de paramètres systèmes à ajuster ?

Lorsque je tente d’indiquer une div contenu dans le HTML de mon objet externe (exemple ci-dessus id=“createS4”) alors rien ne s’affiche.

Infos techniques :
Simplicité version5.3.44
Built on2024-07-25 12:00
OSLinux amd64 3.10.0-1160.118.1.el7.x86_64
ServerApache Tomcat/9.0.91 WEB
DatabaseMySQL 5.5.68-MariaDB using BLOBs
JVM17.0.1 Eclipse Adoptium OpenJDK 64-Bit Server VM 17.0.1+12

A mon avis il faut forcer l’affichage en dehors d’une iframe de la réponse :

$ui.loadURL(
  null, // default work area
  $app.getExternalObjectURL("MyObjExt", { nav:"new" }), // https:.../ext/...
  { noiframe: true } // inline content
)

cf
https://platform.simplicite.io/current/jsdoc/Simplicite.UI.Loader.html#loadURL

  • Si l’URL est complète (commence par http), Simplicité affiche le contenu dans une iframe par défaut pour isoler tout contenu qui viendrait d’ailleurs.

  • Si l’URL est relative (commence par /), le contenu est directement interprété/inliné.
    getExternalObjectURL ne doit pas retourner une URL relative, il faut donc l’aider un peu.

Il ne peut pas s’afficher à l’intérieur de lui-même… Le conteneur est forcement en dehors du contenu !

Avec le paramètre { noiframe: true }, cela fonctionne bien et l’affichage se fait comme demandé.

Merci pour vos réponses.

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.

[Message prédéfini]

Nous conseillons aux utilisateurs de marquer comme “solution” la réponse résolvant leur problématique pour permettre au support de mieux suivre les sujets non résolus, et à la communauté de trouver plus facilement la bonne réponse.

Vos messages indiquant une résolution du problème, nous avons réalisé cette opération pour vous.