Kundenspezifische dynamische Felder / Ticket Template

Hilfe zu Znuny Problemen aller Art
Locked
nd0
Znuny expert
Posts: 232
Joined: 24 Mar 2015, 16:53
Znuny Version: 5.0.14
Location: Colonia

Kundenspezifische dynamische Felder / Ticket Template

Post by nd0 »

Hallo Freunde,

ich bin mir zwar sicher, dass mir das Thema hier schon irgendwo begegnet ist - aber ich kann einfach nichts relevantes finden gerade. Hilf mir doch bitte mal jemand auf die Sprünge:

Bei uns beinhaltet ein Ticket diverse dynamische Felder wie z.B. "Rechnernummer", "Benutzername" und "Rückrufnummer/Durchwahl" ... jetzt möchte ich ein weiteres dynamisches Feld - nämlich "Standort" - einführen. Zur Zeit gibt es allerdings nur einen Kunden welcher über mehrere Standorte verfügt. Angenehm wäre es, wenn auch nur bei diesem Kunden das dynamische Feld "Standort" bei der Erstellung eines Tickets angezeigt wird.

Die Frage ist jetzt - wie setzt man das Ganze am geschicktesten um?

Vielen Dank schonmal vorab, nd0
Last edited by nd0 on 28 Apr 2015, 09:10, edited 2 times in total.
LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: Kundenspezifische dynamische Felder / Ticket Template

Post by RStraub »

Hm... ich würde spontan sagen, du brauchst JavaScript in dem entsprechenden .tt File um auszulesen welcher Kunde gerade "aktiv" ist und entsprechend das Feld + Label auf hidden (bzw. visible) setzen.
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
nd0
Znuny expert
Posts: 232
Joined: 24 Mar 2015, 16:53
Znuny Version: 5.0.14
Location: Colonia

Re: Kundenspezifische dynamische Felder / Ticket Template

Post by nd0 »

Mhh.. was derartiges hatte ich auch in Erinnerung.
RStraub wrote:(...) in dem entsprechenden .tt File (...)
Könntest du das ein klein wenig weiter ausführen bzw. mir ggf. einen Link posten? Die SuFu ist heute nicht mein Freund :?

Die Umsetzung mit JavaScript ist nicht das Problem, es geht um das OTRS-spezifische Handling meines Problems.

Danke, nd0
LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: Kundenspezifische dynamische Felder / Ticket Template

Post by RStraub »

Tja wenn du nun von Tickets schreibst die Kunden betreffen, meinst du:

1) Tickets die der Kunde selbst erstellt? Das wäre "~otrs/Kernel/Output/HTML/Standard/CustomerTicketMessage.tt"
2) Tickets die ihr intern erstellt? Eingehend / Ausgehend? Das wäre: "~otrs/Kernel/Output/HTML/Standard/AgentTicketPhone.tt" (bzw. Mail)

Dann müsstest du in einem beliebigen "JSOnDocumentComplete" Block die Felder grundsätzlich verstecken, z.B.:

Code: Select all

[% WRAPPER JSOnDocumentComplete %]
<script type="text/javascript">//<![CDATA[

        $('#DynamicField_NameDesFeldes').parent().addClass( 'Hidden' );
        $('#LabelDynamicField_NameDesFeldes').parent().addClass( 'Hidden' );

//]]></script>
[% END %]
Dieses Hide dann auf den entsprechenden Kunden einschränken.
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
nd0
Znuny expert
Posts: 232
Joined: 24 Mar 2015, 16:53
Znuny Version: 5.0.14
Location: Colonia

Re: Kundenspezifische dynamische Felder / Ticket Template

Post by nd0 »

Okay vielen Dank schonmal für 1) und 2) deines Beitrags!!

Zum Testen habe ich jetzt versucht die CustomerTicketMessage.tt dahingehend zu bearbeiten, dass das dynamische Feld mit dem Namen "DynFeldBenutzername" für Benutzer mit der Kundennummer "TEST" nichtmehr sichtbar ist:

Code: Select all

[% WRAPPER JSOnDocumentComplete %]
<script type="text/javascript">//<![CDATA[
  if (CustomerID == "TEST"){
        $('#DynamicField_DynFeldBenutzername').parent().addClass( 'Hidden' );
        $('#LabelDynamicField_DynFeldBenutzername').parent().addClass( 'Hidden' );
  }        
//]]></script>
[% END %]
Diesen JSOnDocumentComplete Block habe ich (vorerst?) ganz ans Ende von CustomerTicketMessage.tt gepackt...

Wenn ich mich dann als Benutzer mit der Kundennummer "TEST" einlogge und ein Ticket erstellen will erhalte ich folgende Fehlermeldung:

Code: Select all

CustomerID is not defined

