Dans mon projet, je souhaiterai inclure un code HTML/CSS/JS sur une partie d’un template afin de pouvoir donner une partie dynamique dans mes formulaires
J’ai déjà le code HTML/CSS/JS, et dans cet exemple, je voudrais le placer dans un bloc, dans l’encadré rouge, puis lorsqu’on lance ce formulaire, le bloc recupère des données et génère un visuel du HTML/CSS/JS
Merci pour votre réponse
Cependant je n’ai pas trouvé où était situé l’objet DemoClient, pourriez-vous me l’indiquer ?
Par ailleurs, je vois que dans votre démo, l’affichage de la map Google se passe par une API ou une URL présente sur le net, pour mon projet, mon code HTML est seulement local et je voudrais que l’affichage se fasse seulement sur simplicité, est ce que cela marche tout de meme ?
Elle contient de nombreux exemples didactiques donc je vous recommande fortement de vous l’installer quelquepart pour avoir des sources d’inspiration.
Sinon dans ma 2ème copie d’écran la partie mise en surbrillance est bien du code HTML spécifique ajouté au code HTML du template de mon objet métier (ici il sert à afficher des composants externes mais peu importe, ça reste du code HTML specifique arbitraire).
Le pattern c’est donc d’insérer manuellement votre code HTML dans le HTML de votre template (et/ou de vos zones d’attributs).
Pour le JavaScript mettez le dans la ressource SCRIPT de votre objet en l’isolant bien du reste du JavaScript de la UI Simplicite via un namespace ad-hoc (là aussi cf. les exemples de la démo)
Pour le CSS mettez le dans la ressource STYLES de votre objet avec là aussi une logique hiérarchique qui isole du reste (là aussi cf. les exemples e la démo). A noter que ces ressources CSS acceptent une syntaxe LESS.
PS: Par curiosité que souhaitez vous mettre dans ce HTML specifique ? Je pose la question pour savoir si cette approche spécifique est bien la bonne approche pour répondre au besoin sous-jacent.
Merci pour ce complément d’information,
Pour mon projet, je souhaiterai ajouter un bout de code venant d’un projet open source qui s’appelle Cytoscape.js
Celui-ci utilise du HTML/CSS/JS afin de donner une visualisation graphique des éléments présents dans le projet et la connexion qu’ils ont entre eux https://cytoscape.org/cytoscape.js-tutorial-demo/
OK le modeler standard de Simplicité répond à ce genre de besoin de représentation graphique des records des objets métier et de leur relations entre eux
Ex sur la démo, représentation des clients/produits/commandes
Oui effectivement pour des choses un peu complexes ou mutualisables c’est une bonne approche car ça isole le composant et ça permet de le réutiliser dans plusieurs objets.
Là aussi la démo donne de bons exemples d’objets externes.
Oui, pour le coup j’avais vue que le modeler de simplicité pouvait créer une première version de modelisation, mais il lui manquait quelques fonctionnalités que je n’ai pas su retrouver comme par exemple lorsque l’on clique sur l’un des records, de pouvoir avoir un zoom sur celui-ci et d’afficher plus simplement les records qui lui sont liés
La version de créer des objets externes pour ajouter des ressources m’intéresse, j’ai cru voir qu’on pouvait mettre plusieurs type de fichiers différents dans les ressources (HTML, CSS, JS, …) cependant je n’arrive pas a les faire se lier entre elles, auriez-vous un exemple en tête pour que je vois comment cela fonctionne ?
D’autres exemples de page custom (internes/externes) sur les modules complémentaires de la démo:
et
Elles architecturées sur le même principe que la DemoPlaceNewOrder => un code serveur qui invoke le JavaScript de la ressource SCRIPT qui utilise le HTML de la ressource HTML (et les styles de la ressource STYLES).
En essayant de comprendre le code qui est présent dans l’objet externe DemoPlaceNewOrder il y a juste une partie que je ne comprend
Dans la partie SCRIPT en javascript, il y a le code suivant:
return { render: render };
Le render de droite, je comprend qu’il fait appel à la fonction qui est définit plus haut dans le script, cependant le premier render, celui-ci, je ne comprend pas sa provenance, le code marchant sur la démo mais pas lorsque je copie-colle tous les codes de l’objet dans mon projet (en modifiant les parties faisant appel a des objets de la démo), je suppose que ce render doit être paramétré quelque part, sauriez-vous où il se trouve ?
Il n’y a absolument rien de specifique à Simplicité ici : c’est un pattern de dev JavaScript hyper classique pour ne rendre publique que certaines fonctions/variables.
Ici seule la fonction render est publique et c’est elle qui est appelée à l’affichage de la page (le code serveur de l’objet externe hérite de ResponsiveExternalObject, cette classe helper appelle justement par défaut la fonction render d’un objet JavaScript ayant le même nom que l’objet externe en question, cf. https://docs.simplicite.io/4.0/javadoc/com/simplicite/webapp/web/ResponsiveExternalObject.html)
Effectivement j’ai pu corriger ce petit soucis, cependant je me retrouve avec un autre soucis.
J’ai opté pour une option de mettre tout mon code dans une page HTML, je mets cette page dans une ressource simplicité, je mets cette ressource et une ressource javascript(vue que l’objet externe en a besoin) dans un objet externe
Lorsque j’essaye de voir le resultat, je vois ceci
Une copie d’écran et 2 messages dans la console ne suffit pas pour que l’on investiguer un pb de ce genre.
Copiez/collez le code complet de votre objet métier = le code serveur de votre objet externe + le contenu des ressources HTML et JavaScript de cet objet externe.
Mais bon peut être devriez vous par commencer par des choses plus simples plutôt que de vouloir directement intégrer votre objet externe dans le formulaire d’un objet métier (car c’est un usage avancé des objets externes). Faites déjà marcher votre objet externe en tant que page standalone (à la manière des exemples de la démo), une fois que ça marchera alors seulement essayez d’intégrer cet objet externe au formulaire de votre objet métier.
Si un composant retourne de l’HTML complet <html>..., la UI l’affiche dans une iframe pour une raison évidente d’isolation.
Les traces “common.js” indiquent que vous n’êtes pas dans la UI responsive mais une iframe avec à priori la legacy de Simplicité…
En gros si vous faites une page HTML complete / standalone, vous sortez de Simplicité et donc vous devez tout recharger, voir recréer une session ajax, je doute que vous en soyez à ce niveau.
Il faut avoir une approche composant donc votre HTML doit être de simples “div” alimentés par votre javascript au sein de la UI déjà chargée.
Voici un exemple de base Cytoscape qui marche en tant qu’ objet externe:
Code serveur:
package com.simplicite.extobjects.Application;
public class AppTestCytoscape extends com.simplicite.webapp.web.ResponsiveExternalObject {
private static final long serialVersionUID = 1L;
}
Par contre @Francois je ne vois pas d’outil dans l’éditeur de template d’un objet métier pour ajouter facilement/visuellement un objet externe dans une div custom, de quel mécanisme parlais-tu ?