Activity-Dialog im Prozess automatisch aufrufen?

Hilfe zu Znuny Problemen aller Art
Post Reply
danielwe
Znuny newbie
Posts: 19
Joined: 02 Apr 2024, 08:51
Znuny Version: 7.0
Real Name: Daniel

Activity-Dialog im Prozess automatisch aufrufen?

Post by danielwe »

Hallo zusammen,

kann es sein, dass ich hier was übersehe? Situation ist die folgende:

Ich habe einen Prozess zum Erstellen eines Requests aus dem Customer Portal. Abhängig von den Eingaben im ersten Dialog sollen im weiteren Prozess noch weiteren Felder in einem weiteren Dialog abgefragt werden.

Beispiel:
Ist ein externer Kunde betroffen > Ja > Denn bitte Kundendaten eingeben. > Request erstellt
Ist ein externer Kunde betroffen > Nein > Request erstellt

Nun klappt das zwar soweit, der User muss aber nach dem ersten Dialog den nächsten Schritt noch aktiv anklicken damit ihm der entsprechende Dialog angezeigt wird. Unnötig zu erwähnen, dass die meisten Kollegen das nicht verstehen und der Prozess dann ewig offen vor sich hingammelt.

Ich habe bisher keine Möglichkeit gefunden, den zweiten Dialog sofort zu starten, wenn der erste ausgefüllt ist. Geht das überhaupt?

VG
Daniel
hkais
Znuny wizard
Posts: 365
Joined: 16 Apr 2016, 08:55
Znuny Version: see in post
Real Name: Hans
Contact:

Re: Activity-Dialog im Prozess automatisch aufrufen?

Post by hkais »

Hi danielwe,

ich habe das Thema bereits schon mal eingekippt, dass der Prozessflow in Znuny zu sehr 2000er-Style ist.
Du kannst das aber umgehen:
- lege ein dynamic field an, SkipTransition die yes/no zulässt
- lege eine TransitionAction an, die nun SkipTransition==no setzt
- lege eine Transition an, welche als Vorbedingung SkipTransition==yes prüft
- wenn du nun einen Dialog anlegst, der einen hidden-Field hat "SkipTransition" mit default yes

dann passiert folgendes:
1. dein Dialog sagt "skipTransition==yes" (hidden)
2. deine Transistion sagt, ahh meine Vorbedingung yes ist erfüllt => ich feuer die Transition und führe sie aus
3. in der TransitionAction sagst du beim ausführen, dass das Feld wieder auf no zurückgesetzt wird, damit weitere Transitionen nicht automatisch feuern

Das wäre alles nicht nötig, wenn für das Prozessmodell in Znuny ein Standard genommen werden würde, statt einer Eigenentwicklung.
Bei Standards kann man meistens sogar auf Standardbiblotheken zurückgreifen, die die Probleme lösen.

Gerne nochmals melden, wenn es nicht klappt.
Elected 2022-06 as an IT Governance Portal Expert. The portal for Znuny, OTRS and OTOBO power users and admins
Specialized for AI-based Solutions with Znuny

IT Governance Portal
danielwe
Znuny newbie
Posts: 19
Joined: 02 Apr 2024, 08:51
Znuny Version: 7.0
Real Name: Daniel

Re: Activity-Dialog im Prozess automatisch aufrufen?

Post by danielwe »

Hi Hans,

danke erstmal für die schnelle Rückmeldung. Ich habe mir das ganze jetzt ein paarmal durchgelesen und auch mit einem Prozess herumgespielt, aber das Konzept ist mir nicht so ganz klar. Vielleicht reden wir auch aneinander vorbei, deswegen gehe ich nochmal mehr ins Detail.

So sieht mein Workflow aus:
Workflow.png
Aktivität "Daten erfassen" hat ein DynamicField (zInternExtern = intern/extern)
Aktivität "Kundenzusatzdaten erfassen" hat ein Pflichtfeld (zKundendaten = Freitext)
Aktivität "Request erfolgreich erstellt" ist leer und stellt das Ende des Prozesses dar.

Transition "Externer Request" feuert nur, wenn zInternExtern = extern.
Transition "Interner Request" feuert nur, wenn zInternExtern = intern.
Transition "TransitionAlwaysFire" feuert immer.

Das Ganze funktioniert problemlos. Je nach Auswahl meines Feldes zInternExtern lande ich in der gewünschten Aktivität. Wenn ich dann den nächsten Prozessschritt ausführe, komme ich ans Ende. Das ist nicht das Problem.

Mein Problem ist, dass meine Aktivität "Daten erfassen" immer einen neunen Request erstellt und der Kunde anschließend direkt in der CustomerTicketZoom-Ansicht landet. Dort sieht er dann in den Prozessdaten einen Link zum nächsten Step. Diesen muss er erst anklicken damit sich der nächste Dialog öffnet:
ticketZoom.png
So wie ich das verstehe, lässt sich dieses Verhalten auch nicht über die Bedingungen der Transition beeinflussen.

