Screencast: BPMN 2.0 import in the Activiti Designer

I mentioned in my last blogpost that the latest release of the Activiti Deisgner is feature-packed. Besides ‘diagram interchange’ support, the other major milestone is support for importing any BPMN 2.0 process.

In the following screencast, I demonstrate that this is no empty promise. Using a non-Activiti BPMN 2.0 editor (the open-source Yaoqiang editor in this case), a process is modeled and later imported and enhanced in the Activiti Designer.

Enjoy! Be sure to set the video to full screen to enjoy it to the fullest :-)

13 Comments

  1. erics February 17, 2011

    Howdy!

    Nice screencast but did you notice (or was it just me?) that you have options for:

    1) amount > 500

    2) amount <=499

    But what about amount == 500? Would you run it and let me know what 500 does? ;-)

  2. Joram Barrez February 17, 2011

    @Eric: lol, my mistake! Let’s assume expenses of 500$ are neglected in this company ;-)

    But it does prove you followed very closely! Thanks!

  3. erics February 17, 2011

    Actually just by accident that I watched this one, but that one jumped out at me… I am not used to you making calculation errors!

    Maybe time to get you back into the field to freshen up them skills? ;-)

  4. Joram Barrez February 17, 2011

    Ah well – my unit tests would’ve caught them very quickly, I’m sure ;-)

  5. Bruce Silver February 17, 2011

    Very nice. The first example I have seen of direct import of bpmn 2.0 xml into a BPMS design tool. Oracle still cannot do it 9 months after launch.

  6. Blenta March 1, 2011

    Very useful screencast. Import of bpmn 2.0 xml makes it easy for developers to build a powerful BPM project.

  7. rodel_alfresco March 4, 2011

    Very nice one.
    you got that talent to have a process working in a web application from scratch in a few minutes.
    Well done, great tool

  8. Hendrik April 4, 2011

    Hi,

    I just tried to run your example exactly like you do but activiti always throws this error after clicking on “submit form”:

    org.activiti.engine.ActivitiException: Form with formKey ‘/diagrams/request.form’ does not exist
    at org.activiti.engine.impl.form.JuelFormEngine.getFormTemplateString(JuelFormEngine.java:63)
    at org.activiti.engine.impl.form.JuelFormEngine.renderTaskForm(JuelFormEngine.java:47)
    [...]

    I checked whether the request.form-file is in the BAR-file by unzipping it. The file is in the BAR-file.

    So everything should be correct – what am I doing wrong?

    Regards,
    Hendrik

  9. Joram Barrez April 6, 2011

    is the bar file in the diagrams folder?

  10. ivan.hajdinjak April 8, 2011

    i have the same problem as Hendrik and i’ve stucked there for 2 days.

    org.activiti.engine.ActivitiException: Form with formKey ‘/diagrams/request.form’ does not exist
    at org.activiti.engine.impl.form.JuelFormEngine.getFormTemplateString(JuelFormEngine.java:63)
    at org.activiti.engine.impl.form.JuelFormEngine.renderTaskForm(JuelFormEngine.java:47)
    [...]

    Please help

  11. Dev July 21, 2011

    If you’re building the business artificat on Windows, you need to use diagrams\ !

  12. Arun August 29, 2012

    When I complete task from request refund, I am getting below error. Please suggest:

    Exception
    com.vaadin.event.ListenerMethod$MethodException
    Cause: org.activiti.engine.ActivitiException: condition expression returns non-Boolean: $(amount <= 499) (java.lang.String)
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
    at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:164)
    at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1193)
    at com.vaadin.ui.Button.fireClick(Button.java:539)
    at com.vaadin.ui.Button.changeVariables(Button.java:206)
    at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariableBurst(AbstractCommunicationManager.java:1299)
    at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1219)
    at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:735)
    at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:296)
    at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:501)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)
    Caused by: org.activiti.engine.ActivitiException: condition expression returns non-Boolean: $(amount <= 499) (java.lang.String)
    at org.activiti.engine.impl.el.UelExpressionCondition.evaluate(UelExpressionCondition.java:43)
    at org.activiti.engine.impl.bpmn.behavior.ExclusiveGatewayActivityBehavior.leave(ExclusiveGatewayActivityBehavior.java:63)
    at org.activiti.engine.impl.bpmn.behavior.FlowNodeActivityBehavior.execute(FlowNodeActivityBehavior.java:36)
    at org.activiti.engine.impl.pvm.runtime.AtomicOperationActivityExecute.execute(AtomicOperationActivityExecute.java:44)
    at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:77)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:530)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:525)
    at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionNotifyListenerStart.eventNotificationsCompleted(AtomicOperationTransitionNotifyListenerStart.java:52)
    at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:56)
    at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:77)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:530)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:525)
    at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:49)
    at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:77)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:530)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:525)
    at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionCreateScope.execute(AtomicOperationTransitionCreateScope.java:49)
    at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:77)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:530)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:525)
    at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionNotifyListenerTake.execute(AtomicOperationTransitionNotifyListenerTake.java:65)
    at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:77)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:530)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:525)
    at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionDestroyScope.execute(AtomicOperationTransitionDestroyScope.java:115)
    at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:77)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:530)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:525)
    at org.activiti.engine.impl.pvm.runtime.AtomicOperationTransitionNotifyListenerEnd.eventNotificationsCompleted(AtomicOperationTransitionNotifyListenerEnd.java:36)
    at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:56)
    at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:77)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:530)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:525)
    at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:49)
    at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:77)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:530)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:525)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.take(ExecutionEntity.java:365)
    at org.activiti.engine.impl.bpmn.behavior.BpmnActivityBehavior.performOutgoingBehavior(BpmnActivityBehavior.java:102)
    at org.activiti.engine.impl.bpmn.behavior.BpmnActivityBehavior.performDefaultOutgoingBehavior(BpmnActivityBehavior.java:51)
    at org.activiti.engine.impl.bpmn.behavior.FlowNodeActivityBehavior.leave(FlowNodeActivityBehavior.java:44)
    at org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior.leave(AbstractBpmnActivityBehavior.java:47)
    at org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior.signal(UserTaskActivityBehavior.java:92)
    at org.activiti.engine.impl.persistence.entity.ExecutionEntity.signal(ExecutionEntity.java:348)
    at org.activiti.engine.impl.persistence.entity.TaskEntity.complete(TaskEntity.java:149)
    at org.activiti.engine.impl.cmd.CompleteTaskCmd.completeTask(CompleteTaskCmd.java:63)
    at org.activiti.engine.impl.cmd.CompleteTaskCmd.execute(CompleteTaskCmd.java:57)
    at org.activiti.engine.impl.cmd.CompleteTaskCmd.execute(CompleteTaskCmd.java:28)
    at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24)
    at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:42)
    at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42)
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
    at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40)
    at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33)
    at org.activiti.engine.impl.TaskServiceImpl.complete(TaskServiceImpl.java:144)
    at org.activiti.explorer.ui.task.TaskDetailPanel$5.buttonClick(TaskDetailPanel.java:353)
    at sun.reflect.GeneratedMethodAccessor108.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:490)
    … 22 more

  13. Joram August 30, 2012

    I’m not sure your expression had a correct syntax: expression should be of the form ${}, and it looks like you are using regular parantheses there …

    Also make sure your amount variable actually exists.

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>