otrs externe postgresql db für kunden & kundenbenutzer

Hilfe zu Znuny Problemen aller Art
Locked
mbusch
Znuny newbie
Posts: 9
Joined: 11 Sep 2015, 10:41
Znuny Version: 4.0.11
Real Name: M. Busch
Company: GEDV

otrs externe postgresql db für kunden & kundenbenutzer

Post by mbusch »

Hallo,

bin noch recht unerfahren mit otrs.

ich habe eine otrs 5 installation auf debian mit mysql backend.

gerne würde ich die otrs kunden und kundenbenutzer aus einer bestehenden crm db (postgresql 9.4) beziehen.
in dieser crm habe ich customers (firmen / einzelpersonen) und contacts (ansprechpersonen der firmen bzw erneut einzelpersonen) verküpft über eine gemeinsame id

abgesehen davon, dass ich noch nicht ganz glücklich bin wie otrs kunden und kundenbenutzer trennt / nutzt habe ich versucht meine contacts db in otrs als kundenbenutzer anzubinden.

Code: Select all

    $Self->{CustomerUser} = {
        Name   => 'Kivitendo',
        Module => 'Kernel::System::CustomerUser::DB',
		
        Params => {
            DSN => 'DBI:Pg:database=g2012;host=ip',
            User => 'otrs',
            Password => '...,
            Table => 'contacts',
            ForeignDB => 1,    # set this to 1 if your table does not have create_time, create_by, change_time and change_by fields

        },

        # customer unique id
        CustomerKey => 'cp_id',

        # customer #
        CustomerID             => 'customer_id',
        CustomerValid          => 'valid_id',

        # The last field must always be the email address so that a valid
        #   email address like "John Doe" <john.doe@domain.com> can be constructed from the fields.
        CustomerUserListFields => [ 'cp_givenname', 'cp_name', 'cp_email' ],

	# CustomerUserListFields => ['login', 'first_name', 'last_name', 'customer_id', 'email'],
        CustomerUserSearchFields           => [ 'cp_email', 'cp_givenname', 'cp_name', 'cp_id' ],
        CustomerUserSearchPrefix           => '*',
        CustomerUserSearchSuffix           => '*',
        CustomerUserSearchListLimit        => 250,
        CustomerUserPostMasterSearchFields => ['cp_email'],
        CustomerUserNameFields             => [ 'cp_title', 'cp_givenname', 'cp_name' ],
        CustomerUserEmailUniqCheck         => 1,

		# AutoLoginCreation => 0,
		# AutoLoginCreationPrefix => 'auto',
		# AdminSetPreferences => 1,
        # use customer company support (reference to company, See CustomerCompany settings)
        CustomerCompanySupport => 1,
        # cache time to live in sec. - cache any database queries
        CacheTTL => 60 * 60 * 24,
		# just a read only source
		# ReadOnly => 1,
        Map => [

            # note: Login, Email and CustomerID needed!
            # var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly, http-link-target, link class(es)
            [ 'UserTitle',      'Title',      'cp_title',      1, 0, 'var', '', 0 ],
            [ 'UserFirstname',  'Firstname',  'cp_givenname', 1, 1, 'var', '', 0 ],
            [ 'UserLastname',   'Lastname',   'cp_name',  1, 1, 'var', '', 0 ],
#            [ 'UserLogin',      'Username',   'login',      1, 1, 'var', '', 0 ],
#            [ 'UserPassword',   'Password',   'pw',         0, 0, 'var', '', 0 ],
            [ 'UserEmail',      'Email',      'cp_email',      1, 1, 'var', '', 0 ],
#            [ 'UserEmail',      'Email', 'email',           1, 1, 'var', '[% Env("CGIHandle") %]?Action=AgentTicketCompose;ResponseID=1;TicketID=[% Data.TicketID | uri %];ArticleID=[% Data.ArticleID | uri %]', 0, '', 'AsPopup OTRSPopup_TicketAction' ],
            [ 'UserCustomerID', 'CustomerID', 'cp_id', 0, 1, 'var', '', 0 ],
#            [ 'UserCustomerIDs', 'CustomerIDs', 'customer_ids', 1, 0, 'var', '', 0 ],
            [ 'UserPhone',        'Phone',       'cp_phone1',        1, 0, 'var', '', 0 ],
            [ 'UserFax',          'Fax',         'cp_fax',          1, 0, 'var', '', 0 ],
            [ 'UserMobile',       'Mobile',      'cp_mobile1',       1, 0, 'var', '', 0 ],
            [ 'UserStreet',       'Street',      'cp_street',       1, 0, 'var', '', 0 ],
            [ 'UserZip',          'Zip',         'cp_zipcode',          1, 0, 'var', '', 0 ],
            [ 'UserCity',         'City',        'cp_city',         1, 0, 'var', '', 0 ],
            [ 'UserCountry',      'Country',     'cp_country',      1, 0, 'var', '', 0 ],
            [ 'UserComment',      'Comment',     'cp_notes',     1, 0, 'var', '', 0 ],
#            [ 'ValidID',          'Valid',       'valid_id',     0, 1, 'int', '', 0 ],
        ],

        # default selections
        Selections => {

		# UserTitle => {
		# 	'Mr.' => 'Mr.',
		#   'Mrs.' => 'Mrs.',
		#   },
        },
    };
