Calling method Headers in Custom Condition

Hi

I have a queue called database which had been setup to recieve emails
from a form. I had set up a simple approval process by following the
wiki so I created an approv-database queue and then have a template in
the database queue that creates a Ticket in the approv-database queue
when a ticket is created in the database queue.

The usage of the database queue has expanded beyond just accepting
emails from the form and other tickets that are created in it don’t
need to be approved so I have been trying to change the database queue
so that only tickets created by the form emails will trigger an
approval.

To do this I have the form inserting a header “RT-Formname” and I then
changed the “Request Approval” scip in the database queue so it used a
custom condition rather than the default “On create” condition. This
is what I have in my Custom Condition:
my $header = $self->TransactionObj->Attachments->First->Headers();
$header =~ s/\n\s+/ /g;
my $formname = ‘’;
if (header =~ /^Formname: (.*?)/m) {
$formname = $1;
$RT::Logger->debug(“the headers are $formname”);
}
else {
$RT::Logger->debug(“didn’t match”);
}
$RT::Logger->debug(“the formname is $formname”);
return undef unless ($formname eq “Database”);
return 1;

This appears to work fine as if I create a ticket through the web
interface in RT then the Request Approval scrip is not called and a
ticket is created that doesn’t trigger the approval process. When I
send in a email from the form the approval process is triggered as
before so a ticket is created that is pending approval but even though
it appears to work fine and the tickets are created I am getting this
in the rt.log file:

[Thu Apr 27 06:24:25 2006] [error]: Scrip 16 IsApplicable failed:
Can’t call method “Headers” on an undefined value at (eval 602) line
1.

Stack:
[(eval 602):1]
[/usr/share/request-tracker3.4/lib/RT/ScripCondition_Overlay.pm:219]
[/usr/share/request-tracker3.4/lib/RT/Scrip_Overlay.pm:438]
[/usr/share/request-tracker3.4/lib/RT/Scrips_Overlay.pm:228]
[/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:160]
[/usr/share/request-tracker3.4/lib/RT/Record.pm:1373]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3439]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3176]
[(eval 579):14]
[/usr/share/request-tracker3.4/lib/RT/ScripAction_Overlay.pm:220]
[/usr/share/request-tracker3.4/lib/RT/Scrip_Overlay.pm:477]
[/usr/share/request-tracker3.4/lib/RT/Scrips_Overlay.pm:235]
[/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:160]
[/usr/share/request-tracker3.4/lib/RT/Record.pm:1373]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3439]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3176]
[/usr/share/request-tracker3.4/html/Approvals/index.html:80]
[/usr/share/request-tracker3.4/html/autohandler:215]
(/usr/share/request-tracker3.4/lib/RT/Condition/UserDefined.pm:67)
[Thu Apr 27 06:24:25 2006] [debug]: About to commit scrips for
transaction #7809
(/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:167)
I also appear to be getting this notice when other tickets are being
created in other queues as I just noticed that it appeared in the log
when some created a ticket in the support queue.

I am thinking that it is something to do with IsApplicable but not
quite sure that is supposed to apply given that the code is being
executed through the Userdefinied.pm condition. If anyone can shed any
light or point me to some more info on this subject I would
appreciate it, have looked on the Wiki and also in the RT Essentials
book but couldn’t find much that helped me figure out why this error
was happening although it helped me figure out how to to get this far.

cheers
John
John Habermann
The Wilderness Society
www.wilderness.org.au

Your scrip runs on every transaction that happens on the
ticket. Not every transaction has attachments. You need
to see if it is a Create transaction before checking
headers.

return 0 if $self->TransactionObj->Type eq ‘Create’;

-ToddOn Thu, Apr 27, 2006 at 05:05:03PM +1000, john habermann wrote:

Hi

I have a queue called database which had been setup to recieve emails
from a form. I had set up a simple approval process by following the
wiki so I created an approv-database queue and then have a template in
the database queue that creates a Ticket in the approv-database queue
when a ticket is created in the database queue.

The usage of the database queue has expanded beyond just accepting
emails from the form and other tickets that are created in it don’t
need to be approved so I have been trying to change the database queue
so that only tickets created by the form emails will trigger an
approval.

To do this I have the form inserting a header “RT-Formname” and I then
changed the “Request Approval” scip in the database queue so it used a
custom condition rather than the default “On create” condition. This
is what I have in my Custom Condition:

