cancel
Showing results for 
Search instead for 
Did you mean: 

How to add activiti elements 2 bpmn.xml generated by modeler

radhe_rajput
Champ in-the-making
Champ in-the-making
Hi,
I am looking for the way to create activiti specific bpmn2.0.xml using activiti-modeler only. I am able to customize the attributes of the task as per activiti to the activiti-modeler, I have achieved it by modifing properties of stencils of activiti2.0.json file. But when modeler generates the BPMN.xml, it do not include activiti specific extension elements. Is there any way to achieve this.

Thanks in advance.

Radhe
3 REPLIES 3

trademak
Star Contributor
Star Contributor
Hi,

Did you look at the BPMN 2.0 generator logic in the Activiti Modeler?
The best place to ask this is in the Signavio core components project.

Best regards,

radhe_rajput
Champ in-the-making
Champ in-the-making
Hello,
Finally I am able to do it, Somebody who have such requirement can following way.
Step 1.Modify the <MODELER-WEB-APP>\editor\stencilsets\extensions\bpmn2.0activiti\bpmn2.0activiti.json json file and add/remove activiti specific attributes.

This step make your attributes get visible on attributes pallete and start getting reflected to your-process.signavio.xml file.

Now to make your attributes getting reflected to your-process.bpmn20.xml. Following steps need to be performed.

Step 2.Modify the source code of the corresponding FactoryClass  and invoke explicitly setter methods of such attributes you have added.
e.g. For executing any service task in activiti you want excute java type task which needs class name for execution.
for added new class variable to de.hpi.bpmn2_0.model.activity.type.ServiceTask class and explicitly invoke service task into
de.hpi.bpmn2_0.factory.node.TaskFactory class.
             ServiceTask task = new ServiceTask();
     task.setId(shape.getResourceId());
task.setName(shape.getProperty("name"));
task.setClass(…)…;

Hoping this small explanation may help somebody.

Thanks,
Radhe

math7189
Champ in-the-making
Champ in-the-making
Hi,

I'm trying to do the same, I added a new attribute in the pallete. Now I want to have it in my bpmn.xml file.

I have now a new field called "Formular" with the id "form". I only want it for the userTask type.

I modified the UserTask class



package de.hpi.bpmn2_0.model.activity.type;

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

import de.hpi.bpmn2_0.model.activity.Task;
import de.hpi.bpmn2_0.model.activity.misc.UserTaskImplementation;
import de.hpi.bpmn2_0.model.activity.resource.Rendering;
import de.hpi.bpmn2_0.model.callable.GlobalTask;
import de.hpi.bpmn2_0.model.callable.GlobalUserTask;
import de.hpi.bpmn2_0.transformation.Visitor;


/**
* <p>Java class for tUserTask complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* &lt;complexType name="tUserTask">
*   &lt;complexContent>
*     &lt;extension base="{http://www.omg.org/bpmn20}tTask">
*       &lt;sequence>
*         &lt;element ref="{http://www.omg.org/bpmn20}rendering" maxOccurs="unbounded" minOccurs="0"/>
*       &lt;/sequence>
*       &lt;attribute name="implementation" type="{http://www.omg.org/bpmn20}tUserTaskImplementation" default="unspecified" />
*   &lt;attribute name="form" type="{http://www.w3.org/2001/XMLSchema#string" />   
*     &lt;/extension>
*   &lt;/complexContent>
* &lt;/complexType>
* </pre>
*
*
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "tUserTask", propOrder = {
    "rendering"
})
public class UserTask
    extends Task
{

/* Constructors */

/**
  * Default constructor
  */
public UserTask() { }


/**
  * Copy constructor based on a {@link UserTask}
  * @param task
  */
public UserTask(UserTask task) {
  super(task);
 
  this.getRendering().addAll(task.getRendering());
  this.setImplementation(task.getImplementation());
  this.setForm(task.getForm());
}

    protected List<Rendering> rendering;
    @XmlAttribute
    protected UserTaskImplementation implementation;
    @XmlAttribute
    protected String form;
   
public void acceptVisitor(Visitor v){
  v.visitUserTask(this);
}

public GlobalTask getAsGlobalTask() {
  GlobalUserTask gut = new GlobalUserTask(super.getAsGlobalTask());
  gut.getRendering().addAll(this.getRendering());
  gut.setImplementation(this.getImplementation());
  return gut;
}

/* Getter & Setter */

    /**
     * Gets the value of the rendering property.
     *
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the rendering property.
     *
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getRendering().add(newItem);
     * </pre>
     *
     *
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link Rendering }
     *
     *
     */
    public List<Rendering> getRendering() {
        if (rendering == null) {
            rendering = new ArrayList<Rendering>();
        }
        return this.rendering;
    }

    /**
     * Gets the value of the implementation property.
     *
     * @return
     *     possible object is
     *     {@link UserTaskImplementation }
     *    
     */
    public UserTaskImplementation getImplementation() {
        if (implementation == null) {
            return UserTaskImplementation.UNSPECIFIED;
        } else {
            return implementation;
        }
    }

    /**
     * Sets the value of the implementation property.
     *
     * @param value
     *     allowed object is
     *     {@link UserTaskImplementation }
     *    
     */
    public void setImplementation(UserTaskImplementation value) {
        this.implementation = value;
    }
   
    /**
     * Gets the value of the form property.
     *
     * @return
     *     possible object is
     *     {@link String }
     *    
     */
    public String getForm() {

            return form;
    }

    /**
     * Sets the value of the form property.
     *
     * @param value
     *     allowed object is
     *     {@link String }
     *    
     */
    public void setForm(String value) {
        this.form = value;
    }

}

and the TaskFactory class

@Property(name = "tasktype", value = "User")
public UserTask createUserTask(GenericShape shape) {
  UserTask task = new UserTask();

  task.setId(shape.getResourceId());
  task.setName(shape.getProperty("name"));

  /* Set implementation property */
  String implementation = shape.getProperty("implementation");
  if (implementation != null) {
   task.setImplementation(UserTaskImplementation
     .fromValue(implementation));
  }
 
  /*Set form property*/
  String form = shape.getProperty("form");
  if(form != null){
   task.setForm(form);
  }

  /* Set ActivityResources */
  String resourcesProperty = shape.getProperty("resources");
  if (resourcesProperty != null) {
   this.setActivityResources(task, resourcesProperty);
  }

  return task;
}

But there is nothing when I look on the output file. Any idea to solve the problem? Thanks