(?)()@https://MEINEDOMAIN/customer.pl?Action=CustomerTicketMessage;OTRSCustomerInterface=Cw0mh90UgAgoKyyAFvJlBCWWCAYAk0jq:373:12
Core.App</TargetNS.Ready/<@https://MEINEDOMAIN/otrs-web/js/js-cache/CommonJS_9027e5d28ba974dd7135d3f819057ae0.js:1268:120
m.Callbacks/j@https://MEINEDOMAIN/otrs-web/js/js-cache/CommonJS_9027e5d28ba974dd7135d3f819057ae0.js:1:27239
m.Callbacks/k.fireWith@https://MEINEDOMAIN/otrs-web/js/js-cache/CommonJS_9027e5d28ba974dd7135d3f819057ae0.js:1:28057
.ready@https://MEINEDOMAIN/otrs-web/js/js-cache/CommonJS_9027e5d28ba974dd7135d3f819057ae0.js:1:29889
J@https://MEINEDOMAIN/otrs-web/js/js-cache/CommonJS_9027e5d28ba974dd7135d3f819057ae0.js:1:30255
... und das dynamische Feld "DynFeldBenutzername" wird nach wie vor angezeigt.

Steh ich wieder auf'm Schlauch? :lol:

/e: Als kleine Zusatzinfo. Im Original nutze ich natürlich nicht die Kundennummer "TEST" ... stattdessen nutze ich den Namen der Firma welcher leider eine Leertaste beinhaltet ... könnte es das sein? Muss ich die Leertaste als Sonderzeichen abfangen vielleicht? :?

/e2: Um auf Nummer sicher zu gehen habe ich jetzt einen Benutzer "Tim Tester" mit der Kundennummer "TEST" angelegt und das Ganze in AgentTicketPhone.tt implementiert und dann mal das Erstellen eines Telefontickets durchgespielt... funktioniert leider auch nicht :-( Latein am Ende - jetzt wart ich erstmal ab
LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: Kundenspezifische dynamische Felder / Ticket Template

Post by RStraub »

Also doch funktionierenden Code posten, dabei wollte ich dich hinführen ;)
CustomerID ist schlicht und einfach nicht belegt, du benötigst die Template-Toolkit Syntax und die entsprechende Umgebungsvariable:

Code: Select all

    if ('[% Env("UserID") %]' == "ID_Deines_Kunden"){
        $('#DynamicField_DynFeldBenutzername').parent().addClass( 'Hidden' );
        $('#LabelDynamicField_DynFeldBenutzername').parent().addClass( 'Hidden' );
    }
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
nd0
Znuny expert
Posts: 232
Joined: 24 Mar 2015, 16:53
Znuny Version: 5.0.14
Location: Colonia

Re: Kundenspezifische dynamische Felder / Ticket Template

Post by nd0 »

*BRETT VOR KOPF*

... es ist Montag :-D Logisch! Sorry!

Code: Select all

  if ('[% Env("UserID") %]' == "TESTUSER"){
        $('#DynamicField_DynFeldBenutzername').parent().addClass( 'Hidden' );
        $('#LabelDynamicField_DynFeldBenutzername').parent().addClass( 'Hidden' );
  }     
Getestet in CustomerTicketMessage.tt mit dem Benutzer "TESTUSER" - klappt auch wunderbar!

... kurz ein bisschen Hirnschmalz eingeschaltet und zwischen "User" und "ID" nocht das Wort "Customer" gesetzt und schon blendet er bei ALLEN Benutzern mit der jeweiligen Kundennummer das dynamische Feld "DynFeldBenutzername" aus.

Also für das [SOLVED] hier noch der korrekte Lösungsansatz für EXAKT mein Problem mit der Kundennummer:

Code: Select all

[% WRAPPER JSOnDocumentComplete %]
<script type="text/javascript">//<![CDATA[
  if ('[% Env("UserCustomerID") %]' == "K U N D E N N U M M E R"){
        $('#DynamicField_F E L D N A M E').parent().addClass( 'Hidden' );
        $('#LabelDynamicField_F E L D N A M E').parent().addClass( 'Hidden' );
  }        
//]]></script>
[% END %]
Vielen vielen Dank! Auf den Schritt zur Vervollständigung des Codes hätt' ich durchaus selber kommen können :lol:
LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: [SOLVED] Kundenspezifische dynamische Felder / Ticket Template

Post by RStraub »

Gerne :D
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
nd0
Znuny expert
Posts: 232
Joined: 24 Mar 2015, 16:53
Znuny Version: 5.0.14
Location: Colonia

Re: Kundenspezifische dynamische Felder / Ticket Template

Post by nd0 »

Musste das [SOLVED] leider nochmal entfernen...

Habe das gestern nur für vom Customer selbst-erstellte Tickets (CustomerTicketMessage.tt) ausprobiert.