my $header = $self->TransactionObj->Attachments->First->Headers();
$header =~ s/\n\s+/ /g;
my $formname = ‘’;
if ($header =~ /^Formname: (.*?)$/m) {
$formname = $1;
$RT::Logger->debug(“the headers are $formname”);
}
else {
$RT::Logger->debug(“didn’t match”);
}
$RT::Logger->debug(“the formname is $formname”);
return undef unless ($formname eq “Database”);
return 1;

This appears to work fine as if I create a ticket through the web
interface in RT then the Request Approval scrip is not called and a
ticket is created that doesn’t trigger the approval process. When I
send in a email from the form the approval process is triggered as
before so a ticket is created that is pending approval but even though
it appears to work fine and the tickets are created I am getting this
in the rt.log file:


[Thu Apr 27 06:24:25 2006] [error]: Scrip 16 IsApplicable failed:
Can’t call method “Headers” on an undefined value at (eval 602) line
1.

Stack:
[(eval 602):1]
[/usr/share/request-tracker3.4/lib/RT/ScripCondition_Overlay.pm:219]
[/usr/share/request-tracker3.4/lib/RT/Scrip_Overlay.pm:438]
[/usr/share/request-tracker3.4/lib/RT/Scrips_Overlay.pm:228]
[/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:160]
[/usr/share/request-tracker3.4/lib/RT/Record.pm:1373]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3439]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3176]
[(eval 579):14]
[/usr/share/request-tracker3.4/lib/RT/ScripAction_Overlay.pm:220]
[/usr/share/request-tracker3.4/lib/RT/Scrip_Overlay.pm:477]
[/usr/share/request-tracker3.4/lib/RT/Scrips_Overlay.pm:235]
[/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:160]
[/usr/share/request-tracker3.4/lib/RT/Record.pm:1373]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3439]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3176]
[/usr/share/request-tracker3.4/html/Approvals/index.html:80]
[/usr/share/request-tracker3.4/html/autohandler:215]
(/usr/share/request-tracker3.4/lib/RT/Condition/UserDefined.pm:67)
[Thu Apr 27 06:24:25 2006] [debug]: About to commit scrips for
transaction #7809
(/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:167)

I also appear to be getting this notice when other tickets are being
created in other queues as I just noticed that it appeared in the log
when some created a ticket in the support queue.

I am thinking that it is something to do with IsApplicable but not
quite sure that is supposed to apply given that the code is being
executed through the Userdefinied.pm condition. If anyone can shed any
light or point me to some more info on this subject I would
appreciate it, have looked on the Wiki and also in the RT Essentials
book but couldn’t find much that helped me figure out why this error
was happening although it helped me figure out how to to get this far.

cheers
John

John Habermann
The Wilderness Society
www.wilderness.org.au


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com

We’re hiring! Come hack Perl for Best Practical: http://bestpractical.com/about/jobs.html

Or check that the transaction has attachments.On 4/28/06, Todd Chapman todd@chaka.net wrote:

Your scrip runs on every transaction that happens on the
ticket. Not every transaction has attachments. You need
to see if it is a Create transaction before checking
headers.

return 0 if $self->TransactionObj->Type eq ‘Create’;

-Todd

On Thu, Apr 27, 2006 at 05:05:03PM +1000, john habermann wrote:

Hi

I have a queue called database which had been setup to recieve emails
from a form. I had set up a simple approval process by following the
wiki so I created an approv-database queue and then have a template in
the database queue that creates a Ticket in the approv-database queue
when a ticket is created in the database queue.

The usage of the database queue has expanded beyond just accepting
emails from the form and other tickets that are created in it don’t
need to be approved so I have been trying to change the database queue
so that only tickets created by the form emails will trigger an
approval.

To do this I have the form inserting a header “RT-Formname” and I then
changed the “Request Approval” scip in the database queue so it used a
custom condition rather than the default “On create” condition. This
is what I have in my Custom Condition:

my $header = $self->TransactionObj->Attachments->First->Headers();
$header =~ s/\n\s+/ /g;
my $formname = ‘’;
if ($header =~ /^Formname: (.*?)$/m) {
$formname = $1;
$RT::Logger->debug(“the headers are $formname”);
}
else {
$RT::Logger->debug(“didn’t match”);
}
$RT::Logger->debug(“the formname is $formname”);
return undef unless ($formname eq “Database”);
return 1;

