Kundendaten Ausgeben

Hilfe zu Znuny Problemen aller Art
Locked
Fabotz
Znuny newbie
Posts: 21
Joined: 14 Jul 2009, 08:22
Znuny Version: 2.3.4

Kundendaten Ausgeben

Post by Fabotz »

Hallo zusammen,

ich versuche aktuell die Kundendaten in der CSV Suchausgabe des Agentenfrontend anzuzeigen. Dieses gelingt mir noch nicht komplett.

Aktuell werden folgende Werte fehlerfrei angezeigt:
  • - CustomerID
  • - CustomerUserID
  • - CustomerName
Jedoch möchte ich auch gerne das Kundenkommentar und auch das Land des Kunden ausgeben. Versuche mit UserCountry, UserComment, CustomerUserCountry, CustomerUserComment, CustomerCountry und CustomerComment waren erfolglos. Könntet ihr mir dabei helfen? Normalerweise dürfte dieses nicht so schwer fallen, aber ich habe damit nun die ganze Zeit meine Probleme.

Das gleiche gilt auch für die Anzeige in der Status-View. Dort möchte ich ebenfalls das Land und das Kommentar der Kundendaten ausgeben. Meine Versuche mit den gleichen begriffen waren ebenfalls erfolglos. Ein Beispiel wie folgt (Änderung in der Datei AgentTicketOverviewSmall.dtl):

Code: Select all

...
                        <td>
                            <div title="$QData{"CustomerID"}">$QData{"CustomerID","15"}</div>
                            <div title="$QData{"CustomerName"}">$QData{"CustomerName","30"}</div>
                            <div title="$QData{"CustomerCountry"}">$QData{"CustomerCountry","30"}</div>
                        </td>
...
Schon vorab danke für eure Hilfe. Ich melde mich auch, wenn ich es selbst lösen kann. Suche schon durch das Adminbuch und das Forum, jedoch seit einer Stunde ohne Erfolg.

Freundlicher Gruß

Fabotz
Application: OTRS: 2.4.7, OTRS::ITSM 2.1
Operating System: Red Hat Enterprise Linux 5
Application Database: Oralce 10g
Webserver: Apache 2.2.3
Johannes
Moderator
Posts: 436
Joined: 30 Jan 2008, 02:26
Znuny Version: All of them ^^
Real Name: Hannes
Company: Znuny|OTTERHUB

Re: Kundendaten Ausgeben

Post by Johannes »

Also ich glaube die Datei die Du suchst ist die AgentTicketSearch.pm in Kernel/Modules.
Hier wird mit Hilfe des CSV Modules die Datei erzeugt. Das sollte zumindest der erste Anhaltspunkt sein.
Fabotz
Znuny newbie
Posts: 21
Joined: 14 Jul 2009, 08:22
Znuny Version: 2.3.4

Re: Kundendaten Ausgeben

Post by Fabotz »

Hallo,

danke für dein Feedback.

Die CSV Ausgabe bei der Suche kann ich in der Systemkonfiguration ändern. Dies ist unter folgendem Pfad zu finden: Ticket -> AgentTicketViewSearch

Dort muss man nur die Namen aller gewünschten Felder angeben. Jedoch waren die von mir genannten Namen nicht gültig und brachten nicht das gewünschte Ergebnis.

Die Datei, die ich angegeben habe, ist für die Status-View und auch dort können Kundendaten angezeigt werden, jedoch bisher ohne Erfolg, da auch dort die Namen angegeben werden müssen.

Freundlicher Gruß

Fabotz
Application: OTRS: 2.4.7, OTRS::ITSM 2.1
Operating System: Red Hat Enterprise Linux 5
Application Database: Oralce 10g
Webserver: Apache 2.2.3
Fabotz
Znuny newbie
Posts: 21
Joined: 14 Jul 2009, 08:22
Znuny Version: 2.3.4