Beispiel:
Ich habe eine Aktivität mit dem Namen "Start".
Ich habe eine Aktivität mit dem Namen "Ende".
Dazwischen habe ich eine Transition mit einer Bedingung, welche nie zutrifft. Z.B. Queue = gibtesnicht.

Mein Flussdiagramm sieht also so aus: O --> Start --> Transaktion: BedingungNieErfüllt --> Ende

Wenn ich den Prozess nun aufrufe, erscheint mein Start-Dialog. Dort klicke ich einfach nur auf "Übermitteln". Anschließend lande ich direkt in der Ansicht CustomerTicketZoom. Dort wird mir als nächster Schritt "Start" angezeigt. Ist ja logisch, denn da keine Transition gefeuert wird, hänge ich auf der aktuellen Aktivität fest.

D.h. unabhängig von einer Transition lande ich immer in der Ansicht CustomerTicketZoom. Das ist aber genau das, was ich nicht will. Ich möchte, dass direkt im Anschluss erstmal die nächste Aktivität und der nächste Dialog aufpoppt wird.

Wenn ich das jetzt auf deinen Vorschlag übertrage, würde dieser doch nichts ändern. Ich greife ja mit meiner Prüfung lediglich so ein, dass meine Transition entweder ausgeführt wird, oder eben nicht. In dem Moment, in dem ich in meinem ersten Dialog auf "Übermitteln" klicke, lande ich ja wieder in CustomerTicketZoom. Oder habe ich da einen Denkfehler drin?

VG
Daniel
You do not have the required permissions to view the files attached to this post.
hkais
Znuny wizard
Posts: 365
Joined: 16 Apr 2016, 08:55
Znuny Version: see in post
Real Name: Hans
Contact:

Re: Activity-Dialog im Prozess automatisch aufrufen?

Post by hkais »

deine Beschreibung ist lang, aber es ist mir nicht ganz klar was zu erreichen möchtest. ;-)

Kannst Du mir für den Fall extern und für den fall Intern, jeweils die Schritte nennen die du ausführen möchtest?
Wer sind deine Prozess User?

Z.B.:
1. Start
2. Eingabe in Daten Erfassen Dialog von
- a
- b
3. Transition Externer Request hat Bedingung xy macht via transition action
- x
- y
4. der neue Dialog "Kundendatensatz erfassen" erfordert die Eingaben
- c
- d
5. hier soll ...

dann ggf. auch den internen Pfad.
Elected 2022-06 as an IT Governance Portal Expert. The portal for Znuny, OTRS and OTOBO power users and admins
Specialized for AI-based Solutions with Znuny

IT Governance Portal
danielwe
Znuny newbie
Posts: 19
Joined: 02 Apr 2024, 08:51
Znuny Version: 7.0
Real Name: Daniel

Re: Activity-Dialog im Prozess automatisch aufrufen?

Post by danielwe »

Hi,

sorry, wenn es nicht eindeutig war. Ich versuche es nochmal.

Znuny wird bei uns intern in der IT eingesetzt. D.h. wir nutzen das Customer-Portal, damit unsere internen Kunden (die anderen Abteilungen) Tickets eröffnen können. Der genannte Prozess ist ausschließlich für das Customer-Portal und unsere internen Kunden bestimmt.

Nun haben wir auch Abteilungen mit externem Kundenkontakt. Dies ist zum Beispiel unser Customer-Service. Wenn diese selbst bei einem externen Kunden nicht weiterkommen, legen Sie ein Ticket in der IT an mit der Bitte, diesen externen Kunden zu unterstützen. Dafür benötigt die IT jedoch weitere Informationen bezüglich des externen Kunden, die über das reguläre Ticket hinaus gehen. Diese Informationen sollen verpflichtend beim Erstellen des Tickets abgefragt werden. Allerdings natürlich nur, wenn auch definitiv ein externer Kunde betroffen ist.

Nun sind die Möglichkeiten des regulären Formulars zur Ticket-Erstellung (CustomerTicketMessage) sehr eingeschränkt. Man kann keine Abhängigkeiten der Felder definieren und keine Felder dynamisch ein- und ausblenden. Um diese Einschränkungen zu umgehen, nutzen wir einen einfachen Prozess. Der einzige Zweck ist es, die richtigen Felder anzuzeigen und sicherzustellen, dass sie korrekt gefüllt sind. Danach ist das Ticket erstellt und der Prozess beendet. Das Ticket selbst wird dann ganz regulär von den Agenten bearbeitet.