Leider bekomme ich nichts angezeigt. Im Postgresql Log sehe ich:
2015-12-08 16:24:43 CET [31047-1] otrs@g2012 FEHLER: Operator existiert nicht: integer ~~ unknown bei Zeichen 142
2015-12-08 16:24:43 CET [31047-2] otrs@g2012 TIPP: Kein Operator stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen.
2015-12-08 16:24:43 CET [31047-3] otrs@g2012 ANWEISUNG: SELECT cp_id , cp_givenname, cp_name, cp_email FROM contacts WHERE ((cp_email LIKE $1 OR cp_givenname LIKE $2 OR cp_name LIKE $3 OR cp_id LIKE $4 ) ) LIMIT 250
2015-12-08 16:38:16 CET [31651-1] otrs@g2012 FEHLER: Operator existiert nicht: integer ~~ unknown bei Zeichen 142
2015-12-08 16:38:16 CET [31651-2] otrs@g2012 TIPP: Kein Operator stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen.
2015-12-08 16:38:16 CET [31651-3] otrs@g2012 ANWEISUNG: SELECT cp_id , cp_givenname, cp_name, cp_email FROM contacts WHERE ((cp_email LIKE $1 OR cp_givenname LIKE $2 OR cp_name LIKE $3 OR cp_id LIKE $4 ) ) LIMIT 250
Offensichtlich hab ich postgresql noch nicht richtig eingebunden...

ideen?
OTRS 5 Patch Level 4 on Debian 8 x64
mlamberty
Znuny newbie
Posts: 45
Joined: 04 Nov 2015, 12:06
Znuny Version: 5.0.1
Real Name: Mischa Lamberty
Company: ikt Gromnitza

Re: otrs externe postgresql db für kunden & kundenbenutzer

Post by mlamberty »

Hallo,

in einer Zeile steht expliziet

note: Login, Email and CustomerID needed!

Hast du aber ge #..
mbusch
Znuny newbie
Posts: 9
Joined: 11 Sep 2015, 10:41
Znuny Version: 4.0.11
Real Name: M. Busch
Company: GEDV

Re: otrs externe postgresql db für kunden & kundenbenutzer

Post by mbusch »

habe ich nicht...

[ 'UserCustomerID', 'CustomerID', 'cp_id', 0, 1, 'var', '', 0 ],
# [ 'UserCustomerIDs', 'CustomerIDs', 'customer_ids', 1, 0, 'var', '', 0 ],
OTRS 5 Patch Level 4 on Debian 8 x64
reneeb
Znuny guru
Posts: 5018
Joined: 13 Mar 2011, 09:54
Znuny Version: 6.0.x
Real Name: Renée Bäcker
Company: Perl-Services.de
Contact:

Re: otrs externe postgresql db für kunden & kundenbenutzer

Post by reneeb »

Das Problem sind die Typen beim Vergleich innerhalb von Postgres... cp_id ist ein INTEGER, aber das Like übergibt in der Regel einen String. Postgres ist da AFAIK recht restriktiv. Nimm mal das "cp_id" bei CustomerUserSearchFields raus...
Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
mbusch
Znuny newbie
Posts: 9
Joined: 11 Sep 2015, 10:41
Znuny Version: 4.0.11
Real Name: M. Busch
Company: GEDV

Re: otrs externe postgresql db für kunden & kundenbenutzer

Post by mbusch »

danke, jetzt bin ich einen schritt weiter, abfrage geht durch. in otrs sehe ich aber noch nichts. ich schau mal was ich machen kann...
OTRS 5 Patch Level 4 on Debian 8 x64
mbusch
Znuny newbie
Posts: 9
Joined: 11 Sep 2015, 10:41
Znuny Version: 4.0.11
Real Name: M. Busch
Company: GEDV