Re: Kundendaten Ausgeben

Post by Fabotz »

Hallo nochmals,

kann mir denn keiner richtig Helfen? Benötigt ihr noch weitere Informationen?

Lieben Gruß

Fabotz
Application: OTRS: 2.4.7, OTRS::ITSM 2.1
Operating System: Red Hat Enterprise Linux 5
Application Database: Oralce 10g
Webserver: Apache 2.2.3
Daniel Obee
Moderator
Posts: 644
Joined: 19 Jun 2007, 17:11
Znuny Version: various
Real Name: Daniel Obée
Location: Berlin

Re: Kundendaten Ausgeben

Post by Daniel Obee »

Die Variablennamen sollten sich aus dem Mapping in der config.pm ergeben. Hast Du ein externes Backend angeschlossen oder arbeitest Du mit der OTRS-internen Kundenverwaltung?

Gruß
Daniel
Fabotz
Znuny newbie
Posts: 21
Joined: 14 Jul 2009, 08:22
Znuny Version: 2.3.4

Re: Kundendaten Ausgeben

Post by Fabotz »

Hallo,

ich verwende ein extern angehängte Datenbank:

Code: Select all

        Map => [
            # note: Login, Email and CustomerID needed!
            # var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly
            [ 'UserFirstname',  'Firstname',  'givenname',       1, 1, 'var', '', 0 ],
            [ 'UserLastname',   'Lastname',   'sn',              1, 1, 'var', '', 0 ],
            [ 'UserLogin',      'Username',   'uid',             1, 1, 'var', '', 0 ],
            [ 'UserEmail',      'Email',      'mail',            0, 1, 'var', '', 0 ],
            [ 'UserCustomerID', 'CustomerID', 'cid',             0, 1, 'var', '', 0 ],
            [ 'UserPhone',      'Phone',      'telephonenumber', 1, 0, 'var', '', 0 ],
            [ 'UserAddress',    'Location',   'l',               1, 0, 'var', '', 0 ],
	    [ 'UserCountry',    'Country',    'Country',       1, 0, 'var', '', 0 ],  
            [ 'UserComment',    'Comment',    'Companyname',   1, 0, 'var', '', 0 ],  
        ],
Ich kann natürlich in der Systemkonfiguration und auch in der dtl Datei für die Statusansicht die Namen (UserCountry, UserComment) angeben, jedoch werden diese dann dort nicht angezeigt. In der Kundeninformation werden diese aber ohne Probleme angezeigt. Deshalb verstehe ich auch nicht so ganz, wo mein Fehler liegt.

Variablen in der AgentTicketOverviewSmall (wird aber nur die CustomerId und der Name angezeigt; andere Felder wie Mail und Phone funktionieren auch fehlerfrei):

Code: Select all

                        <td>
                            <div title="$QData{"CustomerID"}">$QData{"CustomerID","15"}</div>
                            <div title="$QData{"CustomerName"}">$QData{"CustomerName","30"}</div>
                            <div title="$QData{"UserCountry"}">$QData{"UserCountry","30"}</div>
                            <div title="$QData{"UserComment"}">$QData{"UserComment","30"}</div>
                        </td>
Danke weiterhin für eure Unterstützung!

Lieben Gruß

Fabotz
Application: OTRS: 2.4.7, OTRS::ITSM 2.1
Operating System: Red Hat Enterprise Linux 5
Application Database: Oralce 10g
Webserver: Apache 2.2.3
Daniel Obee
Moderator
Posts: 644
Joined: 19 Jun 2007, 17:11
Znuny Version: various
Real Name: Daniel Obée
Location: Berlin

Re: Kundendaten Ausgeben

Post by Daniel Obee »

