I have a OTRS system has been configed as SOAP Provider, and my creating phone ticket has a Dynamic Field named "MyDF", a text field.
Now I use otrs.SOAPRequest.pl to test if Provider can create a ticket with Dynamic Field. So I rewrite xml string in this pl file as below.
When I run this program, everything is OK, my OTRS create a ticket, but one thing: No Dynamic field is create.
Please help me!
Thank in davance.
otrs.SOAPRequest.pl code:
Code: Select all
#!/usr/bin/perl -w
# --
# otrs.SOAPRequest.pl - sample to send a SOAP request to OTRS Generic Interface Ticket Connector
# Copyright (C) 2001-2012 xxx, http://otrs.org/
# --
# $Id: otrs.SOAPRequest.pl,v 1.2 2012/09/07 13:51:36 mb Exp $
# --
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU AFFERO General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# or see http://www.gnu.org/licenses/agpl.txt.
# --
use strict;
use warnings;
# use ../ as lib location
use File::Basename;
use FindBin qw($RealBin);
use lib dirname($RealBin);
use SOAP::Lite;
use Data::Dumper;
# ---
# Variables to be defined
# this is the URL for the web service
# the format is
# <HTTP_TYPE>:://<OTRS_FQDN>/nph-genericinterface.pl/Webservice/<WEB_SERVICE_NAME>
# or
# <HTTP_TYPE>:://<OTRS_FQDN>/nph-genericinterface.pl/WebserviceID/<WEB_SERVICE_ID>
my $URL = 'http://localhost/otrs/nph-genericinterface.pl/Webservice/KhoiWebProvider';
# this name space should match the specified name space in the SOAP transport for the web service
my $NameSpace = 'KhoiNamespace';
# this is operation to execute, it could be TicketCreate, TicketUpdate, TicketGet, TicketSearch
# or SessionCreate. and they must to be defined in the web service.
my $Operation = 'KhoiCreateTicket';
# this variable is used to store all the parameters to be included on a request in XML format, each
# operation has a determined set of mandatory and non mandatory parameters to work correctly, please
# check OTRS Admin Manual in order to get the complete list
my $XMLData = '
<UserLogin>khoi</UserLogin>
<Password>iloveyou</Password>
<Ticket>
<CustomerUser>khoi@otrs.com</CustomerUser>
<Title>Task is created from Khoi to Webservice</Title>
<Queue>Raw</Queue>
<State>Open</State>
<Priority>3 normal</Priority>
<TaskID>1221312</TaskID>
<ExternalTaskID>tam nhan</ExternalTaskID>
<Type>Info</Type>
<CustomerID>2222</CustomerID>
[b][color=#FF0000] <DynamicField>
<Name>MyDF</Name>
<Value>abc</Value>
</DynamicField>[/color][/b]
</Ticket>
<Article>
<Subject>thu</Subject>
<Body>thu</Body>
<ContentType>text/plain; charset=utf8</ContentType>
</Article>
';
# ---
# create a SOAP::Lite data structure from the provided XML data structure
my $SOAPData = SOAP::Data
->type( 'xml' => $XMLData );
my $SOAPObject = SOAP::Lite
->uri($NameSpace)
->proxy($URL)
->$Operation($SOAPData);
# check for a fault in the soap code
if ( $SOAPObject->fault ) {
print $SOAPObject->faultcode, " ", $SOAPObject->faultstring, "\n";
}
# otherwise print the results
else {
# get the XML response part from the SOAP message
my $XMLResponse = $SOAPObject->context()->transport()->proxy()->http_response()->content();
# deserialize response (convert it into a perl structure)
my $Deserialized = eval {
SOAP::Deserializer->deserialize($XMLResponse);
};
# remove all the headers and other not needed parts of the SOAP message
my $Body = $Deserialized->body();
# just output relevant data and no the operation name key (like TicketCreateResponse)
for my $ResponseKey ( keys %{$Body} ) {
print Dumper( $Body->{$ResponseKey} );
}
}