# Can I receive information about process diagram in svg using Bonita API?

**URL:** <https://community.ofelia.com/t/can-i-receive-information-about-process-diagram-in-svg-using-bonita-api/8317>\
**Category:** Q&A\
**Created:** [22 March 2017 08:10 UTC](https://community.ofelia.com/t/can-i-receive-information-about-process-diagram-in-svg-using-bonita-api/8317 "2017-03-22T08:10:01Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![juliashka95](https://avatars.discourse-cdn.com/v4/letter/j/aeb1de/32.png) [@juliashka95](https://community.ofelia.com/u/juliashka95)\
**Post date:** [22 March 2017 08:10 UTC](https://community.ofelia.com/t/can-i-receive-information-about-process-diagram-in-svg-using-bonita-api/8317/1 "2017-03-22T08:10:01Z")

</div>

I want to receive information about process diagram (marking, sequence of steps) through Bonita API and save in svg.

---

<div class="post-metadata">

**Author:** ![Sean\_McP](https://dub1.discourse-cdn.com/flex013/user_avatar/community.ofelia.com/sean_mcp/32/932_2.png) [@Sean\_McP](https://community.ofelia.com/u/Sean_McP)\
**Post date:** [22 March 2017 20:23 UTC](https://community.ofelia.com/t/can-i-receive-information-about-process-diagram-in-svg-using-bonita-api/8317/2 "2017-03-22T20:23:39Z")

</div>

This is a feature of the Subscription Model and is not available in Community.

That being said I can imagine a scenario whereby for a case you could do the following (in pseudo code):

`
get case
getActivities (API)
getArchivedActivityInstances (API)
`

then sort them into order and create your own HTML that can display an SVG diagram of the process.

reference [here](http://community.ofelia.com/questions-and-answers/processapi)

regards  
Seán

_PS: As this reply offers an answer your question, and if you like it, please Mark UP and/or as Resolved._

---

<div class="post-metadata">

**Author:** ![Sean\_McP](https://dub1.discourse-cdn.com/flex013/user_avatar/community.ofelia.com/sean_mcp/32/932_2.png) [@Sean\_McP](https://community.ofelia.com/u/Sean_McP)\
**Post date:** [28 March 2017 02:00 UTC](https://community.ofelia.com/t/can-i-receive-information-about-process-diagram-in-svg-using-bonita-api/8317/3 "2017-03-28T02:00:50Z")

</div>

I’ve developed some code that gets the process information as follows,

- Start
- End
- Processes (operations)
- Conditions (gateways)
- Transitions

The numbers are the respective items id’s and the output is shown here:

`
7533755246857467906=>start: Start1
5056439953452068172=>end: End1
5282329866329449709=>operation: getActivitiesForDiagram1
5072827248852522222=>operation: getActivitiesForDiagram2
8304515131711232508=>operation: getActivitiesForDiagram3
7421274932560925310=>operation: Step1
8048306028807336420=>condition: Gateway1
8593787269775937543=>condition: Gateway2
`

`5282329866329449709->7421274932560925310
8593787269775937543->5072827248852522222
8304515131711232508->8048306028807336420
8593787269775937543->8304515131711232508
5072827248852522222->8048306028807336420
7421274932560925310->8593787269775937543
7533755246857467906->5282329866329449709
8048306028807336420->5056439953452068172
`

**You** will have to work out how to “develop” the solution for your chosen flow-charting software, from here it should be quite easy. However I hope you will also share it 🙂

From here it should be easy to develop something that gets the status and colours the flow diagram appropriately.

To execute add a Script Connector to an activity, copy the code and execute, it will work for the current process. I’ve not created to to work for a particular case etc.

You can then look at your log to see the printed output, how you then use it is up to you.

`
import java.util.List;
import java.util.logging.Logger;
import java.lang.StringBuilder;
import org.bonitasoft.engine.api.ProcessAPI
import org.bonitasoft.engine.bpm.businessdata.BusinessDataDefinition
import org.bonitasoft.engine.bpm.connector.ConnectorDefinition
import org.bonitasoft.engine.bpm.data.DataDefinition
import org.bonitasoft.engine.bpm.document.DocumentDefinition
import org.bonitasoft.engine.bpm.flownode.ActivityDefinition
import org.bonitasoft.engine.bpm.flownode.EndEventDefinition
import org.bonitasoft.engine.bpm.flownode.FlowElementContainerDefinition
import org.bonitasoft.engine.bpm.flownode.GatewayDefinition
import org.bonitasoft.engine.bpm.flownode.IntermediateCatchEventDefinition
import org.bonitasoft.engine.bpm.flownode.IntermediateThrowEventDefinition
import org.bonitasoft.engine.bpm.flownode.StartEventDefinition
import org.bonitasoft.engine.bpm.flownode.TransitionDefinition
import org.bonitasoft.engine.bpm.process.DesignProcessDefinition
import org.bonitasoft.engine.bpm.process.ProcessDeploymentInfo
import org.bonitasoft.engine.bpm.process.ProcessDeploymentInfoCriterion;
import org.bonitasoft.engine.bpm.process.ProcessDeploymentInfoSearchDescriptor;
import org.bonitasoft.engine.bpm.process.ProcessInstance;
import org.bonitasoft.engine.bpm.process.ProcessInstanceSearchDescriptor;
import org.bonitasoft.engine.bpm.process.ProcessInstanceState;
int dI = 0;
boolean debug = true;
StringBuilder logWrite = new StringBuilder();
StringBuilder flowChartJS1 = new StringBuilder();
Logger logger = Logger.getLogger(“org.bonitasoft”);
ProcessAPI processAPI = apiAccessor.getProcessAPI();
//set the name of the routine
String processName =processAPI.getProcessInstance(processInstanceId).getName();
logWrite.append("\n\nProcess Name: “+ processName);
logWrite.append(”\nprocessInstanceId: “+ processInstanceId.toString());
logWrite.append(”\nprocessDefinitionId: "+ processDefinitionId.toString());
logWrite.append(“\nactivityInstanceId: “+ activityInstanceId.toString());
logWrite.append(”\ntaskAssigneeId: “+ taskAssigneeId.toString());
logWrite.append(”\nrootProcessInstanceId: “+ rootProcessInstanceId.toString());
logWrite.append(”\n\t” + dI++ + " Trace Start");
//TODO - Code goes in here - START
DesignProcessDefinition resultDesignProcessDefinition = processAPI.getDesignProcessDefinition(processDefinitionId);
FlowElementContainerDefinition flowElementContainer = resultDesignProcessDefinition.getFlowElementContainer();
//Start
List startEvents = flowElementContainer.getStartEvents();
for(StartEventDefinition q : startEvents){
```
		 flowChartJS1.append(q.getId().toString()+"=>start: "+q.getName().toString()+"\n");
		 
		 //logWrite.append("\n\t\t" + dI++ + " startEvents = " + q.toString());
		 logWrite.append("\n\t\t" + dI++ + " startEvents Name = " + q.getName().toString());
		 logWrite.append("\n\t\t" + dI++ + " startEvents Id = " + q.getId().toString());
		 logWrite.append("\n\t\t" + dI++ + " startEvents IncomingTransitions= " + String.valueOf(q.getIncomingTransitions()));
		 logWrite.append("\n\t\t" + dI++ + " startEvents OutgoingTransitions= " + String.valueOf(q.getOutgoingTransitions()));
		 logWrite.append("\n");
	 }

```
//flowchart.js
//End
List endEvents = flowElementContainer.getEndEvents();
for(EndEventDefinition q : endEvents){
```
		 flowChartJS1.append(q.getId().toString()+"=>end: "+q.getName().toString()+"\n");

```
// logWrite.append(“\n\t\t” + dI++ + " endEvents = " + q.toString());
logWrite.append(“\n\t\t” + dI++ + " endEvents Name = " + q.getName().toString());
logWrite.append(“\n\t\t” + dI++ + " endEvents Id = " + q.getId().toString());
logWrite.append(“\n\t\t” + dI++ + " endEvents IncomingTransitions= " + String.valueOf(q.getIncomingTransitions()));
logWrite.append(“\n\t\t” + dI++ + " endEvents OutgoingTransitions= " + String.valueOf(q.getOutgoingTransitions()));
logWrite.append(“\n”);
}
//Activities
List processActivities = flowElementContainer.getActivities();
for(ActivityDefinition q : processActivities){
```
		 flowChartJS1.append(q.getId().toString()+"=>operation: "+q.getName().toString()+"\n");

```
// logWrite.append(“\n\t\t” + dI++ + " processActivities = " + q.toString());
logWrite.append(“\n\t\t” + dI++ + " processActivities Name = " + q.getName().toString());
logWrite.append(“\n\t\t” + dI++ + " processActivities Id = " + q.getId().toString());
logWrite.append(“\n\t\t” + dI++ + " processActivities Condition	= " + q.getDefaultTransition().toString());// .getCondition().toString());
logWrite.append(“\n\t\t” + dI++ + " processActivities IncomingTransitions= " + q.getIncomingTransitions().toString());
logWrite.append(“\n\t\t” + dI++ + " processActivities LoopCharacteristics= " + q.getLoopCharacteristics().toString());
logWrite.append(“\n\t\t” + dI++ + " processActivities OutgoingTransitions= " + q.getOutgoingTransitions().toString());
logWrite.append(“\n\t\t” + dI++ + " processActivities Operations	= " + q.getOperations().toString());
logWrite.append(“\n”);
}
//flowchart.js
//Conditions
List gatewaysList = flowElementContainer.getGatewaysList();
for(GatewayDefinition q : gatewaysList){
```
		 flowChartJS1.append(q.getId().toString()+"=>condition: "+q.getName().toString()+"\n");
					  
		 //logWrite.append("\n\t\t" + dI++ + " gatewaysList = " + q.toString());
		 logWrite.append("\n\t\t" + dI++ + " gatewaysList Name = " + q.getName().toString());
		 logWrite.append("\n\t\t" + dI++ + " gatewaysList Id = " + q.getId().toString());
		 logWrite.append("\n\t\t" + dI++ + " gatewaysList GatewayType	= " + q.getGatewayType().toString());
		 logWrite.append("\n\t\t" + dI++ + " gatewaysList IncomingTransitions = " + q.getIncomingTransitions().toString());
		 logWrite.append("\n\t\t" + dI++ + " gatewaysList getOutgoingTransitions= " + q.getOutgoingTransitions().toString());
		 logWrite.append("\n");
	 }

```
//flowchart.js
//Transitions
Set transitions = flowElementContainer.getTransitions();
for(TransitionDefinition q : transitions){
```
		 flowChartJS1.append("\n"+q.getSource().toString()+"->"+q.getTarget().toString()+"\n");
		 
		 //logWrite.append("\n\t\t" + dI++ + " transitions = " + q.toString());
		 logWrite.append("\n\t\t" + dI++ + " transitions Source = " + q.getSource().toString());
		 logWrite.append("\n\t\t" + dI++ + " transitions SourceFlowNode = " + q.getSourceFlowNode().getName().toString());
		 logWrite.append("\n\t\t" + dI++ + " transitions Target = " + q.getTarget().toString());
		 logWrite.append("\n\t\t" + dI++ + " transitions TargetFlowNode = " + q.getTargetFlowNode().getName().toString());
		 logWrite.append("\n\t\t" + dI++ + " transitions Condition = " + q.getCondition().toString());
		 logWrite.append("\n");
	 }

```
//TODO - Code goes in here - END
logWrite.append(“\n\t” + dI++ + " Trace End");
logWrite.append(“\n\n”);
if(debug){logger.severe(logWrite.toString())}
`

`logger.severe(“\n\n”+flowChartJS1.toString()+“\n\n”);
`

regards
