Moin!
Ich habe da ein kleines Problem bei der Anbindung unserer KundenDB ans
OTRS, und nach einigem Probieren wusste ich nicht mehr weiter und
hoffe hier auf einen kleinen Hint...
Zustand: OTRS 2.3.3 auf Gentoo Linux, MySQL KundenDB.
Zuerst habe ich die Datei Kernel/System/CustomerUser/DB.pm patchen
müssen, da diese keine erweiterte WHERE klausel erlaubt, aber das nur
am Rande:
--- Kernel/System/CustomerUser/DB.pm.orig 2009-03-20 17:00:25.000000000 +0100
+++ Kernel/System/CustomerUser/DB.pm 2009-03-20 17:02:30.000000000 +0100
@@ -265,6 +265,12 @@
. " IN (" . join( ', ',
$Self->{ValidObject}->ValidIDsGet() ) . ") ";
}
+ # Add missing CustomerUserValidFilter option
+ if ( $Self->{CustomerUserMap}->{CustomerUserValidFilter} ) {
+ $SQL .= " AND "
+ . $Self->{CustomerUserMap}->{CustomerUserValidFilter};
+ }
+
# check cache
if ( $Self->{CacheObject} ) {
my $Users = $Self->{CacheObject}->Get(
Damit habe ich die Option (die ich ansonsten nur für LDAP gefunden hatte):
CustomerUserValidFilter => 'Erreichbarkeiten.ID =
Ansprechpartner.Nummer AND Erreichbarkeiten.Art="E"',
So, somit wird mir nun, basierend auf meiner CustomerUser1
Konfiguration ein Query gebaut, das so aussieht:
SELECT Ansprechpartner.Nummer , Ansprechpartner.Anrede,
Ansprechpartner.Vorname, Ansprechpartner.Name,
Erreichbarkeiten.Anschluss FROM Erreichbarkeiten,Ansprechpartner WHERE
((LOWER(Ansprechpartner.Vorname) LIKE LOWER('%customername%') OR
LOWER(Ansprechpartner.Name) LIKE LOWER('%customername%') OR
LOWER(Erreichbarkeiten.Anschluss) LIKE LOWER('%customername%')) ) AND
Erreichbarkeiten.ID = Ansprechpartner.Nummer AND
Erreichbarkeiten.Art="E" LIMIT 50;
Wenn ich das in der mysql console ausführe, erhalte ich genau ein result:
+--------+--------+---------+------+------------------+
| Nummer | Anrede | Vorname | Name | Anschluss |
+--------+--------+---------+------+------------------+
| 293 | G | Vorname | Customername | mail(a)customername.de |
+--------+--------+---------+------+------------------+
1 row in set (0.00 sec)
Wenn ich die Suche jetzt innerhalb von OTRS Kunden-Benutzer Verwaltung
ausführe, bekomme ich als Resultat ebenfalls nur ein result,
allerdings wird statt der Emailadresse eine Telefonnummer angezeigt,
die mit diesem Datensatz gar nichts zu tun hat.
Wenn ich den query generisch halte (z.b. nach "name" suche), dann
erhalte ich beispielsweise 20 Treffer, wobei auch wieder alle Einträge
diese eine Telefonnummer anzeigen, statt der jeweiligen Mailadresse.
Das korrekte SQL Statement konnte ich über den OTRS debug log output
verifizieren. Und wenn ich den SQL string aus diesem output in meine
mysql console kopiere, kommt das korrekte Ergebnis - nur innerhalb vom
OTRS nicht ...
Hat einer eine Idee, was hier mein Problem sein könnte?
--
Le deagh dhùraghd,
Frank Altpeter
There is no way to happiness. Happiness is the way.
-- Buddha