API SOAP Call in PHP

Allgemein Fragen, deutsche News, Ankündigungen & Events zum OTRS
Post Reply
Dirk23
Znuny newbie
Posts: 17
Joined: 12 Jul 2016, 15:41
Znuny Version: 6.0.15
Real Name: Dirk

API SOAP Call in PHP

Post by Dirk23 »

Hallo,

ich habe eine kleine minimal Webseite erstellt, mit der unsere Telefonhotline einfach und schnell ein Ticket anlegen können soll. Bisher funkioniert alles sehr gut, solange ich nur Customer, CustomerUser und Queues lesen möchte. Nun kommen aber SLA's und Services noch dazu und hier scheitere ich gerade an der Abfrage der Services.

Ich initialisiere den Client mit:

Code: Select all

$url = "http://192.168.x.y/otrs/rpc.pl"; // URL for OTRS server
$soapuser = "OTRS-SOAP -User-Name"; // SOAP username set in sysconfig
$soappw = "ExtremlySecretPW1"; // SOAP password set in sysconfig
$client = new SoapClient(
#### Initialize new client session ####
    null,
    array(
        'location' => $url,
        'uri' => "Core",
        'trace' => 1,
        'login' => $soapuser,
        'password' => $soappw,
        'style' => SOAP_RPC,
        'use' => SOAP_ENCODED
    ) );
Danach versuche ich die Serviceliste zu bekommen:

Code: Select all

function getServiceList() {
    $srvlst = $GLOBALS['client']->__soapCall("Dispatch", array($GLOBALS['soapuser'], $GLOBALS['soappw'], "ServiceObject", "ServiceList"));
    return $srvlst;
}
Ich bekomme dann aber auf der Webseite nur angezeigt:
No such Object ServiceObject!
Mit den "CustomerCompanyObject", "CustomerCompanyObject" oder "QueueObject" funktioniert der SOAP Call einwandfrei, nur das ServiceObject mag er nicht kennen.

Hat noch jemand einen Tipp, was ich hier falsch mache?

Danke

Dirk
OTRS 5.0.15 + ITSM
Ubuntu 16.04.01
jojo
Znuny guru
Posts: 15019
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Re: API SOAP Call in PHP

Post by jojo »

die rpc.pl kennt den Service noch nicht:

bin/cgi-bin/rpc.pl:

Code: Select all

    my %CommonObject;

    $CommonObject{ConfigObject}          = $Kernel::OM->Get('Kernel::Config');
    $CommonObject{CustomerCompanyObject} = $Kernel::OM->Get('Kernel::System::CustomerCompany');
    $CommonObject{CustomerUserObject}    = $Kernel::OM->Get('Kernel::System::CustomerUser');
    $CommonObject{EncodeObject}          = $Kernel::OM->Get('Kernel::System::Encode');
    $CommonObject{GroupObject}           = $Kernel::OM->Get('Kernel::System::Group');
    $CommonObject{LinkObject}            = $Kernel::OM->Get('Kernel::System::LinkObject');
    $CommonObject{LogObject}             = $Kernel::OM->Get('Kernel::System::Log');
    $CommonObject{MainObject}            = $Kernel::OM->Get('Kernel::System::Main');
    $CommonObject{PIDObject}             = $Kernel::OM->Get('Kernel::System::PID');
    $CommonObject{QueueObject}           = $Kernel::OM->Get('Kernel::System::Queue');
    $CommonObject{SessionObject}         = $Kernel::OM->Get('Kernel::System::AuthSession');
    $CommonObject{TicketObject}          = $Kernel::OM->Get('Kernel::System::Ticket');
    $CommonObject{TimeObject}            = $Kernel::OM->Get('Kernel::System::Time');
    $CommonObject{UserObject}            = $Kernel::OM->Get('Kernel::System::User');

Einfach noch hinzufügen:

Code: Select all

    $CommonObject{ServiceObject}            = $Kernel::OM->Get('Kernel::System::Service');
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
Dirk23
Znuny newbie
Posts: 17
Joined: 12 Jul 2016, 15:41
Znuny Version: 6.0.15
Real Name: Dirk

Re: API SOAP Call in PHP

Post by Dirk23 »

Großartig, es geht. Danke!
OTRS 5.0.15 + ITSM
Ubuntu 16.04.01
Dirk23
Znuny newbie
Posts: 17
Joined: 12 Jul 2016, 15:41
Znuny Version: 6.0.15
Real Name: Dirk

Re: API SOAP Call in PHP

Post by Dirk23 »

Ok, nun kommen doch weitere Probleme.

Ich versuche nun mit übergabe einer UserID an die Funktion GetAllCustomServices herauszufinden welche Services der CustomerUser hat.

Code: Select all

function getAllCustomServices ($uid) {
    $custSrvlst = $GLOBALS['client']->__soapCall("Dispatch", array($GLOBALS['soapuser'], $GLOBALS['soappw'], "ServiceObject", "GetAllCustomServices", "UserID", $uid));
    return $custSrvlst;
}
Leider liefert die Funktion keine Daten zurück. Nach eingehender Recherche habe ich mir die Service.pm angeschaut, aus der die Daten kommen sollen, die diese Funktion zurückliefert. In der "sub GetAllCustomServices" kann man den SQL Select sehen und dort konnte ich sehen das die Daten die ich haben will aus einer Tabelle namens "personal_services" kommen. Interessanterweise ist diese Tabelle aber leer bei mir!!

Das erklärt warum ich keine Daten von der Funktion bekomme.

Ist da etwas schief gelaufen bei mir?

Danke im voraus für die Hilfe.

Dirk
OTRS 5.0.15 + ITSM
Ubuntu 16.04.01
Dirk23
Znuny newbie
Posts: 17
Joined: 12 Jul 2016, 15:41
Znuny Version: 6.0.15
Real Name: Dirk

Re: API SOAP Call in PHP

Post by Dirk23 »

Die komplette API Beschreibung kommt mir schon komisch vor. Man soll an Funktionen die eine Liste ALLER Services ausgibt eine UserID übertragen, die dann aber nicht verwendet wird....

ServiceList()
return a hash list of services

Code: Select all

my %ServiceList = $ServiceObject->ServiceList(
        Valid  => 0,   # (optional) default 1 (0|1)
        UserID => 1,
    );
Der SQL-Befehl dazu lautet:

Code: Select all

SELECT id, name, valid_id FROM service
:shock:
OTRS 5.0.15 + ITSM
Ubuntu 16.04.01
Post Reply