This appears to work fine as if I create a ticket through the web
interface in RT then the Request Approval scrip is not called and a
ticket is created that doesn’t trigger the approval process. When I
send in a email from the form the approval process is triggered as
before so a ticket is created that is pending approval but even though
it appears to work fine and the tickets are created I am getting this
in the rt.log file:


[Thu Apr 27 06:24:25 2006] [error]: Scrip 16 IsApplicable failed:
Can’t call method “Headers” on an undefined value at (eval 602) line
1.

Stack:
[(eval 602):1]
[/usr/share/request-tracker3.4/lib/RT/ScripCondition_Overlay.pm:219]
[/usr/share/request-tracker3.4/lib/RT/Scrip_Overlay.pm:438]
[/usr/share/request-tracker3.4/lib/RT/Scrips_Overlay.pm:228]
[/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:160]
[/usr/share/request-tracker3.4/lib/RT/Record.pm:1373]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3439]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3176]
[(eval 579):14]
[/usr/share/request-tracker3.4/lib/RT/ScripAction_Overlay.pm:220]
[/usr/share/request-tracker3.4/lib/RT/Scrip_Overlay.pm:477]
[/usr/share/request-tracker3.4/lib/RT/Scrips_Overlay.pm:235]
[/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:160]
[/usr/share/request-tracker3.4/lib/RT/Record.pm:1373]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3439]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3176]
[/usr/share/request-tracker3.4/html/Approvals/index.html:80]
[/usr/share/request-tracker3.4/html/autohandler:215]
(/usr/share/request-tracker3.4/lib/RT/Condition/UserDefined.pm:67)
[Thu Apr 27 06:24:25 2006] [debug]: About to commit scrips for
transaction #7809
(/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:167)

I also appear to be getting this notice when other tickets are being
created in other queues as I just noticed that it appeared in the log
when some created a ticket in the support queue.

I am thinking that it is something to do with IsApplicable but not
quite sure that is supposed to apply given that the code is being
executed through the Userdefinied.pm condition. If anyone can shed any
light or point me to some more info on this subject I would
appreciate it, have looked on the Wiki and also in the RT Essentials
book but couldn’t find much that helped me figure out why this error
was happening although it helped me figure out how to to get this far.

cheers
John

John Habermann
The Wilderness Society
www.wilderness.org.au


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com

We’re hiring! Come hack Perl for Best Practical: http://bestpractical.com/about/jobs.html


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com

We’re hiring! Come hack Perl for Best Practical: http://bestpractical.com/about/jobs.html

Best regards, Ruslan.

Hi Todd

Your scrip runs on every transaction that happens on the
ticket. Not every transaction has attachments. You need
to see if it is a Create transaction before checking
headers.

return 0 if $self->TransactionObj->Type eq ‘Create’;

Thank you very much for your help. I now have the following code and
it works great.

return 0 if $self->TransactionObj->Type ne ‘Create’;
my $header = $self->TransactionObj->Attachments->First->Headers();
$header =~ s/\n\s+/ /g;
my $formname = ‘’;
if ($header =~ /^RT-Formname: (.*?)$/m) {
$formname = $1;
$RT::Logger->debug(“the headers are $formname”);
}
else {
$RT::Logger->debug(“didn’t match”);
}
$RT::Logger->debug(“the formname is $formname”);
return undef unless ($formname eq “Database”);
return 1;

cheers
john

-Todd

Hi

I have a queue called database which had been setup to recieve emails
from a form. I had set up a simple approval process by following the
wiki so I created an approv-database queue and then have a template in
the database queue that creates a Ticket in the approv-database queue
when a ticket is created in the database queue.

The usage of the database queue has expanded beyond just accepting
emails from the form and other tickets that are created in it don’t
need to be approved so I have been trying to change the database queue
so that only tickets created by the form emails will trigger an
approval.

To do this I have the form inserting a header “RT-Formname” and I then
changed the “Request Approval” scip in the database queue so it used a
custom condition rather than the default “On create” condition. This
is what I have in my Custom Condition:

my $header = $self->TransactionObj->Attachments->First->Headers();
$header =~ s/\n\s+/ /g;
my $formname = ‘’;
if ($header =~ /^Formname: (.*?)$/m) {
$formname = $1;
$RT::Logger->debug(“the headers are $formname”);
}
else {
$RT::Logger->debug(“didn’t match”);
}
$RT::Logger->debug(“the formname is $formname”);
return undef unless ($formname eq “Database”);
return 1;

