Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Request Tracker: Devel

could there be a REST/ticket creation bug?

 

 

Request Tracker devel RSS feed   Index | Next | Previous | View Threaded


vtplymblfan-rt at yahoo

May 22, 2009, 11:28 AM

Post #1 of 2 (468 views)
Permalink
could there be a REST/ticket creation bug?

I first posted the message below to rt-users thinking I was doing something wrong in my application's PHP code that is trying to submit a REST request to RT.... but having added debugging comments to RT code I think possibly there could be a bug? Please read and then look below for the rest of this message...


________________________________
From: "vtplymblfan-rt[at]yahoo.com" <vtplymblfan-rt[at]yahoo.com>
To: rt-users[at]lists.bestpractical.com
Sent: Tuesday, May 19, 2009 12:53:21 PM
Subject: [rt-users] any ideas why this post with php CURL not setting custom field?

Hi there,

I
have modified a web application to post to RT's web interface a create
ticket request. The post works perfectly... the ticket get created in
the right queue with the given subject and text... except that the
custom field value I pass (UPC) in does not get set. Here is the CURL
code:

----

$content = 'id: new
CF-UPC: 786936180992
Text: This is the ticket text
Subject: This is the subject
Queue: External App Requests';

$request = RT_LOCATION;
$request .= 'ticket/new/';

$postargs = array(
'user' => RT_USER,
'pass' => RT_PASS,
'content' => $content
);

// get the curl session object
$session = curl_init($request);

// set the POST options
curl_setopt ($session, CURLOPT_POST, true);
curl_setopt ($session, CURLOPT_POSTFIELDS, $postargs);
curl_setopt($session, CURLOPT_HEADER, true);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
curl_setopt( $session, CURLOPT_HTTPHEADER, array( 'Expect:' ) );

// do the POST and then close the session
$response = curl_exec($session);
curl_close($session);

---

In debugging this I have also created a simple form which posts to the same place:


<form method="POST"action="http://foo.foo.edu/REST/1.0/ticket/new/">
User: <input type="text" name="user" size="20"><br>
Pass: <input type="text" name="pass" size="20"><br>
Content: <textarea rows="10" name="content" cols="30">id: new
CF-UPC: 786936180992
Text: This is the ticket text from the form.
Subject: This is the subject
Queue: External App Requests</textarea><br>
<p><input type="submit" value="Submit" name="B1">
</form>

When this form is used, again the ticket is created but in this case the custom field UPC does get set. But
the "Content:" being sent is the same in both. In particular in both cases I am providing UPC's value with
"CF-UPC: 78..." Can anyone here explain what the difference could possibly be between these two
posting methods that could result in this scenario? By the way, in both cases I am passing in the same
user name and password. I am really stumped and I suspect some small stupid thing I have missed.

Thanks for your help,
Kim

________________________________

Ok so I decided to add comments to REST/1.0/Forms/ticket/default to see what RT was receiving in either case:

else {
# We'll create a new ticket, and fall through to set fields that
# can't be set in the call to Create().
my (%v, $text);

foreach my $k (keys %data) {

push(@comments, "------------key: $k----------");
# flexibly parse any dates
if ($dates{lc $k}) {
my $time = new RT::Date $session{CurrentUser};
$time->Set(Format => 'unknown', Value => $data{$k});
$data{$k} = $time->ISO;
}

if (exists $create{lc $k}) {
push(@comments, "key $k in create");
$v{$create{lc $k}} = delete $data{$k};
}
# Set custom field
elsif ($k =~ /^$cf_spec/) {
push(@comments, "GOT HERE with $k");
my $cf = RT::CustomField->new( $RT::SystemUser );
push(@comments, "cf: $cf");
my $cfk = $1 || $2;
push(@comments, "cfk: $cfk");
unless($cf->LoadByName( Name => $cfk )) {
push @comments, "# Invalid custom field name ($cfk)";
delete $data{$k};
next;
}
push(@comments, "value: $data{$k}");
my($foo) = $cf->Id();
push(@comments, "foo: $foo");

$v{"CustomField-".$cf->Id()} = delete $data{$k};
push(@comments, "v: $v{'CustomField-'.$foo}");
}

And I have dicovered that either way I try to create a ticket, either with the PPH CURL code or with the form, the comments that get spit out are the same:

------------key: Subject----------
key Subject in create
------------key: id----------
------------key: CF-UPC----------
GOT HERE with CF-UPC
cf: RT::CustomField=HASH(0x5555592bf510)
cfk: UPC
value: 786936180992
foo: 1
v: 786936180992
------------key: Queue----------
key Queue in create
------------key: Text----------


So it appears that in both cases Forms/ticket/default is getting exactly the same thing and doing with it exactly the same thing.... specifically
taking in CF-UPC: 7893... and with that creating the custom field UPC with value 7893...

So then why in one case does the resulting ticket I find when I go to RT have this custom field set and in the other case not? Please are there any
ticket creation experts who could shed light on what is going wrong after the request is processed in Forms/ticket/default?

Thanks so much for your help,
Kim Jones


jesse at bestpractical

May 22, 2009, 11:38 AM

Post #2 of 2 (424 views)
Permalink
Re: could there be a REST/ticket creation bug? [In reply to]

What version of RT are you using?
Does using the RT CLI fail in the same way?
Can you sniff and capture the HTTP conversation between your client code
and RT?

On Fri, May 22, 2009 at 11:28:05AM -0700, Kim Jones wrote:
> I first posted the message below to rt-users thinking I was doing something wrong in my application's PHP code that is trying to submit a REST request to RT.... but having added debugging comments to RT code I think possibly there could be a bug? Please read and then look below for the rest of this message...
>
>
> ________________________________
> From: "vtplymblfan-rt[at]yahoo.com" <vtplymblfan-rt[at]yahoo.com>
> To: rt-users[at]lists.bestpractical.com
> Sent: Tuesday, May 19, 2009 12:53:21 PM
> Subject: [rt-users] any ideas why this post with php CURL not setting custom field?
>
> Hi there,
>
> I
> have modified a web application to post to RT's web interface a create
> ticket request. The post works perfectly... the ticket get created in
> the right queue with the given subject and text... except that the
> custom field value I pass (UPC) in does not get set. Here is the CURL
> code:
>
> ----
>
> $content = 'id: new
> CF-UPC: 786936180992
> Text: This is the ticket text
> Subject: This is the subject
> Queue: External App Requests';
>
> $request = RT_LOCATION;
> $request .= 'ticket/new/';
>
> $postargs = array(
> 'user' => RT_USER,
> 'pass' => RT_PASS,
> 'content' => $content
> );
>
> // get the curl session object
> $session = curl_init($request);
>
> // set the POST options
> curl_setopt ($session, CURLOPT_POST, true);
> curl_setopt ($session, CURLOPT_POSTFIELDS, $postargs);
> curl_setopt($session, CURLOPT_HEADER, true);
> curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
> curl_setopt( $session, CURLOPT_HTTPHEADER, array( 'Expect:' ) );
>
> // do the POST and then close the session
> $response = curl_exec($session);
> curl_close($session);
>
> ---
>
> In debugging this I have also created a simple form which posts to the same place:
>
>
> <form method="POST"action="http://foo.foo.edu/REST/1.0/ticket/new/">
> User: <input type="text" name="user" size="20"><br>
> Pass: <input type="text" name="pass" size="20"><br>
> Content: <textarea rows="10" name="content" cols="30">id: new
> CF-UPC: 786936180992
> Text: This is the ticket text from the form.
> Subject: This is the subject
> Queue: External App Requests</textarea><br>
> <p><input type="submit" value="Submit" name="B1">
> </form>
>
> When this form is used, again the ticket is created but in this case the custom field UPC does get set. But
> the "Content:" being sent is the same in both. In particular in both cases I am providing UPC's value with
> "CF-UPC: 78..." Can anyone here explain what the difference could possibly be between these two
> posting methods that could result in this scenario? By the way, in both cases I am passing in the same
> user name and password. I am really stumped and I suspect some small stupid thing I have missed.
>
> Thanks for your help,
> Kim
>
> ________________________________
>
> Ok so I decided to add comments to REST/1.0/Forms/ticket/default to see what RT was receiving in either case:
>
> else {
> # We'll create a new ticket, and fall through to set fields that
> # can't be set in the call to Create().
> my (%v, $text);
>
> foreach my $k (keys %data) {
>
> push(@comments, "------------key: $k----------");
> # flexibly parse any dates
> if ($dates{lc $k}) {
> my $time = new RT::Date $session{CurrentUser};
> $time->Set(Format => 'unknown', Value => $data{$k});
> $data{$k} = $time->ISO;
> }
>
> if (exists $create{lc $k}) {
> push(@comments, "key $k in create");
> $v{$create{lc $k}} = delete $data{$k};
> }
> # Set custom field
> elsif ($k =~ /^$cf_spec/) {
> push(@comments, "GOT HERE with $k");
> my $cf = RT::CustomField->new( $RT::SystemUser );
> push(@comments, "cf: $cf");
> my $cfk = $1 || $2;
> push(@comments, "cfk: $cfk");
> unless($cf->LoadByName( Name => $cfk )) {
> push @comments, "# Invalid custom field name ($cfk)";
> delete $data{$k};
> next;
> }
> push(@comments, "value: $data{$k}");
> my($foo) = $cf->Id();
> push(@comments, "foo: $foo");
>
> $v{"CustomField-".$cf->Id()} = delete $data{$k};
> push(@comments, "v: $v{'CustomField-'.$foo}");
> }
>
> And I have dicovered that either way I try to create a ticket, either with the PPH CURL code or with the form, the comments that get spit out are the same:
>
> ------------key: Subject----------
> key Subject in create
> ------------key: id----------
> ------------key: CF-UPC----------
> GOT HERE with CF-UPC
> cf: RT::CustomField=HASH(0x5555592bf510)
> cfk: UPC
> value: 786936180992
> foo: 1
> v: 786936180992
> ------------key: Queue----------
> key Queue in create
> ------------key: Text----------
>
>
> So it appears that in both cases Forms/ticket/default is getting exactly the same thing and doing with it exactly the same thing.... specifically
> taking in CF-UPC: 7893... and with that creating the custom field UPC with value 7893...
>
> So then why in one case does the resulting ticket I find when I go to RT have this custom field set and in the other case not? Please are there any
> ticket creation experts who could shed light on what is going wrong after the request is processed in Forms/ticket/default?
>
> Thanks so much for your help,
> Kim Jones
> _______________________________________________
> List info: http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-devel


--
_______________________________________________
List info: http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-devel

Request Tracker devel RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact lists@gossamer-threads.com
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.