Database counter plugin


The database counter plugin may be installed as either a client plugin or a system plugin. It requries no additional configuration.

The database counter plugin lets you create one or more global counter in a database. The counter value may be incremented, decremented or reset during workflow processing. Some possible uses cases are:

  • A reservation form that counts the number of participants. When a certain limit is reached, further form submissions are blocked.
  • Generating a custom ID for a form record that is independent of the internal FORMCYCLE process ID. This is useful especially when the ID needs to conform to a certain pattern or has to be reset in regular intervals.
  • Repeating the actions of a certain state n times, where n is set depending of a submitted form value.

Furthermore, it is also possible to access the current value of the counter via a system variable during workflow processing; or via an AJAX request  from within a form.

Each counter has got both a name as well as a unqiue UUID. The UUID uniquely identifies a counter and is used when querying the counter value with an AJAX request.

Workflow action "Counter"

Once the plugin is installed, you can choose a new action in the workflow processing configuration. The action is a plugin action named Counter. You can use this action to modify the value of a counter or reset it in regular intervals.

Allgemeine Einstellungen

Base settings for the workflow action Counter. Here you can choose which counter should be changed and in what manner.
1 - Counter name
Name of the counter to be modified. For each counter you can see its name as well as its UUID. The UUID uniquely identifies a counter and is used when querying it via an AJAX request. To delete a counter, first select the counter, then click on the thrash icon to the right. To add a counter, first click on the plus icon, then enter a name for the new counter, and finally save the counter by pressing the floppy disc icon.
2 - Counting action
Lets you chose how the value of the counter should be changed. Possible options are:
Increment count
Adds the given amount to the current value of the counter.
Decrement count
Substracts the given amount from the current value of the counter.
Reset counter to start value
Sets the current value of the counter back to the selected initial value.
3 - Step size
Amount by which the counter is incremented or decremented.
4 - Initial value
The intial starting value of the counter. This is the value of the counter when it is first created. You may also reset the counter to this value.
5 - Reset automatically
When this option is enabled, the counter is reset automatically by the system when certain conditions are met; such as each week, or when the counter value reaches a certain limit. See below for how to configure this feature.

Reset automatically

Configuration for resetting a counter when its value exceed a given limit.

Configuration for resetting a counter on a daily basis.

Configuration for resetting a counter on a weekly basis.

Configuration for resetting a counter on a monthly basis.

Configuration for resetting a counter on a yearly basis.

When a counter is reset, then after the counter action was processed, its value will be equal to the configured initial value. For example: Assume the counter action was configured to increment the counter by 3 each time it is executed, and should be reset daily. Let the the current counter value be 39 and the intial value 11. The first counter action that is executed on a new day will now reset the counter to 11, and not be incremented at all. Starting with the second counter action of that day, the counter will be incremented by 3 each time the action is executed.

A counter may be reset either in regular intervals or when its value exceeds a certain threshold. This feature is available only if the checkbox reset automatically was enabled and the counting action was not set to Reset counter to start value.

Regarding resetting the counter in daily intervals: Please note that the counter is not reset by background task, but only when the workflow action counter is executed. Or, to be more precise, the counter value is reset (instead of being incremented or decremented), when the time points at which the counter should have been reset contains at least one point that lies between the last point in time the counter value was modified and the current point in time.

1 - Bedingung
Hier kann festgelegt werden, wann und unter welchen Umständen der Zähler zurückgesetzt werden soll.
Zähler größer gleich
Nur verfügbar, wenn als Zählaktion Hochzählen gewählt wurde. Der Zähler wird auf den Startwert zurückgesetzt, wenn durch die aktuelle Aktion der Wert des Zählers so geändert wird, dass dieser größer oder gleich dem in (2) festgelegten Wert ist.
Zähler kleiner gleich
Nur verfügbar, wenn als Zählaktion Herunterzählen gewählt wurde. Der Zähler wird auf den Startwert zurückgesetzt, wenn durch die aktuelle Aktion der Wert des Zählers so geändert wird, dass dieser kleiner oder gleich dem in (2) festgelegten Wert ist.
täglich
Der Zähler wird jeden Tag zur bei (2) gewählten Uhrzeit auf den Startwert zurückgesetzt. 
wöchentlich
Der Zähler wird an jedem unter (2) gewählten Wochentag zu der unter (3) gewählten Uhrzeit zurückgesetzt.
monatlich
Der Zähler wird jeden Monat zum unter (2) gewählten Tag zu der unter (3) gewählten Uhrzeit zurückgesetzt.
 jährlich