This appears to work fine as if I create a ticket through the web
interface in RT then the Request Approval scrip is not called and a
ticket is created that doesn’t trigger the approval process. When I
send in a email from the form the approval process is triggered as
before so a ticket is created that is pending approval but even though
it appears to work fine and the tickets are created I am getting this
in the rt.log file:


[Thu Apr 27 06:24:25 2006] [error]: Scrip 16 IsApplicable failed:
Can’t call method “Headers” on an undefined value at (eval 602) line
1.

Stack:
[(eval 602):1]
[/usr/share/request-tracker3.4/lib/RT/ScripCondition_Overlay.pm:219]
[/usr/share/request-tracker3.4/lib/RT/Scrip_Overlay.pm:438]
[/usr/share/request-tracker3.4/lib/RT/Scrips_Overlay.pm:228]
[/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:160]
[/usr/share/request-tracker3.4/lib/RT/Record.pm:1373]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3439]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3176]
[(eval 579):14]
[/usr/share/request-tracker3.4/lib/RT/ScripAction_Overlay.pm:220]
[/usr/share/request-tracker3.4/lib/RT/Scrip_Overlay.pm:477]
[/usr/share/request-tracker3.4/lib/RT/Scrips_Overlay.pm:235]
[/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:160]
[/usr/share/request-tracker3.4/lib/RT/Record.pm:1373]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3439]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3176]
[/usr/share/request-tracker3.4/html/Approvals/index.html:80]
[/usr/share/request-tracker3.4/html/autohandler:215]
(/usr/share/request-tracker3.4/lib/RT/Condition/UserDefined.pm:67)
[Thu Apr 27 06:24:25 2006] [debug]: About to commit scrips for
transaction #7809
(/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:167)

I also appear to be getting this notice when other tickets are being
created in other queues as I just noticed that it appeared in the log
when some created a ticket in the support queue.

I am thinking that it is something to do with IsApplicable but not
quite sure that is supposed to apply given that the code is being
executed through the Userdefinied.pm condition. If anyone can shed any
light or point me to some more info on this subject I would
appreciate it, have looked on the Wiki and also in the RT Essentials
book but couldn’t find much that helped me figure out why this error
was happening although it helped me figure out how to to get this far.

cheers
John

John Habermann
The Wilderness Society
www.wilderness.org.au


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com

We’re hiring! Come hack Perl for Best Practical: http://bestpractical.com/about/jobs.html

John Habermann
The Wilderness Society

Create transactions may have no attachments too. You have to check
that the object is defined:

my $attachment = $self->TransactionObj->Attachments->First;
return 0 unless $attachment;On 4/28/06, john habermann john.habermann@wilderness.org.au wrote:

Hi Todd

On 4/28/06, Todd Chapman todd@chaka.net wrote:

Your scrip runs on every transaction that happens on the
ticket. Not every transaction has attachments. You need
to see if it is a Create transaction before checking
headers.

return 0 if $self->TransactionObj->Type eq ‘Create’;

Thank you very much for your help. I now have the following code and
it works great.

return 0 if $self->TransactionObj->Type ne ‘Create’;
my $header = $self->TransactionObj->Attachments->First->Headers();
$header =~ s/\n\s+/ /g;
my $formname = ‘’;
if ($header =~ /^RT-Formname: (.*?)$/m) {
$formname = $1;
$RT::Logger->debug(“the headers are $formname”);
}
else {
$RT::Logger->debug(“didn’t match”);
}
$RT::Logger->debug(“the formname is $formname”);
return undef unless ($formname eq “Database”);
return 1;

cheers
john

-Todd

On Thu, Apr 27, 2006 at 05:05:03PM +1000, john habermann wrote:

Hi

I have a queue called database which had been setup to recieve emails
from a form. I had set up a simple approval process by following the
wiki so I created an approv-database queue and then have a template in
the database queue that creates a Ticket in the approv-database queue
when a ticket is created in the database queue.

The usage of the database queue has expanded beyond just accepting
emails from the form and other tickets that are created in it don’t
need to be approved so I have been trying to change the database queue
so that only tickets created by the form emails will trigger an
approval.

To do this I have the form inserting a header “RT-Formname” and I then
changed the “Request Approval” scip in the database queue so it used a
custom condition rather than the default “On create” condition. This
is what I have in my Custom Condition:

