# Structure XML via publication

**URL:** <https://community.simplicite.io/t/structure-xml-via-publication/2546>\
**Category:** Support\
**Tags:** v4-0\
**Created:** [August 26, 2020, 11:48am UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546 "2020-08-26T11:48:46Z")\
**Posts on this page:** 12\
**Page:** 2

<div class="post-metadata">

**Author:** ![david](https://community.simplicite.io/user_avatar/community.simplicite.io/david/32/5703_2.png) [@david](https://community.simplicite.io/u/david)\
**Post date:** [September 7, 2020, 12:39pm UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546/21 "2020-09-07T12:39:55Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![fabrice](https://community.simplicite.io/letter_avatar_proxy/v4/letter/f/5fc32e/32.png) [@fabrice](https://community.simplicite.io/u/fabrice)\
**Post date:** [September 7, 2020, 12:41pm UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546/22 "2020-09-07T12:41:51Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![david](https://community.simplicite.io/user_avatar/community.simplicite.io/david/32/5703_2.png) [@david](https://community.simplicite.io/u/david)\
**Post date:** [September 7, 2020, 12:43pm UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546/23 "2020-09-07T12:43:15Z")

</div>

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

 ![image](https://community.simplicite.io/uploads/default/original/2X/b/be0714ef829066befce8bba3be1941f9247250c4.png)

---

<div class="post-metadata">

**Author:** ![fabrice](https://community.simplicite.io/letter_avatar_proxy/v4/letter/f/5fc32e/32.png) [@fabrice](https://community.simplicite.io/u/fabrice)\
**Post date:** [September 7, 2020, 12:52pm UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546/24 "2020-09-07T12:52:34Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![david](https://community.simplicite.io/user_avatar/community.simplicite.io/david/32/5703_2.png) [@david](https://community.simplicite.io/u/david)\
**Post date:** [September 7, 2020, 12:55pm UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546/25 "2020-09-07T12:55:22Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Francois](https://community.simplicite.io/user_avatar/community.simplicite.io/francois/32/6448_2.png) [@Francois](https://community.simplicite.io/u/Francois)\
**Post date:** [September 7, 2020, 1:01pm UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546/26 "2020-09-07T13:01:20Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![fabrice](https://community.simplicite.io/letter_avatar_proxy/v4/letter/f/5fc32e/32.png) [@fabrice](https://community.simplicite.io/u/fabrice)\
**Post date:** [September 8, 2020, 6:39am UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546/27 "2020-09-08T06:39:42Z")

</div>

J’ai vraiment beaucoup de peine à m’y retrouver ☹

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:

```auto
	 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

 ![image](https://community.simplicite.io/uploads/default/original/2X/c/cc89bbd31e243594d6854ef02cd2fd089b406a5a.png)

Fichier modèle

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

```

---

<div class="post-metadata">

**Author:** ![david](https://community.simplicite.io/user_avatar/community.simplicite.io/david/32/5703_2.png) [@david](https://community.simplicite.io/u/david)\
**Post date:** [September 8, 2020, 7:10am UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546/28 "2020-09-08T07:10:41Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![david](https://community.simplicite.io/user_avatar/community.simplicite.io/david/32/5703_2.png) [@david](https://community.simplicite.io/u/david)\
**Post date:** [September 8, 2020, 7:29am UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546/29 "2020-09-08T07:29:33Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![fabrice](https://community.simplicite.io/letter_avatar_proxy/v4/letter/f/5fc32e/32.png) [@fabrice](https://community.simplicite.io/u/fabrice)\
**Post date:** [September 8, 2020, 7:42am UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546/30 "2020-09-08T07:42:11Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Francois](https://community.simplicite.io/user_avatar/community.simplicite.io/francois/32/6448_2.png) [@Francois](https://community.simplicite.io/u/Francois)\
**Post date:** [September 8, 2020, 3:38pm UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546/31 "2020-09-08T15:38:52Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![system](https://community.simplicite.io/user_avatar/community.simplicite.io/system/32/4700_2.png) [@system](https://community.simplicite.io/u/system)\
**Post date:** [March 30, 2021, 6:46pm UTC](https://community.simplicite.io/t/structure-xml-via-publication/2546/32 "2021-03-30T18:46:23Z")

</div>

Closed on March 30, 2021, 6:46pm UTC



[Previous page](https://community.simplicite.io/t/structure-xml-via-publication/2546.md?page=1)