Der Zähler wird jedes Jahr zum unter (2) und (3) gewählten Tag zu der unter (4) gewählten Uhrzeit zurückgesetzt

Allgemeine Rückgabeparameter

Einstellungen für die Rückgabeparameter, die später über Platzhalter verfügbar sind.

Manchmal ist es notwendig, auf den neuen Zählwert zugreifen zu können. Dies kann über Aktionsplatzhalter geschehen, welche auf die Rückgabewerte einer Aktion zugreifen. In den allgemeinen Rückgabeparametern kann eingestellt werden, über welchem Schlüssel die Rückgabeparameter Aktion zugegriffen werden kann. Beispielsweise trage die Zähleraktion den Namen CountUp. Dann kann über den Platzhalter [%$CountUp.RESULT[0].count%] auf den aktuellen Zählwert zugegriffen werden, falls unter (3) bei den allgemeinen Rückgabeparameter der Wert count eingetragen wurde. Folgende Rückgabeparameter sind verfügbar:

1 - ResultCode
Ein nummerischer Zahlenwert, der angibt, ob die Zählaktion erfolgreich war oder nicht. Folgende Ergebnisnummern sind möglich:
1 (OK)
Die Zählaktion wurde erfolgreich abgearbeitet.
10 (UNKNOWN_ACTION_ERROR)
Die Zählaktion kann nicht ausgeführt werden, da eine unbekannte Zählaktion ausgewählt wurde. Aktuell werden die Zählaktionen Hochzählen, Herunterzählen und Auf den Startwert zurücksetzen unterstützt.
11 (PARSING_ERROR)
Ein konfigurierter Wert hat nicht den erwarteten Datentyp, etwa wenn für die Schrittweite des Zählers keine syntaktisch korrekte Zahl eingegeben wurde.
40 (INTERNAL_ERROR)
Es ist ein anderer Fehler aufgetreten, der nicht näher klassifiziert werden kann.
2 - ResultMessage
Eine englische Beschreibung des Resultats (Erfolg oder Fehler).
3 - Counter
Der neue nummerische Wert des Zählers, nachdem die Zählaktion ausgeführt wurde.
4 - IsReset
Entweder true, falls der Zähler durch die aktuelle Aktion zurückgesetzt wurde; oder false, wenn er nicht zurückgesetzt wurde.
5 - CounterAfterReset
Falls der Zähler zurückgesetzt wurde: Der nummerische Wert des Zählers vor dem Zurücksetzen.

Systemplatzhalter-Plugin

Ein Beispiel für den Platzhalter zum Auslesen des Zählwerts. Hier wird ein Zähler ausgelesen, der die Anzahl an Anmeldungen für eine Veranstaltung zählt. Dann wird geprüft, ob der Zählwert die maximale Anzahl an Anmeldungen übersteigt. Basierend auf dieser Prüfung kann dem Nutzer dann ein Fehler angezeigt werden, falls die Veranstaltung bereits ausgebucht ist. Hierbei handelt es sich um eine serverseitige Prüfung zur Validierung, bereits im Formular bei der Anmeldung sollte dem Nutzer natürlich schon die Information gegeben werden, ob überhaupt noch Plätze frei sind.

Nach Installation des Plugins ist ein neuer Systemplatzhalter verfügbar, über den auf den aktuellen Wert eines Zählers zugegriffen werden kann. Dies ist etwa nützlich, um in einer Aktionsbedingung den Zählwert nutzen und prüfen zu können. Der Platzhalter baut sich nach dem folgenden Schema auf:

[%$DBCOUNTER.<Zählername>%]

Um also etwa auf den Zähler mit dem Name test zuzugreifen, muss der folgende Platzhalter genutzt werden:

[%$DBCOUNTER.test%]

Servlet-Aktions-Plugin

Beispiel zum Auslesen eines Zählers im Formular mittels AJAX. Die URL wird anhand der im Formular zur Verfügung stehenden Metadaten aufgebaut. Hiermit wird vermieden, die URL hart im Quelltext zu hinterlegen, was zu Fehlern führt, wenn sich etwa der Server oder der Kontextpfad ändern sollte.

Nach Installation des Plugins ist eine neue Servlet-Aktion verfügbar, mit der auf den aktuellen Wert eines Zähler zugegriffen werden kann. Dies ist etwa nützlich, wenn aus dem Formular heraus ein Zählwert per AJAX-Anfrage abgerufen werden soll. Die URL für das Servlet baut sich nach dem folgenden Schema auf:

https://<HOST>/<FORMCYCLE_CONTEXT_PATH>/plugin?name=Servlet%20Counter&client-id=<MANDANT_ID>&id=<ZAEHLER_UUID>

Falls also etwa FORMCYCLE lokal unter dem Pfad xima-formcycle installiert wurde, der Zähler in einem Projekt des Mandanten mit der ID 1 verwendet wird und die UUID bc49d3b0-f869-4e59-864e-ddcc2925ed63 besitzt, dann lautet die URL:

https://localhost:8080/xima-formcycle/plugin?name=Servlet%20Counter&client-id=1&id=bc49d3b0-f869-4e59-864e-ddcc2925ed63

Alternativ ist es auch möglich, statt der client-id die ID des Formulars zu verwenden. Diese IDs lediglich verwendet, um das Servlet-Aktions-Plugin zu bestimmen, welches ausgeführt werden soll, und werden von diesem konkreten Plugin nicht ausgewertet:

https://<HOST>/<FORMCYCLE_CONTEXT_PATH>/plugin?name=Servlet%20Counter&project-id=<FORMULAR_ID>&id=<ZAEHLER_UUID>

Nach Ausführung des Servlet-Aktions-Plugin wird das Ergebnis als JSON-Objekt zurückgeliefert, siehe hierzu auch die Abbildung. Dieses JSON-Objekt hat die folgenden Einträge:

Status
Gibt an, ob der Servlet-Aufruf erfolgreich war. Der Wert ist ein weiteres JSON-Objekt mit folgenden Einträgen:
Msg
Ein nummerischer Wert, der angibt, ob der Servlet-Aufruf erfolgreich war. Mögliche Werte sind:
(OK)
(NO_REQUEST_ID_ERROR)
(NO_COUNTER_TO_UUID_ERROR)
Code
Eine englische Beschreibung des Resultats (Erfolg oder Fehler).
Counter
Informationen zum angefragten Zähler. Der Wert ist ein weiteres JSON-Objekt mit folgenden Einträgen:
Der aktuelle nummerische Wert des Zählers.
LastChange
Das Datum mit Uhrzeit, an dem der Zähler zuletzt geändert wurde. Das Datum wird mit dem Datums- und Zeitformat der aktuellen Server-Locale formattiert.
LastChangeTimestamp
Das Datum mit Uhrzeit, an dem der Zähler zuletzt geändert wurde. Der Zeitstempel ist eine ganze Zahl, welche die Anzahl an Millisekunden seit dem 1. Januar, 1970, 00:00:00 GMT angibt.
Value
Der aktuelle nummerische Wert des Zählers.
UUID
Die UUID des angefragten Zählers, dessen Wert ausgelesen wurde.
Name
Der Name des angefragten Zählers, dessen Wert ausgelesen wurde.
Tags:
Copyright 2000-2025