Die Verfügbarkeit von solchen Variablen ist je nach Maske sehr unterschiedlich und hängt von den genutzten Objekten ab. In der StatusView z.B. stehen nur die Daten aus dem TicketObject zur Verfügung (System/Ticket.pm, Zeile 709 ff), das sind Customer-seitig nur CustomerID, CustomerNo und noch irgendwas. In der Kundenanzeige sieht das anders aus, da hier das CustomerObject zur Verfügung steht - das enthält alle Kundendaten.

Gruß
Daniel
Fabotz
Znuny newbie
Posts: 21
Joined: 14 Jul 2009, 08:22
Znuny Version: 2.3.4

Re: Kundendaten Ausgeben

Post by Fabotz »

Hallo und danke erstmal für deinen Tipp.

Leider habe ich für die Antwort ein wenig länge gebraucht, als ich vorher noch gedacht habe. Anscheinend muss man, um nun auch die weiteren Kundendaten einbinden zu können, nur die Funktion TicketGet() ab Zeile 784ff ändern. Liege ich dort richtig? Oder muss man weiteres ändern? In der genannten Funktion werden alle Daten ausgelesen (darunter auch die CustomerID und die CustomerUserID). Dies geschieht mit einer SQL Abfrage, welche angepasst werden muss.

Code: Select all

    # db query
    my $SQL = 'SELECT st.id, st.queue_id, sq.name, st.ticket_state_id, st.ticket_lock_id,'
        . ' sp.id, sp.name, st.create_time_unix, st.create_time, sq.group_id, st.tn,'
        . ' st.customer_id, st.customer_user_id, st.user_id, st.responsible_user_id, st.until_time,'
        . ' st.freekey1, st.freetext1, st.freekey2, st.freetext2,'
        . ' st.freekey3, st.freetext3, st.freekey4, st.freetext4,'
        . ' st.freekey5, st.freetext5, st.freekey6, st.freetext6,'
        . ' st.freekey7, st.freetext7, st.freekey8, st.freetext8,'
        . ' st.freekey9, st.freetext9, st.freekey10, st.freetext10,'
        . ' st.freekey11, st.freetext11, st.freekey12, st.freetext12,'
        . ' st.freekey13, st.freetext13, st.freekey14, st.freetext14,'
        . ' st.freekey15, st.freetext15, st.freekey16, st.freetext16,'
        . ' st.freetime1, st.freetime2, st.freetime3, st.freetime4,'
        . ' st.freetime5, st.freetime6,'
        . ' st.change_time, st.title, st.escalation_update_time, st.timeout,'
        . ' st.type_id, st.service_id, st.sla_id, st.escalation_response_time,'
        . ' st.escalation_solution_time, st.escalation_time'
        . ' FROM ticket st, ticket_priority sp, queue sq'
        . ' WHERE sp.id = st.ticket_priority_id AND sq.id = st.queue_id AND st.id = ?';
Dies habe ich auch versucht (mit guten Datenbankkenntnissen). Dazu muss ich das Comment der Kundentabelle Customer_User mit in die Abfrage einfügen. Jedoch besteht dabei das Problem, dass wir verschiedene Backends speichern (extern und intern) und laut der SQL Box im Admininterface nur die internen Daten in dieser Tabelle gespeichert werden. Jedoch können alle Daten von allen Kunden jederzeit im Ticket angezeigt werden (Kundeninformatuon). Daher habe ich micht gefragt, ob die externen Daten doch in einer anderen Tabelle (users oder sonstige) gespeichert werden. Dazu habe ich mir das ERM der Datenbank angesehen. Doch dort habe ich keine weitere Tabelle gefunden. Daraus schließe ich, dass ich auf das externe Backend direkt zugreifen muss, stimmt das? Oder werden diese Daten doch irgendwo gespeichert und greift die Kundeninformation (Ticketzoom) direkt auf externe Daten zu?

Eventuell müsste man dann auch eine weitere Tabelle bauen, die beim Erstellen automatisch alle Kundendaten nochmals in einer zusätzliche Tickettabelle schreibt, welche ich dann hier auslesen kann.