Was passiert nun, wenn ich den ersten Dialog abgefeuert habe? Die Erwartungshaltung wäre, dass je nach Auswahl ein zweiter Dialog sofort aufpoppt und den internen Kunden auffordert, die weitern Daten einzugeben (CustomerTicketProcess). Das ist nicht der Fall. Statt dessen landet der interne Kunden in der Ticketansicht (CustomerTicketZoom) eines halbfertigen Tickets. Denn es fehlen ja noch die notwenigen Daten zum externen Kunden. Dort muss er dann noch einmal unter "Nächste Schritte" auf den Link zum nächsten Dialog klicken. Dieser Klick soll entfallen. Der interne Kunde soll sofort im Dialog für den nächsten Prozess-Schritt landen.

Hier mal als Flussdiagramm visualisiert:
Beispiel Prozess.png
Wenn er den Dialog "Start" abgeschlossen hat, landet der interne Kunde hier. Erst nach einem weitern Klick kommt er zum nächsten Dialog:
dawillichnichthin.png
Ich will aber, dass er direkt im nächsten Dialog landet:
sosolldas.png
Ich hoffe, ich habe es diesmal mit der Verständlichkeit besser getroffen. :)
VG
Daniel
You do not have the required permissions to view the files attached to this post.
danielwe
Znuny newbie
Posts: 19
Joined: 02 Apr 2024, 08:51
Znuny Version: 7.0
Real Name: Daniel

Re: Activity-Dialog im Prozess automatisch aufrufen?

Post by danielwe »

Zwischenzeitlich habe ich mir selbst eine Lösung gesucht. Sie funktioniert zwar, ist allerdings etwas hakelig.
Immer wenn ich meinem Aktivitäts-Dialog den Präfix "Popup_" verpasse, wird der Dialog automatisch geöffnet, wenn der Kunde sein Ticket aufruft.

So habe ich es umgesetzt:

Ich habe ein Customer-Template erstellt, dieses in der Sysconfig als Standard für das Kundenportal definiert und die folgenden Dateien dort hinein kopiert:

- CustomerTicketMessage.tt
- CustomerTicketZoom.tt

In diesen beiden Dateien verweise ich dann auf eine von mit erstelle Java-Script-Datei:

Code: Select all

# --
# Copyright (C) 2001-2021 xxx, https://otrs.com/
# Copyright (C) 2021 Znuny GmbH, https://znuny.org/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.
# --

<!-- Hier beginnen die Änderungen zum Original-Template -->
    <! Verweis auf die Skript-Datei -->
    <script language="javascript" type="text/javascript" src="/znuny-web/js/custom/popupNextProcessActivity.js" defer></script>
    </script>
<!-- hier beginnt wieder der ursprüngliche Code --> 
<div id="MainBox" class="TicketZoom ARIARoleMain">
    <div class="ContentWrapper flex-column">
[% RenderBlockStart("Back") %]
        <div class="outer-BreadCrumb">
            <ul class="BreadCrumb">
                <li class="btn-back">

[...]
Die Logik in der JS-Datei durchsucht das Dokument nach einem Link mit dem Titel "Popup_" und simuliert einen automatischen Klick:

Code: Select all

window.onload = function () {
    setTimeout(() => {
        console.log(`Starte Custom JS nach Timeout!`);

        // Alle Links auf der Seite auswählen
        const links = document.querySelectorAll('a');

        const popupLinks = Array.from(links).filter(link => {
            return link.title && link.title.startsWith('Popup_');
        });

        popupLinks.forEach(link => {
            console.log(`Simuliere Klick auf Link: ${link.href}`);
            link.click();
        });

    }, 100); // 100ms warten. Sicher ist sicher...
};
Damit das ganze funktioniert musste ich das halbfertige Ticket zunächst mit einem gesonderten Status versehen und in eine versteckte Queue verschieben, damit meine Agenten nicht mit der Arbeit beginnen, bevor der Kunde alle Daten eingegeben hat. Erst, wenn die nötigen Felder gefüllt sind, wird das Ticket mit dem Status "neu" in die Inbox verschoben und so für die Agenten sichtbar.

Ich wollte es hier gern mit euch teilen, weil ich dabei viel über Anpassungen um Quellcode von Znuny gelernt habe und es ggfls. dem ein oder anderen einen kleinen Denkanstoß geben kann. Ich habe mich allerdings jetzt dazu entschlossen, einfach zwei Prozesse zu definieren: Einen für intern und einen für extern. Die nötigen Felder werden dann eben direkt in der ersten Maske angezeigt oder nicht. Etwas nervig ist es ja schon, zwei Prozesse zu pflegen. Aber am Ende leider doch die sauberere Lösung.

Damit kann das Topic dann auch geschlossen werden. Eventuell ist es ja was für die Howtos.

VG
Daniel
Post Reply