Re: otrs externe postgresql db für kunden & kundenbenutzer

Post by mbusch »

Okay, ich bin ein stück weiter gekommen, habe aber immernoch einige (und jetzt auch konkretisierte) fragen:

- kunden anbindung hat eigentlich funktioniert

- kundenbenutzer anbindung funktioniert nicht ("Message: Need UserLogin!")
habe hierfür auch bereits einiges probiert, aktueller code:

Code: Select all

$Self->{CustomerUser} = {
        Name   => 'Kivitendo Contacts',
        Module => 'Kernel::System::CustomerUser::DB',
        Params => {
            # external database
            DSN => 'DBI:Pg:database=g2012;host=192.168.0.90',
            User => 'otrs',
            Password => '...,
            Table => 'contacts',
            ForeignDB => 1,    # set this to 1 if your table does not have create_time, create_by, change_time and change_by fields
            CaseSensitive => 1,
        },

        CustomerKey => 'cp_id',
        CustomerID             => 'cp_id',
        #CustomerValid          => 'valid_id',
	UserLogin			   => 'cp_name',
		

        CustomerUserListFields => [ 'cp_givenname', 'cp_name', 'cp_email' ],

	# CustomerUserListFields => ['login', 'first_name', 'last_name', 'customer_id', 'email'],
        CustomerUserSearchFields           => [ 'cp_email', 'cp_givenname', 'cp_name' ],
        CustomerUserSearchPrefix           => '',
        CustomerUserSearchSuffix           => '*',
        CustomerUserSearchListLimit        => 1000,
        CustomerUserPostMasterSearchFields => ['cp_email'],
        CustomerUserNameFields             => [ 'cp_title', 'cp_givenname', 'cp_name' ],
        CustomerUserEmailUniqCheck         => 0,

		# show now own tickets in customer panel, CompanyTickets
		# CustomerUserExcludePrimaryCustomerID => 0,
		# generate auto logins
		# AutoLoginCreation => 1,
		# generate auto login prefix
		# AutoLoginCreationPrefix => 'auto',
		# admin can change customer preferences
		# AdminSetPreferences => 1,
        # use customer company support (reference to company, See CustomerCompany settings)
        CustomerCompanySupport => 1,
        # cache time to live in sec. - cache any database queries
        #CacheTTL => 60 * 60 * 24,
		CacheTTL => 10,
		# just a read only source
		ReadOnly => 1,
        Map => [

            # note: Login, Email and CustomerID needed!
            # var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly, http-link-target, link class(es)
            [ 'UserTitle',      'Title',      'cp_title',      1, 0, 'var', '', 0 ],
            [ 'UserFirstname',  'Firstname',  'cp_givenname', 1, 1, 'var', '', 0 ],
            [ 'UserLastname',   'Lastname',   'cp_name',  1, 1, 'var', '', 0 ],
            [ 'UserLogin',      'Username',   'cp_email',      1, 1, 'var', '', 0 ],
            [ 'UserPassword',   'Password',   'cp_id',         0, 0, 'var', '', 0 ],
            [ 'UserEmail',      'Email',      'cp_email',      1, 1, 'var', '', 0 ],
            [ 'UserCustomerID', 'CustomerID', 'cp_id', 0, 1, 'int', '', 0 ],
            [ 'UserPhone',        'Phone',       'cp_phone1',        1, 0, 'var', '', 0 ],
            [ 'UserFax',          'Fax',         'cp_fax',          1, 0, 'var', '', 0 ],
            [ 'UserMobile',       'Mobile',      'cp_mobile1',       1, 0, 'var', '', 0 ],
            [ 'UserStreet',       'Street',      'cp_street',       1, 0, 'var', '', 0 ],
            [ 'UserZip',          'Zip',         'cp_zipcode',          1, 0, 'var', '', 0 ],
            [ 'UserCity',         'City',        'cp_city',         1, 0, 'var', '', 0 ],
            [ 'UserCountry',      'Country',     'cp_country',      1, 0, 'var', '', 0 ],
            [ 'UserComment',      'Comment',     'cp_notes',     1, 0, 'var', '', 0 ],
            #[ 'ValidID',          'Valid',       'valid_id',     0, 0, 'int', '', 0 ],
        ],

        # default selections
        Selections => {

		# UserTitle => {
		# 	'Mr.' => 'Mr.',
		#   'Mrs.' => 'Mrs.',
		#   },
        },
    };