Gerade wollte ich das Ganze dann auch auf AgentTicketEmail.tt und AgentTicketPhone.tt anwenden - musste aber leider feststellen, dass die obige Lösung hier nicht greift :-(

Beim Erstellen des Tickets über das Agenten Backend wähle ich erst eine Queue, dann suche ich bei "An Kundenbenutzer" nach den ersten drei Buchstaben des Kunden und wähle diesen aus der Liste per Linksklick aus. Der Kunde erscheint in der "An"-Liste und das Feld "Kundennummer" nimmt den korrekten Wert an - das dynamische Feld wird allerdings nicht auf 'hidden' gesetzt.

Irgendwie eine Idee?
LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: Kundenspezifische dynamische Felder / Ticket Template

Post by RStraub »

Das wird etwas komplizierter.

In dem Fall kannst du nicht die Umgebungsvariable auslesen, da der ausführende Agent eben nicht der Kunde ist.
Desweiteren ist das Kunden-Feld mit einer JavaScript Autocomplete Funktion versehen. Sobald ein Kunde per autocomplete befüllt wird, schreibt diese Funktion in das versteckte Feld "SelectedCustomerUser".

Da dieses Feld automatisch befüllt wird, kannst du auch kein "onChange" Event abfangen...
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
nd0
Znuny expert
Posts: 232
Joined: 24 Mar 2015, 16:53
Znuny Version: 5.0.14
Location: Colonia

Re: Kundenspezifische dynamische Felder / Ticket Template

Post by nd0 »

Jau ich verstehe...

Mein erster Gedanke ist jetzt in Zukunft bei einem Klick auf "Neues Telefonticket anlegen" als erstes den Kundenbenutzer über ein "PopUp" abzufragen, damit dieser schon bekannt/eingetragen ist, wenn man dann anschließend auf die "normale" Oberfläche für Erstellung eines Telefon-Tickets weitergeleitet wird...

Dann wiederum müsste JS die (voreingetragene) Kundennummer ja finden, und anhand dessen kann ich das dynamische Feld "Standort" anzeigen lassen oder eben nicht - Grundgedanke richtig? :-D
LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: Kundenspezifische dynamische Felder / Ticket Template

Post by RStraub »

Na wenn dir das die Mühe wert ist. Ich habe mal die Kunden Suche von OTRS verbogen um ein eigenes Modul einzubinden. Evtl. wäre dass dann auch was:

1) In die Link-Option der ModulRegistration eintragen:

Code: Select all

onclick="window.IsCustomRedirect = 'yes';window.setTimeout(function(){Core.Agent.CustomerInformationCenterSearch.OpenSearchDialog();}, 0); return false;"
Das macht zwei Dinge: Ein Redirect zu dem Suchfenster-PopUp und ein Attribut an "window" hängen. Mit diesem kannst du später unterscheiden ob du über den OTRS-nativen Link zur Suche gekommen bist oder nicht.

2) Kleine Anpassung in der "~otrs/var/httpd/htdocs/js/Core.Agent.CustomerInformationCenterSearch.js":
Such dir die function "Redirect", darin den redirect:

Code: Select all

window.location.href = Core.Config.Get('Baselink') + 'Action=AgentCustomerInformationCenter;CustomerID=' + encodeURIComponent(CustomerID) + Session;
Und bau einen Switch ein:

Code: Select all

        if (window.IsCustomRedirect && window.IsCustomRedirect.match(/yes/g)) {
            window.location.href = Core.Config.Get('Baselink') + 'Action=AgentTicketPhone; URL Parameter; + Session;
        } else {
            window.location.href = Core.Config.Get('Baselink') + 'Action=AgentCustomerInformationCenter;CustomerID=' + encodeURIComponent(CustomerID) + Session;
        }
Die URL Parameter wären dabei die üblichen Verdächtigen:
ExpandNew, PreSelectedCustomer etc..
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
nd0
Znuny expert
Posts: 232
Joined: 24 Mar 2015, 16:53
Znuny Version: 5.0.14
Location: Colonia

Re: Kundenspezifische dynamische Felder / Ticket Template

Post by nd0 »

Sorry, dass so lange nichts von mir zu hören war und danke mal wieder für deine Mühe!

Ich hab vor meiner Erkrankung mal versucht das Ganze mit deiner Hilfestellung umzusetzen, bin aber so kläglich gescheitert, dass ich vor Feierabend erstmal den Snapshot meiner VM zurückspielen musste, weil ich es aufs verrecken nicht mehr gefixt bekommen hab und OTRS seinen Dienst verweigert hat.

Hatte auch mal meinen direkten Vorgesetzten über die Komplexität der Umsetzung der Anforderung informiert und jetzt nach meiner Krankheit heißt es, dass wir uns das Ganze sparen können, da zu kompliziert ... :? Werde mir das Zuhause mal am privaten OTRS anschauen ob das nicht doch irgendwie machbar ist :-) In Ruhe!

Danke nochmals...
LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
Locked