⦁ Solution Engineer / Workflow Designer ⦁ JobRouter Entwickler seit 2018 ⦁ Seit 2019 bei DemandFlow
Ansehen
Abzeichen 4
Editor Enthusiast 8 × Eureka! AnfängerHallo,
man kann sehr gut den tinyMCE Editor einbinden.
Gehen Sie dazu bitte wie folgt vor:
- laden Sie die aktuelle Version von tinymce.min.js von der Projekt-Site herunter (https://www.tiny.cloud/) und binden Sie das Skript als globales JS oder externes JS im JobRouter ein
- Rufen Sie im onLoad Eventhandler des Dialogs die init-Funktion des tinyMCE auf und geben Sie eine Whitelist der Textareas in Form eines Arrays mit. Diese Textfields erhalten dann die entsprechende Funktionalität.
*...
Im Support-Portal unter Online-Dokumentation->Module->Office findet man 2 Möglichkeiten, das Add-On zu installieren.
Da ist zum einen der manuelle Weg, bei dem man eine manifest.xml Datei erstellen muss. Dies ist detailliert beschrieben.
Der 2. Weg ist der komfortablere. Man kann direkt aus Office heraus unter Add-Ons hinzufügen das JobRouter Plugin installieren.
Leider funktioniert das nicht, da man keine Einträge bei der Suche nach "JobRouter" findet.
Ich habe hierzu ein Ticket beim...
Ja, hier ein Beispiel:
//In STV im Datei-Upload-Feld bei onChange:
sutableSetFieldnameToFieldOnRowAdd(this.id );
//Code:
function sutableSetFieldnameToFieldOnRowAdd(id) {
var st = 'UTA_DOKUMENTE';
var rid1 = id.charAt(id.length - 10);
var rid2 = id.charAt(id.length - 11);
var ridConcat = rid1 + rid2;
var rid = isNaN(ridConcat) ? parseInt(rid1) : parseInt(ridConcat);
var field = 'doc_title';
var n = '#' + id.substr(0, id.length - 9) + '_showUploade...
Hallo Chris,
wie Timo schon schrieb, stehen auch die im Prozess angelegten Listen in der DB (wo genau, siehe Timos Eintrag und das Handbuch). Es ist möglich, über JobRouter Dialogfunktionen, die per Event Listener gecallt werden, solche dynamischen Anpassungen (notfalls per DOM-Manipulation über JavaScript) vorzunehmen.
Vorgehen:
- Event Listener OnChange auf Spalte 1
- der callt eine Dialogfunktion, die die Daten aus der DB abfragt und zurück gibt
- diese baust du dann per JS in als <...
Hi Karim,
ich hatte das Problem auch schon, bei mir hat 

funktioniert (ASCII Codes für Zeilenumbrüche).
Hoffe ich konnte dir helfen,
Gruß
Jan
Hi Gabriel,
entweder du mapst das PT Feld auf ein verstecktes Dialog-Element (eine ausgeblendete Textbox oder ein "Hidden"-Element) und liest es mit jr_get_value('name') aus.
Die kompliziertere Variante geht über eine Dialogfunktion, siehe hierzu:
https://docs.jobrouter.com/2022.2/de/designer/jsapi_jr_execute_dialog_function.html?q=jr_execute
und
https://docs.jobrouter.com/2022.2/de/designer/php_jr_execute_dialog_function.html?q=jr_execute
Vor allem das Beispiel im PHP-Handbuch ist br...
Hallo,
dabei ist der Trick, das in den Dialogelement-Einstellungen die Checkbox "Gültige Eingabe erforderlich" gesetzt ist:
Nur dann wird die zweite Spalte der SQL Query als Wert behandelt und die erste als Display-Value.
Ist die Checkbox gesetzt, können Sie mit
jr_get_value('dialogElementName');
jr_get_display_value('dialogElementName');
jr_set_value('dialogElementName', 'value');
jr_set_display_value('...
Hallo Josef,
dies ist problemlos möglich und wir benutzen dies häufig.
Rufen Sie im onLoad des Dialogs oder beim onclick auf den Button eine Dialogfunktion auf (jr_execute_dialog_function). Dies ist ein AJAX Call auf ein PHP Skript, das eine DB Abfrage machen kann und das Ergebnis ins Frontend zurückliefert.
Wenn die zurückgelieferten Daten im korrekten Format sind, kann man sie direkt per jr_subtable_init in die STV werfen.
Es gibt sowohl im JavaScript Handbuch als auch im PHP Handbuch...
Hi Gabriel,
das ist natürlich eine sehr allgemeine Frage, daher gibt es auch nur allgemeine Antworten.
Ich bin gelernter Mediengestalter und was du wissen möchtest, sind die Grundlagen des UI-Designs und der Wahrnehmungspsychologie.
Das kann man googeln, es ist jedoch kein unterkomplexes Thema und du musst da Zeit reininvestieren.
Was den JR angeht, ist der Dialog-Designer etwas in die Jahre gekommen. Elemente sind nicht immer bündig, haben keine einheitliche Breite etc.
Du solltest d...
Hallo Herr Ehrstein,
um es etwas zu präzisieren, das Ganze müsste so aussehen:
<?php
class className extends JobRouter\Engine\Runtime\PhpFunction\RuleExecutionFunction
{
public function execute($rowId = null)
{
$this->toDo();
}
private function toDo()
{
// do Stuff
// hier könnte man auch etwas returnen
}
}
?>
Damit ist zum Einen toDo als Klassenmethode definiert und wird zum Anderen mit $this-> korrekt gecallt (weil $this impliziert, dass eine Met...
Hier ein Skript dazu:
//Listener
function addPopupListener() {
jQuery('html').on('DOMNodeInserted', function(e) {
if (jQuery(e.target).hasClass('jr-step-action-layer')) {
reshapeControlsForStepActions();
}
});
}
//Reshaper
function reshapeControlsForStepActions() {
jQuery("[for='id_popup_request_jobfunction']").css("display", "none");
jQuery("[for='id_popup_assign_job']").css("display", "none");
}
Die Funktion addPopupLi...
Hier ein kleines Skript dazu.
Das Skript muss nach Klick auf das Stift-Symbol der File-Spalte in der Untertabellenansicht im Abschnitt "Scripting" beim OnChange Handler eingebunden werden und die ID des Elements als Parameter übergeben:
subtableSetFieldnameToFieldOnRowAdd(this.id);
Und hier das Skript, das aufgerufen wird:
function subtableSetFieldnameToFieldOnRowAdd(id) {
var st = 'UTA_DOKUMENTE';
var rid1 = id.charAt(id.length - 10);
var rid2 = id.charA...
Hallo,
dies ist meines Wissens nur DB-seitig möglich.
In der Tabelle JRPROCESSES gibt es das Feld maintenance_mode, hat dieses den Wert 1, ist der Prozess im Wartungsmodus. Sie können das Flag durch ein einfaches SQL Statement aus einem anderen Prozess heraus setzen.
Das gleiche gilt für das Feld status in derselben Tabelle. Ist dieses Flag auf 1 gesetzt, ist der Prozess aktiv, auf 0 ist er inaktiv.
Ich hoffe das hilft, viele Grüße.
P.S. Bitte bestätigen Sie noch diese Antwort al...
Hallo Herr Ehrstein,
wenn Sie im Browser<ihre-jobrouter-url>/api/rest/v2 eingeben, erhalten Sie eine Übersichtsseite, auf der Sie die Optionen der verschiedenen REST Pfade finden (GET, PUT, ...).
Sie müssen zuerst unter Angabe eines Users und Passworts eine Session starten oder einen Token anfordern.
Schauen Sie sich hierzu bitte die Beispiele in der Doku an, wie z.B. über Guzzle oder CURL die Authentifizierung und der Start der Session erfolgt.
Mit dem Tool POSTMAN kann man dies sehr g...
Hier eine Funktion, die genau dies erledigt:
private function fetchUsersFromJobfunction($jobfunction) {
$sql = 'SELECT DISTINCT username FROM JRUSERJOB where jobfunction=?';
$parameterValues = [$jobfunction];
$parameterTypes = [JobRouter\Common\Database\ConnectionInterface::TYPE_TEXT]
$res = $jobDB->preparedSelect($sql, $parameterValues, $parameterTypes);
return $res;
}
Danach dann das result processing, z.B. mit einer while-Schleife:
$usersInFuncti...
Hi Gabriel,
als Nachtrag: das Mappen auf Dialogelemente scheint etwas kompliziert, ist aber tatsächlich im JR die einfachste Lösung.
Ich habe immer eine eigene Page "Hidden" in den Dialogen, in der ausschließlich die für die JS-Skripte wichtigen PT-Felder gemappt sind.
Ich nennen die Dialogfelder dann auch immer genauso, wie die PT-Felder heißen, so wird das ganze einigermaßen einfach zu handeln.
VG
Jan
Diese Info steht in der JRICIDENTS Tabelle im Feld step_type.
Dabei gibt es folgende Werte:
- 0: Benutzeraktivität
- 1: Startschritt
- 2: Systemaktivität
- 3: Entscheidungsschritt
- 4: Parallelisierung Start
- 5: Parallelisierung Ende
Wird außerdem von einer Systemaktivität der Name gebraucht, steht dieser in module_name.
Hi Marc,
Performance-Probleme können, wie du sicher weißt, alle möglichen Gründe haben. Eine Ferndiagnose ist deshalbe schwer.
Da du aber sagst, dass am Prozess selbst nichts geändert wurde, scheint das Problem an der Infrastruktur zu liegen.
Meine Vermutung wäre Webserver oder DB-Server.
- Hat sich an der Konfiguration des Webservers etwas geändert? Vergleiche die IIS Einstellungen mal mit dem JR-Installationshandbuch.
- Checke mal die Auslastung des Webservers
- Liegt auf dem DB-Ser...
Auf jeder section im Dialog liegt ein onclick
handler. Das weiterreichen dieses Events kann verhindert werden. Hier ein Beispiel mit jQuery:
Hier ein kleines JavaScript, das diese Aufgabe erledigt (unter Benutzung von jQuery).
$j('.jr-section-title.sectionName').each(function(element) {
$j(element).stopObserving('click');
});
Hi!
Hässlich aber könnte funktionieren: An der Stelle, an der du die Dialogfunktion benutzt, sende den Schritt per JS, führe die Logik als Regelausführungsfunktion aus und öffne den Schritt direkt wieder per "Folgeschritt direkt öffnen".
VG
Jan
Angenommen, die fragliche Tabelle sieht so aus:
Die Funktion OPENJSON hilft uns, die JSON-Spalte zu parsen, mit FOR XML PATH gibt man das Ergebnis als XML Struktur zurück:
SELECT name, (SELECT * FROM OPENJSON(j.hobbies) FOR XML PATH('')) FROM jsontest j;
Ergebnis:
Also eine Tabelle, mit den Spalten key, value und type, die in eine ...
Hi Timo,
ich denke Dominic ist da auf der richtigen Spur. Was passiert, wenn du nach Laden des Dialogs auf der Browserkonsole einen SQL Refresh auf das besagte Feld machst?
VG
Jan
Dies ist tatsächlich gar nicht so einfach, hier eine ausführliche Erklärung.
Eine einfache Query im Tab Datenbank des JobSelect, die alle offenen Schritte der Vorgänge eines Prozesses testProcess mit der Prozesstabelle PT_TEST anzeigt (zu i.status siehe TechDoc-Doku->Beschreibung der JobRouter Datenbank):
SELECT i.incident AS Vorgangsnummer, i.step AS Schrittnummer, pt.KUNDE AS Kunde
FROM
PT_TEST AS pt
INNER JOIN JRINCIDENTS AS i ON pt.step_id = i.process_step_id
WHERE
i.sta...
Hi Swen,
ich würde dringend davon abraten die DB Tabellen händisch zu verändern. Die Nebenwirkungen kann man einfach nicht absehen.
Ich würde empfehlen die Handarbeit zu machen und alle Tabellenfelder etc. anzulegen (das nervt, ein Glas Wein hilft aber).
VG
Jan
Hi Daniel,
diese Funktion scheint ziemlich neu zu sein, ich finde auch keine Doku.
Meine Vermutung: jr_execute('jumpTo', 20) für Schritt 20.
Über eine Rückmeldung ob es so funzt wäre ich dankbar :-)
VG
Jan