How to set a custom object?

Hello,

I’m trying to set a variable to process instance like,

Map<String, Object> variables = new HashMap<String, Object)
variables.put(“process”, process);
ProcessInstance flowableProcessInstance = runtimeService.
startProcessInstanceByKey(“CAS_Process”);

Error: couldn’t find a variable type that is able to serialize

Here process is an xml model and for this issue I found Array or JSON Object Process Variable but can you explain how setCustomPostVariableTypes works and how can I use it in my scenario?

Regards,
Ashmita Sinha

1 Like

Hi Aashi,

Can’t you make your XML model as serializable? if you make model serializable flowable will implicitly handle them saving to DB.

Thanks,

1 Like

Hi Ashmita,

customPostVariableTypes work exactly in the same way as standard types. They are added to variableTypes during initialization.

        public void initVariableTypes() {
        if (variableTypes == null) {
            variableTypes = new DefaultVariableTypes();
            if (customPreVariableTypes != null) {
                for (VariableType customVariableType : customPreVariableTypes) {
                    variableTypes.addType(customVariableType);
                }
            }
            variableTypes.addType(new NullType());
            variableTypes.addType(new StringType(getMaxLengthString()));
            variableTypes.addType(new LongStringType(getMaxLengthString() + 1));
            variableTypes.addType(new BooleanType());
            variableTypes.addType(new ShortType());
            variableTypes.addType(new IntegerType());
            variableTypes.addType(new LongType());
            variableTypes.addType(new DateType());
            variableTypes.addType(new JodaDateType());
            variableTypes.addType(new JodaDateTimeType());
            variableTypes.addType(new DoubleType());
            variableTypes.addType(new UUIDType());
            variableTypes.addType(new JsonType(getMaxLengthString(), objectMapper));
            variableTypes.addType(new LongJsonType(getMaxLengthString() + 1, objectMapper));
            variableTypes.addType(new ByteArrayType());
            variableTypes.addType(new SerializableType(serializableVariableTypeTrackDeserializedObjects));
            if (customPostVariableTypes != null) {
                for (VariableType customVariableType : customPostVariableTypes) {
                    variableTypes.addType(customVariableType);
                }
            }
        }
    }

You can add your own implementation of SerializableType to the customPostVariableTypes. As an example have a look on flowable-engine/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/types/LongStringType.java at b12ac2d23c176f8b35aeef4aa6c4bee8b3610bad · flowable/flowable-engine · GitHub

In your scenario there are many possibilities but If you want to implement your own SerializableType for Process class. Just do that and add it to customPostVariableTypes.

Regards
Martin

1 Like