Danke weiter für eure Hilfe. Ich hoffe, ich habe mich verständlich ausgedrückt.

Lieben Gruß

Fabotz
Application: OTRS: 2.4.7, OTRS::ITSM 2.1
Operating System: Red Hat Enterprise Linux 5
Application Database: Oralce 10g
Webserver: Apache 2.2.3
Daniel Obee
Moderator
Posts: 644
Joined: 19 Jun 2007, 17:11
Znuny Version: various
Real Name: Daniel Obée
Location: Berlin

Re: Kundendaten Ausgeben

Post by Daniel Obee »

Die SQL Abfrage musst Du nicht ändern. Soweit ich mich erinnern kann, wird in der Ticket.pm ohnehin ein CustomerObject aufgemacht. Die Daten, die Du suchst, müssen nur mit ins Ticket Object aufgenommen werden. Ein paar Tipps dazu stehen hier: http://forums.otrs.org/viewtopic.php?f=17&t=5276 - allerdings nur für das UserObject. Müsste noch angepasst werden.

Gruß
Daniel
Fabotz
Znuny newbie
Posts: 21
Joined: 14 Jul 2009, 08:22
Znuny Version: 2.3.4

Re: Kundendaten Ausgeben

Post by Fabotz »

Danke nochmals für deinen Tipp und ich habe Aufmerksam das andere Thema gelesen und habe versucht etwas ähnliches vorzunehmen, jedoch bin ich mir nicht sicher, ob mein Vorgehen weiterhin richtig ist. Mit der Perl Programmierung kenne ich mich auch nicht zu 100% aus, eher dann andere Sprachen. Ich habe mal folgendes in der Funktion TicketGet() eingebunden.

..otrs/Kernel/System/Ticket.pm (direkt unter dem Tabellenaufbau)

Code: Select all

    # get customer
    $Ticket{Customer} = $Self->{CustomerUserObject}->CustomerComment(
        UserID => $Ticket{CustomerID},
    );
..otrs/Kernel/Output/HTML/Standard/AgentTicketForwardLanxess.dtl

Code: Select all

                        <td>
                            <div title="$QData{"CustomerID"}">$QData{"CustomerID","15"}</div>
                            <div title="$QData{"CustomerName"}">$QData{"CustomerName","30"}</div>
                            <div title="$QData{"UserLogin"}">$QData{"UserLogin","30"}</div>
                            <div title="$QData{"UserEmail"}">$QData{"UserEmail","30"}</div>
                            <div title="$QData{"CustomerComment"}">$QData{"CustomerComment","30"}</div>
                        </td>
Die E-Mail und der Login Name sind die vom Agenten (daher noch falsch und wird noch gelöscht). Im Anhang ist ein Bild meiner Anzeige, leider fehler das Kommentar immer noch:

Lieben Gruß

Fabotz
You do not have the required permissions to view the files attached to this post.
Application: OTRS: 2.4.7, OTRS::ITSM 2.1
Operating System: Red Hat Enterprise Linux 5
Application Database: Oralce 10g
Webserver: Apache 2.2.3
Daniel Obee
Moderator
Posts: 644
Joined: 19 Jun 2007, 17:11
Znuny Version: various
Real Name: Daniel Obée
Location: Berlin

Re: Kundendaten Ausgeben

Post by Daniel Obee »

$Ticket{Customer} ist die Variable in der Du speicherst. Die müsste $Ticket{CustomerComment} heißen, wenn Du die nachher mit $QData{"CustomerComment"} ausgeben willst ($QData enthält in diesem Falle eine modifizierte Referenz auf $Ticket). Ich würde Dir allerdings raten, eine etwas weniger offensichtliche Variable zu wählen, da immer die Gefahr besteht, dass das irgendwo noch Zweitwirkungen hat.

Gruß
Daniel
Fabotz
Znuny newbie
Posts: 21
Joined: 14 Jul 2009, 08:22
Znuny Version: 2.3.4

