Ir al contenido

Crear su propio plugin de Autocomplete Form

Puede crear su propio formulario de autocompletado.

Condiciones:

  • La nueva clase Autocomplete Form Values debe implementar la interfaz “AutocompleteFormValues”.
  • La nueva clase Default Form Values debe declararse en el paquete “com.openkm.plugin.form.values”.
  • La nueva clase Default Form Values debe estar anotada con “@PluginImplementation”.
  • La nueva clase Default Form Values debe extender “BasePlugin”.

Interfaz AutocompleteFormValues:

package com.openkm.plugin.form.values;
import com.openkm.bean.form.*;
import net.xeoh.plugins.base.Plugin;
import java.util.List;
import java.util.Map;
public interface AutocompleteFormValues extends Plugin {
String getName();
void autocomplete(String uuid, String grpName, List<FormElement> formElementList);
/**
* Helper method to autocomplete form elements with provided properties.
* Sets matching values on Input, CheckBox, TextArea, SuggestBox, and Select elements.
*/
default void autocompleteHelper(List<FormElement> formElementList, Map<String, String> props) {
// ... default implementation provided by the interface
}
}

La nueva clase debe cargarse en el paquete com.openkm.plugin.form.values porque el sistema de plugins de la aplicación intentará cargarla desde ahí. Vea el ejemplo a continuación:

Método Tipo Descripción
autocomplete(String uuid, String grpName, List formElementList) void El método autocompleta los elementos de formulario del grupo.

Ejemplo de implementación de valores de formulario de autocompletado

Sección titulada «Ejemplo de implementación de valores de formulario de autocompletado»
package com.openkm.plugin.form.values;
import com.openkm.bean.form.FormElement;
import com.openkm.bean.form.HorizontalPanel;
import com.openkm.bean.form.Input;
import com.openkm.bean.form.VerticalPanel;
import com.openkm.plugin.BasePlugin;
import lombok.extern.slf4j.Slf4j;
import net.xeoh.plugins.base.annotations.PluginImplementation;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
@Slf4j
@PluginImplementation
public class SampleAutocompleteFormValues extends BasePlugin implements AutocompleteFormValues {
@Override
public String getName() {
return "Sample autocomplete form values implementation";
}
@Override
public void autocomplete(String uuid, String grpName, List<FormElement> formElementList) {
log.info("autocomplete({}, {}, {})", uuid, grpName, formElementList);
autocompleteValues(formElementList);
}
private void autocompleteValues(List<FormElement> formElementList) {
for (FormElement formElement : formElementList) {
if (formElement instanceof Input input) {
if (Input.TYPE_TEXT.equals(input.getType()) && StringUtils.isEmpty(input.getValue())) {
input.setValue("Autocomplete with name: " + formElement.getName());
}
} else if (formElement instanceof HorizontalPanel hPanel) {
autocompleteValues(hPanel.getElements());
} else if (formElement instanceof VerticalPanel vPanel) {
autocompleteValues(vPanel.getElements());
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE property-groups PUBLIC "-//OpenKM//DTD Property Groups 3.11//EN"
"http://www.openkm.com/dtd/property-groups-3.11.dtd">
<property-groups>
<property-group label="Autocomple sample" name="okg:autocomplete" autocompleteValueClassName="com.openkm.plugin.form.values.SampleAutocompleteFormValues">
<input label="Input label first" name="okp:autocomplete.first" type="text"/>
<hpanel name="okp:autocomplete.horizontal1">
<input label="Input label 1" name="okp:autocomplete.input_h1" />
<input label="Input label 2" name="okp:autocomplete.input_h2" />
</hpanel>
</property-group>
</property-groups>

Si un documento contiene texto extraído y los parámetros de inteligencia artificial están correctamente configurados en los ajustes de la aplicación OpenKM, los metadatos se pueden extraer automáticamente usando el siguiente plugin de autocompletado:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE property-groups PUBLIC "-//OpenKM//DTD Property Groups 3.11//EN"
"http://www.openkm.com/dtd/property-groups-3.11.dtd">
<property-groups>
<property-group label="Consulting" name="okg:consulting" autocompleteValueClassName="com.openkm.plugin.form.values.AIAutocompleteFormValues">
<input label="Input label" name="okp:consulting.input1" />
<separator label="Separator label" name="okp:consulting.separator" />
<input label="Input label" name="okp:consulting.input2" />
</property-group>
</property-groups>