my $header = $self->TransactionObj->Attachments->First->Headers();
$header =~ s/\n\s+/ /g;
my $formname = ‘’;
if ($header =~ /^Formname: (.*?)$/m) {
$formname = $1;
$RT::Logger->debug(“the headers are $formname”);
}
else {
$RT::Logger->debug(“didn’t match”);
}
$RT::Logger->debug(“the formname is $formname”);
return undef unless ($formname eq “Database”);
return 1;

This appears to work fine as if I create a ticket through the web
interface in RT then the Request Approval scrip is not called and a
ticket is created that doesn’t trigger the approval process. When I
send in a email from the form the approval process is triggered as
before so a ticket is created that is pending approval but even though
it appears to work fine and the tickets are created I am getting this
in the rt.log file:


[Thu Apr 27 06:24:25 2006] [error]: Scrip 16 IsApplicable failed:
Can’t call method “Headers” on an undefined value at (eval 602) line
1.

Stack:
[(eval 602):1]
[/usr/share/request-tracker3.4/lib/RT/ScripCondition_Overlay.pm:219]
[/usr/share/request-tracker3.4/lib/RT/Scrip_Overlay.pm:438]
[/usr/share/request-tracker3.4/lib/RT/Scrips_Overlay.pm:228]
[/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:160]
[/usr/share/request-tracker3.4/lib/RT/Record.pm:1373]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3439]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3176]
[(eval 579):14]
[/usr/share/request-tracker3.4/lib/RT/ScripAction_Overlay.pm:220]
[/usr/share/request-tracker3.4/lib/RT/Scrip_Overlay.pm:477]
[/usr/share/request-tracker3.4/lib/RT/Scrips_Overlay.pm:235]
[/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:160]
[/usr/share/request-tracker3.4/lib/RT/Record.pm:1373]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3439]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3176]
[/usr/share/request-tracker3.4/html/Approvals/index.html:80]
[/usr/share/request-tracker3.4/html/autohandler:215]
(/usr/share/request-tracker3.4/lib/RT/Condition/UserDefined.pm:67)
[Thu Apr 27 06:24:25 2006] [debug]: About to commit scrips for
transaction #7809
(/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:167)

I also appear to be getting this notice when other tickets are being
created in other queues as I just noticed that it appeared in the log
when some created a ticket in the support queue.

I am thinking that it is something to do with IsApplicable but not
quite sure that is supposed to apply given that the code is being
executed through the Userdefinied.pm condition. If anyone can shed any
light or point me to some more info on this subject I would
appreciate it, have looked on the Wiki and also in the RT Essentials
book but couldn’t find much that helped me figure out why this error
was happening although it helped me figure out how to to get this far.

cheers
John

John Habermann
The Wilderness Society
www.wilderness.org.au


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com

We’re hiring! Come hack Perl for Best Practical: http://bestpractical.com/about/jobs.html


John Habermann
The Wilderness Society
www.wilderness.org.au


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com

We’re hiring! Come hack Perl for Best Practical: http://bestpractical.com/about/jobs.html

Best regards, Ruslan.

Cheers Ruslan

I have fixed it so am now using the following:

return 0 if $self->TransactionObj->Type ne ‘Create’;
my $attachment = $self->TransactionObj->Attachments->First;
return 0 unless $attachment;
my $header = $attachment->Headers();
$header =~ s/\n\s+/ /g;
my $formname = ‘’;
if ($header =~ /^RT-Formname: (.*?)$/m) {
$formname = $1;
$RT::Logger->debug(“the headers are $formname”);
}
else {
$RT::Logger->debug(“didn’t match”);
}
$RT::Logger->debug(“the formname is $formname”);
return undef unless ($formname eq “Database”);
return 1;

Thanks very much for you help

cheers
JohnOn 4/28/06, Ruslan Zakirov ruslan.zakirov@gmail.com wrote:

Create transactions may have no attachments too. You have to check
that the object is defined:

my $attachment = $self->TransactionObj->Attachments->First;
return 0 unless $attachment;

On 4/28/06, john habermann john.habermann@wilderness.org.au wrote:

Hi Todd

On 4/28/06, Todd Chapman todd@chaka.net wrote:

Your scrip runs on every transaction that happens on the
ticket. Not every transaction has attachments. You need
to see if it is a Create transaction before checking
headers.

return 0 if $self->TransactionObj->Type eq ‘Create’;

Thank you very much for your help. I now have the following code and
it works great.

