Structure XML via publication

Oui c’est l’idée = une fabrication du XML par du code qui itère sur des records d’objets.

NB: C’est ce que fait la mécanique de publication sur template

ok.
le return xml.toString();m’affiche le résultat à l’écran…

par quoi je le remplace pour que le système propose de l’afficher ou d’enregistrer le fichier?

C’est le type de la publication qui détermine ce qui est fait du résultat. Dans votre cas il faut mettre type = XML

A quel moment j’intègre le nom de la publication dans le script?

https://docs.simplicite.io/4.0/javadoc-beta/com/simplicite/util/PrintTemplate.html#setFilename(java.lang.String)

Champ “Output file name” dans la définition du PrintTemplate ou par code setFilename.

J’ai vraiment beaucoup de peine à m’y retrouver :frowning:

Si je résume :

  • j’ai besoin d’une action pour exécuter la méthode

  • j’ai besoin d’une méthode pour parcourir les records d’objets

  • j’ai besoin d’une publication pour mettre en forme le XML

Méthode:

	 public String myPublicationMethod() {
	 	AppLog.info(getClass(), " myPublicationMethod  " , null ,  getGrant());
	    
	    StringBuilder xml = new StringBuilder(XMLTool.XML_HEADER);
		ObjectDB o = getGrant().getTmpObject("ParticipationRepresentant");
		o.resetFilters();
		// Same as above regarding filters
		
		for (String[] row : o.search()) {
		    o.setValues(row);
		    String val = o.getField("participationReprNom").getValue();
			xml.append("<Nom>").append("<Value>"+val+"</Value>");
			xml.append("</Nom>");
		}
	    return xml.toString();
    

	}

Publication

Fichier modèle

<delegations>
[BEGIN]
	<delegation>
	<representantComplet>[VALUE:participationReprNom]</representantComplet>
	</delegation>
[END]	
</delegations>

Le fait que vous déclenchiez votre publication par une action est un autre sujet, Là on parle de la publication.

Pour une publication vous avez le choix entre :

  • implémenter une méthode qui génère le contenu de votre publication
  • utiliser un modèle (template ou fichier) qui contient des tags de substitution

Ces 2 approches sont exclusives (même si en théorie on peut toujours récupérer le contenu du template ou du fichier dans une méthode Java pour en faire quelque chose)

Ce que vous faites dans une méthode est totalement libre => vous pouvez y rechercher des objets etc. selon vos règles de gestion, in fine vous retournez ce que vous voulez publier (texte ou binaire en fct du MIME type déclaré)

Ce que permet la mécanique de substitution des tags des templates/fichiers est elle par contre limitée => c’est du texte et ça ne sait qu’itérer en suivant la logique relationnelle de votre modèle et éventuellement en appliquant des filtres statiques simples.

Si votre besoin de publication est compatible avec la mécanique de substitution sur template/fichier, utilisez cette approche, sinon écrivez une méthode de publication.

Il y a plusieurs exemples de publication (méthodes et tags de substitution) dans la démo => inspirez vous en.

PS: si vous n’utilisez pas le mécanisme de substitution et que cette publication n’existe que pour fabriquer du XML à envoyer à un webservice via une action. Alors autant coder la fabrication de votre XML directement dans l’action, ce sera plus simple

Ce sera effectivement le cas. Le XML construit est envoyé à un webservice.

Bonjour,

Si le besoin est d’appeler un webservice (au sens une URL en GET ou POST), il ne s’agit pas d’une publication (un export de données pour l’utilisateur) mais d’une intégration de service.

Le bon pattern est de faire comme suit :

  • Création de paramètres systèmes avec les infos du service externe (URL, credentials…) afin de pouvoir le paramétrer différemment suivants vos environnements test/prod (et pas en dur dans le code)
  • Action sur l’objet métier avec méthode back qui fabrique le XML + appel http avec les paramètres
  • Action habilitée sur la UI, ou lancée par cron ou par hook à chaque save… suivant le besoin