vielleicht sollte ich über die grundsätzlichen einstellungen gehen um das prinzip besser zu verstehen?

CustomerKey => 'cp_id',
CustomerID => 'cp_id',
#CustomerValid => 'valid_id',
UserLogin => 'cp_name',

links stehen die otrs internen bezeichnungen, rechts steht der name des wertes aus meiner db, korrekt?

CustomerUserListFields => [ 'cp_givenname', 'cp_name', 'cp_email' ],
CustomerUserSearchFields => [ 'cp_email', 'cp_givenname', 'cp_name' ],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserPostMasterSearchFields => ['cp_email'],
CustomerUserNameFields => [ 'cp_title', 'cp_givenname', 'cp_name' ],

was genau bewirken diese werte? gibt es eine doku in der ich das näher nachlesen kann?

Map...
# var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly, http-link-target, link class(es)
[ 'UserTitle', 'Title', 'cp_title', 1, 0, 'var', '', 0 ],

interne variable, frontend, db name, wird angezeigt, wird benötigt, var-typ, ... ?

interne variable kann nicht geändert werden?
frontend auch nicht?
db name ist der name des wertes in der db
wird WO angezeigt (oder nicht)?
benötigt?
var-typ kann ich hier den erwarteten werd des db inhalts ändern? zb anstatt var auf int wenn in der db ein int wert statt string steht?

- auth:
eigentlich hätte ich gerne die login/pass daten in der otrs mysql tabelle. hierzu müsste otrs aber die kunden aus meiner db und seiner db verknüpfen können. wie gehe ich am besten vor? die Customer::AuthModule mit den otrs mysql daten füttern und otrs stellt selber die verknüpfung (zb anhand des customer primary key) her? oder muss ich zwei DB für CustomerUser erstellen und eine davon auf die mysql otrs db mit den login mappings anlegen?

- valid:
ich habe in meiner databank ein bool obsolete. wenn ich den invers als valid benutzen kann, kann ich valid/not valid aus meiner db übernehmen. ideen?

- foreigndb / create_time/change_time
habe werte für create_time und change_time in meiner db (timestamp without timezone) - aber kein create/change_by. kann man die werte mappen? (auch mit foreigndb=1?) wie?
UserCreate_Time ? UserCreateTime? Und CustomerCreate_Time/CreateTime ?


das wärs erstmal fürs gröbste, weitere fragen sind zwar noch da aber erst würde ich gerne die bestehenden sachen klären. dann kann ich vielleicht selber lösungen für den rest finden...
OTRS 5 Patch Level 4 on Debian 8 x64
mbusch
Znuny newbie
Posts: 9
Joined: 11 Sep 2015, 10:41
Znuny Version: 4.0.11
Real Name: M. Busch
Company: GEDV

Re: otrs externe postgresql db für kunden & kundenbenutzer

Post by mbusch »

also ich glaube ich gebe das auf, das klappt einfach vorne und hinten nicht in irgendeiner form die zielführend ist.

die anbindung einer datenbank mit kundendaten ist mehr schlechter witz als feature in otrs.
und es ist alles andere als transparent was otrs da wie macht...

man sollte meinen, dass in einem umfeld in dem ticketing systeme verwendet werden, sind crm datenbanken mit bestehenden kundendaten nicht selten anzutreffen und eine funktionierende anbindung an diese systeme wäre priorität gewesen...


werde mich wohl wieder an ein script setzen, dass meine daten aus der eigentlichen db holt in in die von otrs steckt.
OTRS 5 Patch Level 4 on Debian 8 x64
reneeb
Znuny guru
Posts: 5018
Joined: 13 Mar 2011, 09:54
Znuny Version: 6.0.x
Real Name: Renée Bäcker
Company: Perl-Services.de
Contact:

Re: otrs externe postgresql db für kunden & kundenbenutzer

Post by reneeb »

Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
KlausNehrer
Znuny ninja
Posts: 1312
Joined: 25 May 2012, 08:51
Znuny Version: OTRS 4
Real Name: Klaus Nehrer

Re: otrs externe postgresql db für kunden & kundenbenutzer

Post by KlausNehrer »

Auch wenn es hinterm Link von reneeb schon herauszulesen ist: Üblicherweise nutzt man einen Views.

Mapping: In der OTRS Doku gut erklärt.
Valid: Ja.
Create_time: Oh, Google ... aber da bin ich jetzt zu faul für.
Locked