Hi folks.
I’m working on a Vaadin/GWT bpmn-engine based project, and I’m evaluating some viewers/modelers. This project looks awesome! I start to embbed the viewer on my application, and its working as expected.
I want to add suport for move (drag) the whole the diagram, and use zoom, as the application demo does with the modeler. How can I do that?
Where can I find the API documentation about the BpmnViewer methods, etc?
Sorry for this noob question.
Bellow, a screenshot of the embbeded viewe:
Hello @EduFrazao,
to use the dragging and zoom functionality you have to replace the bpmn-viewer for the bpmn-navigated-viewer and you probably want as well to rename it on your app.js file.
index.html
<script src="bower_components/bpmn-js/dist/bpmn-navigated-viewer.js"></script>
app.js
var BpmnNavigatedViewer = window.BpmnJS;
var viewer = new BpmnNavigatedViewer({ container: '#canvas' });
Cheers,
Ricardo
1 Like
Hi @EduFrazao ,
I’m also working on a Vaadin based project and would also like to embbed the viewer. I’m stuck on an empty panel after loading the resources through the following class:
@JavaScript({ "bpmn-navigated-viewer.js", "bpmn-navigated-viewer.js.map", "jquery.js", "show-model.js" })
public class ShowModel extends AbstractJavaScriptComponent {
public ShowModel(String xml) {
getState().xml = xml;
}
@Override
protected ShowModelState getState() {
return (ShowModelState) super.getState();
}
}
with the following JS:
demo_ShowModel = function() {
var BpmnNavigatedViewer = window.BpmnJS;
var xml = this.getState().xml; // load in my BPMN 2.0 xml
var viewer = new BpmnNavigatedViewer({ container: '#canvas' });
viewer.importXML(xml, function(err) {
if (err) {
console.log('error rendering', err);
} else {
console.log('rendered');
}
});
}
How did you get it to work on your side?
Thank you for your help!
Hi @ChristianStolle. Your code seems to be correct. Do you check de client-side debugger?
I’m using a different approach here. I will need to interact in a different way with the diagram, so, I decide to create a formal GWT ClientSide component to handle the viewer and the editor…
Example:
@JavaScript({
"app://VAADIN/jslibs/jquery/jquery.min.js",
"app://VAADIN/jslibs/jquery-mousewheel/jquery.mousewheel.min.js",
"app://VAADIN/jslibs/lodash/lodash.min.js",
"app://VAADIN/jslibs/sax/lib/sax.js",
"app://VAADIN/jslibs/Snap.svg/snap.svg-min.js",
"app://VAADIN/jslibs/bpmn-js/bpmn-navigated-viewer.js"
})
@StyleSheet({
"app://VAADIN/jslibs/bpmn-js/assets/diagram-js.css",
"app://VAADIN/jslibs/bpmn-js/assets/bpmn-font/css/bpmn-embedded.css"
})
public class BPMNViewerComponent extends AbstractComponent {
private static final long serialVersionUID = 1L;
private static final String BPMN_RESOURCE_NAME = "source";
public BPMNViewerComponent(Resource resource) {
setResource(BPMN_RESOURCE_NAME, resource);
}
@Override
protected BPMNViewerComponentState getState() {
return (BPMNViewerComponentState) super.getState();
}
}
@Connect(BPMNViewerComponent.class)
public class BPMNViewerComponentConnector extends AbstractComponentConnector {
private static final long serialVersionUID = 1L;
@Override
protected VBPMNViewerWidget createWidget() {
return GWT.create(VBPMNViewerWidget.class);
}
@Override
public VBPMNViewerWidget getWidget() {
return (VBPMNViewerWidget) super.getWidget();
}
@Override
public BPMNViewerComponentState getState() {
return (BPMNViewerComponentState) super.getState();
}
@Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
super.onStateChanged(stateChangeEvent);
getWidget().setBPMNURL(getResourceUrl(BPMNViewerComponentState.RESOURCE_NAME));
}
}
public class VBPMNViewerWidget extends FlowPanel {
private SimplePanel displayNode;
private Logger logger = Logger.getLogger(VBPMNViewerWidget.class.getName());
public VBPMNViewerWidget() {
setWidth("100%");
setHeight("100%");
createDisplayNode();
}
private void createDisplayNode() {
displayNode = new SimplePanel();
displayNode.getElement().setId("VBPMNViewerWidgetContainer");
displayNode.setWidth("100%");
displayNode.setHeight("100%");
add(displayNode);
}
public void setBPMNURL(String url) {
if(url != null) {
logger.log(Level.INFO, "Loading BPMN Model: " + url);
loadBPMNDiagram(url, displayNode.getElement().getId());
}
}
private native void loadBPMNDiagram(String url, String nodeId) /*-{
var BpmnViewer = $wnd.BpmnJS;
var $j =$wnd.jQuery;
var viewer = new BpmnNavigatedViewer({
container: '#'+nodeId,
width: '100%',
height: '100%'
});
$j.get(url, function(diagram) {
viewer.importXML(diagram, function(err) {
if (!err) {
viewer.get('canvas').zoom('fit-viewport', true);
} else {
console.log('something went wrong:', err);
}
});
}, 'text');
}-*/;
}
For now its pretty simple, but using a GWT client-side component, you will have more flexiblity.
Hi @EduFrazao.
I try to implement BPMN.io inside Vaadinapplication.
Have you complete the implementation of BPMN.io GWT Warapper ?