Тип поля настраиваемой формы Camunda

Мы внедряем Camunda в наше приложение, и у нас проблема с формами

Нам нужно реализовать собственный тип поля формы. Мы используем Camunda Modeler и настраиваемый тип в атрибуте Type поля, но когда мы пытаемся развернуть войну, мы всегда видим одну и ту же ошибку.

ENGINE-16004 Exception while closing command context: ENGINE-09005 Could not parse BPMN process. Errors:
* unknown type 'file' [...]

Мы провели поиск в документации, но не знаем, как реализовать настраиваемые типы полей формы

Есть идеи, как это решить?

заранее спасибо


person Ruben J Garcia    schedule 25.04.2016    source источник
comment
Я предлагаю добавить проблему в camunda jira, четко описав вариант использования   -  person ThomasRS    schedule 05.07.2016


Ответы (2)


Вы не предоставили много информации о своем проекте и о том, как вы пытаетесь использовать настраиваемые типы во встроенных? TaskForms. У Camunda есть хороший пример того, как это сделать с помощью встроенных TaskForms: https://github.com/camunda/camunda-bpm-examples/tree/master/usertask/task-form-embedded-serialized-java.-object

person Patrick Werner    schedule 07.07.2016
comment
OP спрашивает о сгенерированной форме, а не о встроенной форме. Однако этот пример полезен, он показывает, как можно редактировать и отображать объект клиента, содержащий список адресов. - person dschulten; 01.12.2018

Пользовательский тип в сгенерированных формах предназначен для типов, которые могут быть отображены как значение одного поля ввода 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