Re: Kundendaten Ausgeben

Post by Fabotz »

Ah ok, super. Ich versuche deinen Rat mal umzusetzen und melde mich dann nochmals hier. Danke aber für die gute Unterstützung!
Application: OTRS: 2.4.7, OTRS::ITSM 2.1
Operating System: Red Hat Enterprise Linux 5
Application Database: Oralce 10g
Webserver: Apache 2.2.3
Fabotz
Znuny newbie
Posts: 21
Joined: 14 Jul 2009, 08:22
Znuny Version: 2.3.4

Re: Kundendaten Ausgeben

Post by Fabotz »

Hallo nochmals,

danke für den Tipp. Da ich einige Probleme mit meiner Einbindung der Kundendaten habe und somit das gewünschte Ergebnis nicht ausgegeben werden konnte, habe ich das Beispiel in dem verwiesenen Thema verwendet. Dieses müsste ja, laut Feedback, funktionieren. Jedoch funktioniert auch diese bei mir leider nicht. Daher vermute ich, dass man eventuell irgendwo noch weitere Daten einbinden muss oder ich etwas komplett falsch mache (höchstwahrscheinlich eher das Zweite).

Aktuell sieht der Code folgendermasen aus (Ticket.pm):

Code: Select all

    # get username
    $Ticket{UserName} = $Self->{UserObject}->UserName(
        UserID => $Ticket{OwnerID},
    ); 
    
    # get customer
    $Ticket{CustomerCommentData} = $Self->{CustomerUserObject}->CustomerCommentData(
        UserID => $Ticket{CustomerID},
    );
Aktuell sieht der Code folgendermasen aus (AgentTicketOverviewSmall.dtl):

Code: Select all

                        <td>
                            <div title="$QData{"CustomerID"}">$QData{"CustomerID","15"}</div>
                            <div title="$QData{"CustomerName"}">$QData{"CustomerName","30"}</div>
                            <div title="$QData{"UserLogin"}">$QData{"UserLogin","30"}</div>
                            <div title="$QData{"UserName"}">$QData{"UserName","30"}</div>
                            <div title="$QData{"CustomerCommentData"}">$QData{"CustomerCommentData","30"}</div>
                        </td>
Ein wenig oberhalb der Datenbankabfrage in der Datei Ticket.pm werden alle später ausgegebenen Daten angezeigt. Mudd ich dort auch meine neuen Daten einbinden? Folgender Quellcode soll euch ein Beispiel liefern:

Code: Select all

=item TicketGet()

get ticket info

    my %Ticket = $TicketObject->TicketGet(
        TicketID => 123,
        UserID   => 123,
    );

returns

    TicketNumber
    TicketID
    State
    StateID
    StateType
    Priority
    PriorityID
    ...
Anschließend kommt dann die von mir angepasste Funktion (unterhalb der Datenbankabfrage wurde der oben gezeigten Quellcode eingefügt):

Code: Select all

