Kundenspezifische dynamische Felder / Ticket Template
Kundenspezifische dynamische Felder / Ticket Template
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
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
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
-
- 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
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
Re: Kundenspezifische dynamische Felder / Ticket Template
Mhh.. was derartiges hatte ich auch in Erinnerung.
Die Umsetzung mit JavaScript ist nicht das Problem, es geht um das OTRS-spezifische Handling meines Problems.
Danke, nd0
Könntest du das ein klein wenig weiter ausführen bzw. mir ggf. einen Link posten? Die SuFu ist heute nicht mein FreundRStraub wrote:(...) in dem entsprechenden .tt File (...)

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
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
-
- 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
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.:
Dieses Hide dann auf den entsprechenden Kunden einschränken.
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 %]
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
Re: Kundenspezifische dynamische Felder / Ticket Template
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:
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:
... und das dynamische Feld "DynFeldBenutzername" wird nach wie vor angezeigt.
Steh ich wieder auf'm Schlauch?
/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
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 %]
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
Steh ich wieder auf'm Schlauch?

/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

LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
-
- 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
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:

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
Re: Kundenspezifische dynamische Felder / Ticket Template
*BRETT VOR KOPF*
... es ist Montag
Logisch! Sorry!
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:
Vielen vielen Dank! Auf den Schritt zur Vervollständigung des Codes hätt' ich durchaus selber kommen können 
... es ist Montag

Code: Select all
if ('[% Env("UserID") %]' == "TESTUSER"){
$('#DynamicField_DynFeldBenutzername').parent().addClass( 'Hidden' );
$('#LabelDynamicField_DynFeldBenutzername').parent().addClass( 'Hidden' );
}
... 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 %]

LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
-
- 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
Gerne 

Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
Re: Kundenspezifische dynamische Felder / Ticket Template
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?
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
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
-
- 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
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...
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
Re: Kundenspezifische dynamische Felder / Ticket Template
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?
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?

LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
-
- 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
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:
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:
Und bau einen Switch ein:
Die URL Parameter wären dabei die üblichen Verdächtigen:
ExpandNew, PreSelectedCustomer etc..
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;"
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;
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;
}
ExpandNew, PreSelectedCustomer etc..
Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
Re: Kundenspezifische dynamische Felder / Ticket Template
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...
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 ...


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