... |
... |
@@ -22,42
+22,42 @@ |
22 |
22 |
|
23 |
23 |
Die Schnittstelle bietet folgende Methodesignaturen: |
24 |
24 |
|
25 |
|
-* **//public Map<String, IBundleConfigParam> getConfigProperties(IPluginResourceHelper resHelper, Locale currentLocale)//** |
26 |
|
- |
27 |
|
-=== Methode: //getConfigProperties// === |
28 |
|
- |
29 |
|
-Dient zur Konfiguration von Eigenschaftswerten, die allen Java-Klassen innerhalb des Plugin-Bundles zur Verfügung stehen sollen. |
30 |
|
- |
31 |
|
-==== Übergabewerte: ==== |
32 |
|
- |
33 |
|
- |
34 |
|
-; IPluginResourceHelper |
35 |
|
-: Objekte zum Zugriff auf die im Plugin-Bundle enthaltenen Datei-Ressourcen. |
36 |
|
-; Locale |
37 |
|
-: Das für den aktuell angemeldeten Nutzer festgelegte //Locale//-Objekt (enthält Informationen zur Sprache und Region). |
|
25 |
+{{panel title="{{code language='java'~}~}Map<String, IBundleConfigParam> getConfigProperties(IPluginResourceHelper resHelper, Locale currentLocale){{/code~}~}" triggerable="true" fullwidth="true"}} |
|
26 |
+((( |
|
27 |
+Die Methode //getConfigProperties// dient zur Konfiguration von Eigenschaftswerten, die allen Java-Klassen innerhalb des Plugin-Bundles zur Verfügung stehen sollen. |
|
28 |
+))) |
|
29 |
+**Übergabewerte:** |
|
30 |
+((( |
|
31 |
+* **IPluginResourceHelper** |
|
32 |
+** Objekte zum Zugriff auf die im Plugin-Bundle enthaltenen Datei-Ressourcen. |
|
33 |
+* **Locale** |
|
34 |
+** Das für den aktuell angemeldeten Nutzer festgelegte //Locale//-Objekt (enthält Informationen zur Sprache und Region). |
38 |
38 |
Dieses kann zum Ermitteln von sprachabhängigen Texten verwendet werden. |
|
36 |
+))) |
39 |
39 |
|
40 |
|
-==== Rückgabewerte: ==== |
41 |
|
- |
42 |
|
- |
|
38 |
+**Rückgabewerte:** |
|
39 |
+((( |
43 |
43 |
Die Methode muss ein Objekt vom Typ //java.util.Map// mit Value-Objekten vom Typ //IBundleConfigParam// zurückliefern. |
44 |
44 |
Es existieren zwei mögliche Implementierung von //IBundleConfigParam//: |
|
42 |
+))) |
45 |
45 |
|
46 |
|
-; BundleConfigGroupItem |
47 |
|
-: Dieses Element kann zur Strukturierung der Listendarstellung in der Oberfläche von {{formcycle case="dat"/}} verwendet werden. |
48 |
|
-; BundleConfigParam |
49 |
|
-: Dient zur Definition eines Bundle-Properties. Ein Objekt definiert die folgenden Eigenschaften: |
50 |
|
-: //name// |
51 |
|
-:: Der Name oder Zugriffsschlüssel einer Property. |
52 |
|
-: //description// |
53 |
|
-:: 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. |
54 |
|
-: //mandatory// |
55 |
|
-:: 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. |
56 |
|
-: //crypticValue// |
57 |
|
-:: Legt fest, ob der Wert der Property wie bei einem Passwordfeld maskiert werden soll. Standardwert ist {{code}}false{{/code}}. |
58 |
|
-: //defaultValue// |
59 |
|
-:: Ermöglicht die Festlegung eines Defaultwertes durch den Entwickler. Standardwert ist {{code}}null{{/code}}. |
|
44 |
+* **BundleConfigGroupItem** |
|
45 |
+** Dieses Element kann zur Strukturierung der Listendarstellung in der Oberfläche von {{formcycle case="dat"/}} verwendet werden. |
|
46 |
+* **BundleConfigParam** |
|
47 |
+** Dient zur Definition eines Bundle-Properties. Ein Objekt definiert die folgenden Eigenschaften: |
|
48 |
+**: //name// |
|
49 |
+**:: Der Name oder Zugriffsschlüssel einer Property. |
|
50 |
+**: //description// |
|
51 |
+**:: 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. |
|
52 |
+**: //mandatory// |
|
53 |
+**:: 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. |
|
54 |
+**: //crypticValue// |
|
55 |
+**:: Legt fest, ob der Wert der Property wie bei einem Passwordfeld maskiert werden soll. Standardwert ist {{code}}false{{/code}}. |
|
56 |
+**: //defaultValue// |
|
57 |
+**:: Ermöglicht die Festlegung eines Defaultwertes durch den Entwickler. Standardwert ist {{code}}null{{/code}}. |
60 |
60 |
|
|
59 |
+{{/panel}} |
|
60 |
+ |
61 |
61 |
== Implementierungsbeispiel == |
62 |
62 |
|
63 |
63 |
Das nachfolgende Codebeispiel zeigt eine mögliche Implementierung: |
... |
... |
@@ -91,40
+91,71 @@ |
91 |
91 |
== Zugriff auf Bundle-Properties innerhalb der Plugin-Logik == |
92 |
92 |
|
93 |
93 |
Der Zugriff auf die Bundle-Properties innerhalb von einzelnen Plugin-Implementierungen wird über die Schnittstelle //IFCPlugin// und deren bereitgestellte Plugin-Lebenszyklus-Methoden ermöglicht. |
94 |
|
-Alle [[Plugin-Typen>>doc:Formcycle.PluginDevelopment.Types]] erben von dieser Schnittstelle, sodass damit in allen Plugin-Implementierungen ein Zugriff auf die Bundle-Properties möglich ist. |
|
94 |
+Alle [[Plugin-Typen>>doc:Formcycle.PluginDevelopment.Types.WebHome]] erben von dieser Schnittstelle, sodass damit in allen Plugin-Implementierungen ein Zugriff auf die Bundle-Properties möglich ist. |
95 |
95 |
|
96 |
96 |
== Beispiele zur Auslesen von Bundle-Properties == |
97 |
97 |
|
98 |
|
-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. |
|
98 |
+Das nachfolgende Beispiel zeigt den Zugriff auf die Bundle-Properties innerhalb einer //IPluginFormPreRender//-Implementierung. |
99 |
99 |
|
100 |
|
-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 |
101 |
|
-vergleicht diese mit den Namen des aktuellen Formulars, in dessen Anwendungsbereich der //PreRenderer// gerade ausgeführt wird. |
102 |
|
- |
|
100 |
+Ein PreRender-Plugin wird standardmäßig bei allen Formularaufrufen im Scope des Mandanten, in dem er registriert wurde, ausgeführt. |
|
101 |
+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. |
|
102 |
+Das nachfolgende Beispiel liest in der {{code}}execute{{/code}} Methode den Wert der //Bundle-Property// {{code}}activate.form.alias{{/code}} aus, welche die Namen von Formularen (mit Komma getrennt) enthält. |
|
103 |
+Anschließend werden diese Namen mit dem Namen des aktuellen Formulars, in dessen Anwendungsbereich der //PreRenderer// gerade ausgeführt wird, verglichen. |
103 |
103 |
Wenn der Name des aktuellen Formulars nicht mit einen Namen aus der konfigurierten Liste übereinstimmt, wird die weitere Verarbeitung des PreRenderers abgebrochen. |
104 |
104 |
|
105 |
105 |
{{code language="java" title=""}} |
106 |
|
-public class MyPreRenderer extends AFCPlugin implements IPluginFormPreRender { |
|
107 |
+public class MyPreRenderer implements IPluginFormPreRender { |
|
108 |
+ |
|
109 |
+ private Properties bundleProperties = null; |
|
110 |
+ |
|
111 |
+ /** |
|
112 |
+ * Name, welcher Plugin eindeutig identifizerbar macht. |
|
113 |
+ */ |
107 |
107 |
@Override |
108 |
|
- public IPluginFormPreRenderRetVal execute(IPluginFormPreRenderParams preRenderParams) throws FCPluginException { |
|
115 |
+ public String getName() { |
|
116 |
+ return "Mein PreRenderer"; |
|
117 |
+ } |
|
118 |
+ |
|
119 |
+ /** |
|
120 |
+ * Plugin-Lebenszyklus-Methode, welche beim Erzeugen der Objekt-Instanz aufgerufen wird. |
|
121 |
+ */ |
|
122 |
+ @Override |
|
123 |
+ public void initialize(IPluginInitializeData initializeData) throws FCPluginException { |
|
124 |
+ bundleProperties = initializeData.getProperties(); |
|
125 |
+ } |
|
126 |
+ |
|
127 |
+ /** |
|
128 |
+ * Methode zum Ausführen von Plugin-Logik. |
|
129 |
+ */ |
|
130 |
+ @Override |
|
131 |
+ public IPluginFormPreRenderRetVal execute(IPluginFormPreRenderParams params) throws FCPluginException { |
109 |
109 |
// Bundle-Property 'activate.form.alias' auslesen |
110 |
110 |
Set<String> alias = getConfiguredFormAlias("activate.form.alias"); |
111 |
111 |
|
112 |
112 |
// Ist PreRender-Plugin für aktuelle Formularinstanz freigeschalten? |
113 |
|
- IExtendedFormRequestContext ctx = (IExtendedFormRequestContext)preRenderParams.getFormRequestContext(); |
114 |
|
- if(!alias.contains(ctx.getProjekt().getName())) return null; |
115 |
|
- |
|
136 |
+ IExtendedFormRequestContext ctx = (IExtendedFormRequestContext)params.getFormRequestContext(); |
|
137 |
+ if (!alias.contains(ctx.getProjekt().getName())) { |
|
138 |
+ // keine Formularfreischaltung gefunden -> Verarbeitung abbrechen |
|
139 |
+ return new PluginFormPreRenderRetVal(Collections.EMPTY_MAP, true); |
|
140 |
+ } |
|
141 |
+ |
116 |
116 |
// weitere PreRender-Implementierung |
117 |
117 |
// .... |
118 |
118 |
|
119 |
|
- return null; |
|
145 |
+ return new PluginFormPreRenderRetVal(Collections.EMPTY_MAP, true); |
120 |
120 |
} |
121 |
121 |
|
|
148 |
+ /** |
|
149 |
+ * Funktion zum Ermitteln eines Bundle-Property-Wertes. |
|
150 |
+ * Der ermittelte Wert wird mittels Komma getrennt |
|
151 |
+ * und als HashSet zurückgeliefert. |
|
152 |
+ * @param propertyName |
|
153 |
+ * @return ein {@link HashSet} |
|
154 |
+ */ |
122 |
122 |
protected Set<String> getConfiguredFormAlias(String propertyName) { |
123 |
|
- String formAlias = getProperties().getProperty(propertyName, null); |
124 |
|
- if(StringUtils.isBlank(formAlias)) { |
125 |
|
- return Collections.emptySet(); |
126 |
|
- } |
127 |
|
- String[] arr = StringUtils.split(formAlias, ","); |
|
156 |
+ String formAlias = bundleProperties.getProperty(propertyName, null); |
|
157 |
+ if (XStringUtils.isBlank(formAlias)) { return Collections.emptySet(); } |
|
158 |
+ String[] arr = XStringUtils.split(formAlias, ","); |
128 |
128 |
return new HashSet<String>(Arrays.asList(arr)); |
129 |
129 |
} |
130 |
130 |
} |