Zeige letzte Bearbeiter
1 {{content/}}
2
3 Die Bundle-Properties bieten dem Plugin-Entwickler die Möglichkeit Plugins von außen zu konfigurieren und damit das Laufzeitverhalten der entwickelten Plugins zu steuern.
4
5 Die Bundle-Properties können beispielsweise verwendet werden, um Adressen und Zugangsinformationen von Webservice-Endpoints konfigurierbar zu gestalten.
6
7 Sie eignen sich dafür, bestimmte Plugin-Typen, wie das //IPluginFormPreRender-Plugin //oder das //IPluginServletAction-Plugin//, die selbst über keine eigene Konfigurationsoberfläche in {{formcycle case="dat"/}} verfügen, von außen zu beeinflussen.
8
9 == Definition von Bundle-Properties durch den Plugin-Entwickler ==
10
11 Die Oberfläche von {{formcycle case="dat"/}} bietet die Möglichkeit neue Properties mit Namen und Wert am jeweiligen Plugin-Bundle zu pflegen.
12 In den meisten Fällen ist es jedoch sinnvoll, wenn der Name (Zugriffsschlüssel, muss eindeutig innerhalb der Bundle-Properties sein)
13 und gegebenenfalls ein Default-Wert für ein Property, bereits durch den Plugin-Entwickler festgelegt werden.
14 \\Damit werden zum einen Schreibfehler beim Anlegen der Zugriffsschlüssels durch den Plugin-Benutzer ausgeschlossen und
15 zum Anderen erhält der Plugin-Benutzer eine Sicht auf alle durch den Plugin-Entwickler unterstützten Konfigurationswerte ohne Dokumentationen lesen zu müssen.
16
17 === Interface IBundleProperties ===
18
19 {{figure image="plugin_props_config_ui.png" title="FORMCYCLE Bundle-Properties: Darstellung in Oberfläche" width="500"}}
20 Durch Einbinden des Interfaces //IBundleProperties// können konfigurierbare Optionen in der Oberfläche von {{formcycle case="dat"/}} angezeigt werden.
21 {{/figure}}
22
23 Das Interface //IBundleProperties //bietet mit der Schnittstellen-Methode //getConfigProperties()// die Möglichkeit Bundle-Properties
24 vorzukonfigurieren.
25 Die Methode muss eine Map mit Objekten vom Typ //IBundleConfigParam// zurückliefern.
26 Es existieren zwei mögliche Implementierung von //IBundleConfigParam//:
27
28
29 * {{litem title="BundleConfigGroupItem"}}Dieses Element kann zur Strukturierung der Listendarstellung in der Oberfläche von {{formcycle case="dat"/}} verwendet werden.{{/litem}}
30 * {{litem title="BundleConfigParam"}}Dient zur Definition eines Bundle-Properties. Es können die folgenden Eigenschaften definiert werden.{{/litem}}
31 ** {{litem title="name"}}Der Name oder Zugriffsschlüssel einer Property.{{/litem}}
32 ** {{litem title="description"}}Beschreibung zu einer Property. Wird per //Mouseover// über den //Property//-Namen in der Oberfläche eingeblendet. Kann verwendet werden, um dem Nutzer des Plugins nähere Information zur Verwendung oder möglicher Wertebereiche des Parameters anzuzeigen.{{/litem}}
33 ** {{litem title="mandatory"}}Legt fest, ob der Parameter in der Oberfläche als Pflichtparameter dargestellt wird und ein Validierung auf Vorhandensein eines Wertes beim Abspeichern durchgeführt wird.{{/litem}}
34 ** {{litem title="crypticValue"}}Legt fest, ob der Wert der Property wie bei einem Passwordfeld maskiert werden soll. Standardwert ist {{code}}false{{/code}}.{{/litem}}
35 ** {{litem title="defaultValue"}}Ermöglicht die Festlegung eines Defaultwertes durch den Entwickler. Standardwert ist {{code}}null{{/code}}.{{/litem}}
36
37 Das nachfolgende Codebeispiel zeigt eine mögliche Implementierung:
38
39 {{code language="java" title=""}}
40 @SuppressWarnings("serial")
41 public class MyBundleProperties implements IBundleProperties {
42
43 /**
44 * Returns a map with definitions of bundle configuration parameters. Key is the parameter name, value is a bundle
45 * parameter definition of type {@link IBundleConfigParam}.
46 * @param resHelper ResourceHelper to determine i18n values from the plugin bundle, if they exists
47 * @param currentLocale the current locale
48 * @return {@link Map} with objects of type {@link IBundleConfigParam} or <code>null</code>
49 */
50 @Override
51 public Map<String, IBundleConfigParam> getConfigProperties(IPluginResourceHelper resHelper, Locale currentLocale) {
52 Map<String, IBundleConfigParam> config = new LinkedHashMap<>();
53 config.put("Group", new BundleConfigGroupItem("Unterstützte Parameter:"));
54 config.put("Parameter1", new BundleConfigParam("Parameter1", "Pflichtparameter im Scope des Plugins mit Defaultwert", true, "Defaultwert"));
55 config.put("Parameter2", new BundleConfigParam("Parameter2", "Pflichtparameter im Scope des Plugins", true));
56 config.put("Parameter3", new BundleConfigParam("Parameter3", "Parameter im Scope des Plugins mit Defaultwert", false, "Initialwert"));
57 config.put("Parameter4", new BundleConfigParam("Parameter4", "Parameter im Scope des Plugins", false));
58 return config;
59 }
60
61 }
62
63 {{/code}}
64
65 == Zugriff auf Bundle-Properties innerhalb der Plugin-Logik ==
66
67 Der Zugriff auf Bundle-Properties innerhalb von Plugins kann über die Einbindung der abstrakten Klasse //AFCPlugin// erfolgen.
68 Diese Klasse liefert mit der Methode //getProperties()// ein //java.util.Properties//-Objekt zurück, was den Zugriff auf die Properties ermöglicht.
69
70 == Beispiele zur Nutzung von Bundle-Properties ==
71
72 Ausschnitt aus der //execute//-Methode einer //IPluginFormPreRender//-Implementierung. Ein PreRender-Plugin wird standardmäßig bei allen Formularaufrufen im Scope des Mandanten, in dem er registriert wurde, ausgeführt.
73
74 Wenn man zum Beispiel möchte, dass der //PreRenderer// nur beim Aufruf bestimmter Formulare ausgeführt wird, so kann man dies mittels //Bundle-Properties// konfigurierbar gestalten. Das nachfolgende Codebeispiel liest den Wert der //Bundle-Property// {{code}}activate.form.alias{{/code}} aus, welcher die Namen von Formularen mit Komma getrennt enthält, und
75 vergleicht diese mit den Namen des aktuellen Formulars, in dessen Anwendungsbereich der //PreRenderer// gerade ausgeführt wird.
76
77 Wenn der Name des aktuellen Formulars nicht mit einen Namen aus der konfigurierten Liste übereinstimmt, wird die weitere Verarbeitung des PreRenderers abgebrochen.
78
79 {{code language="java" title=""}}
80 public class MyPreRenderer extends AFCPlugin implements IPluginFormPreRender {
81 @Override
82 public IPluginFormPreRenderRetVal execute(IPluginFormPreRenderParams preRenderParams) throws FCPluginException {
83 // Bundle-Property 'activate.form.alias' auslesen
84 Set<String> alias = getConfiguredFormAlias("activate.form.alias");
85
86 // Ist PreRender-Plugin für aktuelle Formularinstanz freigeschalten?
87 IExtendedFormRequestContext ctx = (IExtendedFormRequestContext)preRenderParams.getFormRequestContext();
88 if(!alias.contains(ctx.getProjekt().getName())) return null;
89
90 // weitere PreRender-Implementierung
91 // ....
92
93 return null;
94 }
95
96 protected Set<String> getConfiguredFormAlias(String propertyName) {
97 String formAlias = getProperties().getProperty(propertyName, null);
98 if(StringUtils.isBlank(formAlias)) {
99 return Collections.emptySet();
100 }
101 String[] arr = StringUtils.split(formAlias, ",");
102 return new HashSet<String>(Arrays.asList(arr));
103 }
104 }
105 {{/code}}
Copyright 2000-2025