Пользовательский тип в сгенерированных формах предназначен для типов, которые могут быть отображены как значение одного поля ввода html, бесполезно отображать сложные структуры, такие как таблицы или несколько входов для свойств bean-компонента.
https://forum.camunda.org/t/camunda-custom-form-field-type/501 описывает, как работает настраиваемый тип:
Пользовательский тип должен расширять AbstractFormFieldType
, который обеспечивает сопоставления между типами модели и типами отображения форм, см. DateTypeValue
для примера. Затем вы должны сообщить движку bpmn о своем настраиваемом типе, используя ProcessEngineConfiguration.setCustomFormTypes()
в ProcessEnginePlugin, у которого есть доступ к конфигурации механизма bpm.
Сгенерированная форма будет отображать тип отображения формы как одно поле ввода, только альтернативы - datepicker для даты и select для enum, как вы видите в HtmlFormEngine#renderFormField
:
if(isEnum(formField)) {
// <select ...>
renderSelectBox(formField, documentBuilder);
} else if (isDate(formField)){
renderDatePicker(formField, documentBuilder);
} else {
// <input ...>
renderInputField(formField, documentBuilder);
}
Это org.camunda.bpm.engine.impl.form.engine.HtmlFormEngine#renderInputField
, он отображает один ввод:
protected void renderInputField(FormField formField,
HtmlDocumentBuilder documentBuilder) {
HtmlElementWriter inputField = new HtmlElementWriter(INPUT_ELEMENT, true);
addCommonFormFieldAttributes(formField, inputField);
String inputType = !isBoolean(formField) ? TEXT_INPUT_TYPE : CHECKBOX_INPUT_TYPE;
inputField.attribute(TYPE_ATTRIBUTE, inputType);
// add default value
Object defaultValue = formField.getDefaultValue();
if(defaultValue != null) {
inputField.attribute(VALUE_ATTRIBUTE, defaultValue.toString());
}
// <input ... />
documentBuilder.startElement(inputField).endElement();
}
person
dschulten
schedule
01.12.2018