[Modeler] Sauvegarde du png en mode silencieux

Bonjour,

J’ai l’impression que quand je modifie par code mon modèle en mode silent (hidden = true) et que je save, le png du modèle est blanc. Le SVG lui est bien enregistré.

Mon code pour créer / mettre à jour

mod.get(
				    	function() {
						// instanciate in silent mode
							$ui.diagram.open(modelId, { svg:true, hidden:true }, updateDiagram);
						}, 
						modelId, 
						{inlineDocs: true}
						);

Le code de sauvegarde

	function save() {
		diagram.save(function() {
			// Close hidden model
			diagram.close(false);
			
			// Re-open in a window
			if (open)
			$ui.displayModeler(null, diagram.modelId, { svg:true, docked:false });
		}, true); 
	}

Quand je clique sur la disquette et que je regarde le modèle j’ai bien le png

Mais si je ferme le modèle et que je passe dans mon code qui le met à jour en mode silencieux, l’image disparaît.

Version=4.0.P25
BuiltOn=2021-01-25 18:55 (revision 8e9b757c68b3391e16a0570ac07b374ccc25a0e6)

Merci d’avance !
Emmanuelle

L’image est générée en front dans le diagram.save via la méthode diagram.desktop.getImage(format, scale, cbk).

Si l’image est vide c’est peut être qu’il faut nécessairement que le SVG soit visible pour pouvoir être dessiné dans un context graphique (via un canvas temporaire) puis être converti en image data:image/png.

Essayez de voir si l’image est bien générée en entrant dans la méthode getImage via le débugger du navigateur, en changeant un peu votre code :

function save() {
	debugger
	diagram.desktop.getImage("png", 1, function(img) {
		console.log(img && img[0] ? "image = " + img[0].src : "no image");
		diagram.save(...);
	});
}

Sinon il faudra faire apparaitre le modèle temporairement pour générer l’image (dans une zone hors écran à voir).

L’image est blanche dans le debugger du navigateur.
J’ai essayé d’ajouter un save après le display du modeler mais ça ne génère pas l’image non plus.
Et si je génère mon modèle avec hidden = false, plus rien ne fonctionne.

Je suis preneuse d’une solution !

Je vais faire des tests pour voir.
A mon avis, le moteur SVG ne dessine rien (ou ne se rafraichit pas) si la zone est invisible.
Il va surement falloir faire une petite évolution dans Simplicité au diagram.save pour dessiner le modèle dans une zone visible (si possible cachée de l’utilisateur) pour générer une image non vide quand hidden:true.

1 Like

C’était bien ça le problème, quand la zone du diagramme est en CSS display:none, alors le SVG n’est pas dessiné. La zone sera désormais visible mais en dehors de l’écran.

A tester dans votre cas quand l’évolution aura été livrée, dans mes tests cela fonctionne en ouvrant un modèle existant sans image, le save regénère bien l’image complète.

Au debugger on peut voir la div cachée en bas du <body>.

var mod = app.getBusinessObject("Model");
mod.get(function() {
	$ui.diagram.open(modelId, { svg:true, hidden:true }, function(diagram) {
		debugger 
		diagram.save(function() {
			// Close hidden model
			diagram.close(false);
			// To see the generated image
			$ui.displayForm(null, "Model", modelId, { nav: "add"});
		}, true);
	});
}, modelId, {
	inlineDocs: true
});
1 Like

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