return 0 if $self->TransactionObj->Type ne ‘Create’;
my $header = $self->TransactionObj->Attachments->First->Headers();
$header =~ s/\n\s+/ /g;
my $formname = ‘’;
if ($header =~ /^RT-Formname: (.*?)$/m) {
$formname = $1;
$RT::Logger->debug(“the headers are $formname”);
}
else {
$RT::Logger->debug(“didn’t match”);
}
$RT::Logger->debug(“the formname is $formname”);
return undef unless ($formname eq “Database”);
return 1;

cheers
john

-Todd

On Thu, Apr 27, 2006 at 05:05:03PM +1000, john habermann wrote:

Hi

I have a queue called database which had been setup to recieve emails
from a form. I had set up a simple approval process by following the
wiki so I created an approv-database queue and then have a template in
the database queue that creates a Ticket in the approv-database queue
when a ticket is created in the database queue.

The usage of the database queue has expanded beyond just accepting
emails from the form and other tickets that are created in it don’t
need to be approved so I have been trying to change the database queue
so that only tickets created by the form emails will trigger an
approval.

To do this I have the form inserting a header “RT-Formname” and I then
changed the “Request Approval” scip in the database queue so it used a
custom condition rather than the default “On create” condition. This
is what I have in my Custom Condition:

my $header = $self->TransactionObj->Attachments->First->Headers();
$header =~ s/\n\s+/ /g;
my $formname = ‘’;
if ($header =~ /^Formname: (.*?)$/m) {
$formname = $1;
$RT::Logger->debug(“the headers are $formname”);
}
else {
$RT::Logger->debug(“didn’t match”);
}
$RT::Logger->debug(“the formname is $formname”);
return undef unless ($formname eq “Database”);
return 1;

This appears to work fine as if I create a ticket through the web
interface in RT then the Request Approval scrip is not called and a
ticket is created that doesn’t trigger the approval process. When I
send in a email from the form the approval process is triggered as
before so a ticket is created that is pending approval but even though
it appears to work fine and the tickets are created I am getting this
in the rt.log file:


[Thu Apr 27 06:24:25 2006] [error]: Scrip 16 IsApplicable failed:
Can’t call method “Headers” on an undefined value at (eval 602) line
1.

Stack:
[(eval 602):1]
[/usr/share/request-tracker3.4/lib/RT/ScripCondition_Overlay.pm:219]
[/usr/share/request-tracker3.4/lib/RT/Scrip_Overlay.pm:438]
[/usr/share/request-tracker3.4/lib/RT/Scrips_Overlay.pm:228]
[/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:160]
[/usr/share/request-tracker3.4/lib/RT/Record.pm:1373]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3439]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3176]
[(eval 579):14]
[/usr/share/request-tracker3.4/lib/RT/ScripAction_Overlay.pm:220]
[/usr/share/request-tracker3.4/lib/RT/Scrip_Overlay.pm:477]
[/usr/share/request-tracker3.4/lib/RT/Scrips_Overlay.pm:235]
[/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:160]
[/usr/share/request-tracker3.4/lib/RT/Record.pm:1373]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3439]
[/usr/share/request-tracker3.4/lib/RT/Ticket_Overlay.pm:3176]
[/usr/share/request-tracker3.4/html/Approvals/index.html:80]
[/usr/share/request-tracker3.4/html/autohandler:215]
(/usr/share/request-tracker3.4/lib/RT/Condition/UserDefined.pm:67)
[Thu Apr 27 06:24:25 2006] [debug]: About to commit scrips for
transaction #7809
(/usr/share/request-tracker3.4/lib/RT/Transaction_Overlay.pm:167)

I also appear to be getting this notice when other tickets are being
created in other queues as I just noticed that it appeared in the log
when some created a ticket in the support queue.

I am thinking that it is something to do with IsApplicable but not
quite sure that is supposed to apply given that the code is being
executed through the Userdefinied.pm condition. If anyone can shed any
light or point me to some more info on this subject I would
appreciate it, have looked on the Wiki and also in the RT Essentials
book but couldn’t find much that helped me figure out why this error
was happening although it helped me figure out how to to get this far.

cheers
John

John Habermann
The Wilderness Society
www.wilderness.org.au


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com

We’re hiring! Come hack Perl for Best Practical: http://bestpractical.com/about/jobs.html


John Habermann
The Wilderness Society
www.wilderness.org.au


http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media.
Buy a copy at http://rtbook.bestpractical.com

We’re hiring! Come hack Perl for Best Practical: http://bestpractical.com/about/jobs.html


Best regards, Ruslan.

John Habermann
The Wilderness Society