sub TicketGet {
    my ( $Self, %Param ) = @_;
    ...
Application: OTRS: 2.4.7, OTRS::ITSM 2.1
Operating System: Red Hat Enterprise Linux 5
Application Database: Oralce 10g
Webserver: Apache 2.2.3
Daniel Obee
Moderator
Posts: 644
Joined: 19 Jun 2007, 17:11
Znuny Version: various
Real Name: Daniel Obée
Location: Berlin

Re: Kundendaten Ausgeben

Post by Daniel Obee »

Schau Dir mal unter dev.otrs.org die API an.

Was du brauchst sind Daten aus dem CustomerUserObject. Je nach dem, welche Methode Du benutzt, werden unterschiedliche (und unterschiedlich viele) Daten zurückgeliefert. Das maximale Ergebnis bekommst Du mit:

Code: Select all

    # get CustomerUserData
    my %customeruserdata = $Self->{CustomerUserObject}->CustomerUserDataGet(
        UserID => $Ticket{CustomerID},
    );
    $Ticket{UserComment} = $customeruserdata{UserComment};
(Einbauen in die Ticket.pm)

Allerdings ist das ein echter Performancefresser, da jedesmal, wenn ein TicketObject angezeigt wird, auch eine volle Abfrage des CustomerUsers gemacht wird. Nicht wirklich empfehlenswert, wenn das System ein paar mehr Tickets umfasst.

Eine Alternative wäre, das in die Extended Ticket Info reinzupacken - aber das ist mir im Moment zu viel Aufwand, um das mal eben zu machen.

Gruß
Daniel
Fabotz
Znuny newbie
Posts: 21
Joined: 14 Jul 2009, 08:22
Znuny Version: 2.3.4

Re: Kundendaten Ausgeben

Post by Fabotz »

Danke mal wieder für deine Hilfe. Ich gucke mir dein Beispiel im Detail an und werde dieses dann testen. Anschließend auch im Hinblick auf die Performance. Besonders da wir ein tägliches Aufkommen von 200 Tickets haben. Dann könnte das wohl zu belastend für das System werden. Aber danke und ich melde mich schnellstmöglich.
Application: OTRS: 2.4.7, OTRS::ITSM 2.1
Operating System: Red Hat Enterprise Linux 5
Application Database: Oralce 10g
Webserver: Apache 2.2.3
Fabotz
Znuny newbie
Posts: 21
Joined: 14 Jul 2009, 08:22
Znuny Version: 2.3.4

Re: Kundendaten Ausgeben

Post by Fabotz »

Hallo nochmals,

leider melde ich mich erst mit einer Woche Verspätung. Doch leider bin ich wegen der vielen Arbeit erst am Fraitag dazu gekommen, die neue Variante zu testen und ein wenig dies auszuprobieren und ich merke immer mehr, dass man sich in das Thema dann doch mehr einarbeiten muss. Ich kenne mich zwar mit der programmierung aus aber nicht mit den genauen unteren Strukturen im OTRS.

Am Freitag habe ich das von dir gezeigte Beispiel in die Ticket.pm eingebunden und anschließend habe ich in der Datei der Ticketansicht die Variable UserComment (entsprechend dem Beispiel) eingebunden. Da man auf die Namen der Variablen achten sollte, habe ich auch eine Variante mit anderen Variablen (UserComment wurde ersetzt) getestet. Leider haben alle Varianten wieder nicht funktioniert. Es tut mir so langsam auch immer mehr Leid, dass ich euch hier mehr und mehr Arbeit produziere (auch mir einfach das Wissen fehlt).

Ich versuche es aber trotzdem mit den hier genannten Beispielen mich versuche noch weiter in anderen Posts zu suchen. Auch da die Geschwindigkeit des Systems nicht geringer geworden ist, vermute ich mal, dass ich was falsch gemacht habe. Eventuell könnt Ihr trotzdem helfen, sofern es möglich ist.

Aktuelle Quellcode:

Code: Select all

    # get username
    $Ticket{UserName} = $Self->{UserObject}->UserName(
        UserID => $Ticket{OwnerID},
    ); 
    
    # get CustomerUserData
    my %customeruserdata = $Self->{CustomerUserObject}->CustomerUserDataGet(
        UserID => $Ticket{CustomerID},
    );
    $Ticket{UserComment} = $customeruserdata{UserComment};
    
    # get responsible
    $Ticket{Responsible} = $Self->{UserObject}->UserLookup(
        UserID => $Ticket{ResponsibleID},
    );
Danke nochmals und freundlichen Gruß

Fabotz
Application: OTRS: 2.4.7, OTRS::ITSM 2.1
Operating System: Red Hat Enterprise Linux 5
Application Database: Oralce 10g
Webserver: Apache 2.2.3
Locked