[Rt-devel] Re: UserDefined scrip action

Ruslan U. Zakirov Ruslan.Zakirov at acronis.com
Thu Dec 9 12:48:31 EST 2004


Jan Okrouhly wrote:
> On Thu, 9 Dec 2004, Ruslan U. Zakirov wrote:
> 
> 
>>Jan Okrouhly wrote:
>>
>>>Hello,
>>>
>>>we use RT 3.2.2 and meet big troubles with custom action scrips - it works
>>>only sometimes (maybe just only once). This example for is i.e. not
>>>working well if used in Scrip for specific Queue.
>>>Is this approach wrong/where is the problem?
>>>I (customer) doesn't want to use additional files like yours good one
>>>Action/NotifyGroup.pm, because the LoadedGroup will change depending on
>>>some ticket info (Customer CustomFields)...
>>
>>Start from http://wiki.bestpractical.com/?Debug
> 
> 
> I used to debug it, but it there had to be some BIG mistake in usage of
> objects or classes, RT 3.2.2, or Perl 5.8.4 used...
> 
> The simple code bellow works sometimes ones, sometimes no. It is not
> deterministic - that's the PROBLEM.
In most cases it's really your problem if something sometimes works and 
sometimes not. You should run apache in -X mode in such case to be 
shure. Read http://wiki.bestpractical.com/?Debug.

Try to use next code in the commit phase:

(delete $self->{'tmpscrip'})->Commit;


PS: IMHO it's first time when somebody tries to put action package into 
custom action code :)

> 
> 
>>Comments about code below.
> 
> 
> Thank You for comments, but PLEASE try this code:
> package RT::Action::tmp;
> use strict;
> use base qw(RT::Action::Notify);
> 
> sub SetRecipients {
>     my $self = shift;
> 
>     @{$self->{'Bcc'}} = ('somebody at test.it.com');
>     return 1
> }
> 
> 1;
> 
> my $tmpscrip;
> $tmpscrip = new RT::Action::tmp(
> TransactionObj => $self->{'TransactionObj'},
> TemplateObj => $self->{'TemplateObj'},
> TicketObj => $self->{'TicketObj'},
> ScripObj => $self->{'ScripObj'},
> Type => $self->{'Type'},
> CurrentUser => $self->CurrentUser,
> );
> 
> $self->{'tmpscrip'} = $tmpscrip;
> 
> my $res=$tmpscrip->Prepare();
> use Data::Dumper;
> $RT::Logger->warning("Res=".$res.Dumper($self->TemplateObj->MIMEObj->head));
> return $res;
> 
> 
>>>Prepare part:
>>>----- cut here -----
>>>package RT::Action::tmp;
>>>use strict;
>>>use vars qw/@ISA/;
>>>require RT::Action::Notify;
>>>@ISA = qw(RT::Action::Notify);
>>>sub SetRecipients {
>>>    my $self = shift;
>>>
>>>    my ($group);
>>>    my @Bcc;
>>>
>>>    $group = new RT::Group($RT::SystemUser);
>>>    $group->LoadUserDefinedGroup("RT AdminCc");
>>>
>>>    unless ($group->Id ) {
>>>        $RT::Logger->warning("Searching Group Global AdminCc failed, can't set recipients!\n");
>>>
>>>        return;
>>>    }
>>>
>>>    my $members = $group->UserMembersObj();
>>>    while (my $member = $members->Next()) {
>>>
>>>        my $user = $member->EmailAddress;
>>>        if ($user && ! ( grep (/^$user$/, @Bcc) ) ) {
>>
>>          if ($user && ! ( grep (/^\Q$user\E$/, @Bcc) ) ) {
>>
>>
>>>                push ( @Bcc, $user );
>>>        }
>>>    }
>>>
>>>    if ($RT::UseFriendlyToLine) {
>>>            push (
>>>                @{$self->{'PseudoTo'}},
>>>                sprintf($RT::FriendlyToLineFormat, "GroupNotify", $self->TicketObj->id),
>>>            );
>>>    }
>>>
>>>    if ($RT::NotifyActor) {
>>
>>unless($RT::NotifyActor) {
>>
>>
>>>        # Do not send notification to the crator of the transaction
>>>        my $creator;
>>>        $creator = $self->TransactionObj->CreatorObj->EmailAddress() if ($self->TransactionObj);
>>>        # override possible 'Bcc'
>>>
>>>        @{$self->{'Bcc'}} = grep (!/^$creator$/, @Bcc);
>>
>>          @{$self->{'Bcc'}} = grep (!/^\Q$creator\E$/, @Bcc);
>>
>>
>>>    } else {
>>>        @{$self->{'Bcc'}} = @Bcc;    }
>>>
>>>    $RT::Logger->warning("GroupNotify Bcc is:".join(',',@{$self->{'Bcc'}})."\n");
>>>
>>>    return (1)
>>>}
>>>
>>>1;
>>>
>>>my $tmpscrip;
>>>$tmpscrip = new RT::Action::tmp(
>>>TransactionObj => $self->{'TransactionObj'},
>>>TemplateObj => $self->{'TemplateObj'},
>>>TicketObj => $self->{'TicketObj'},
>>>ScripObj => $self->{'ScripObj'},
>>>Type => $self->{'Type'},
>>>CurrentUser => $self->CurrentUser,
>>>);
>>>
>>>$self->{'tmpscrip'} = $tmpscrip;
>>>
>>>my $res=$tmpscrip->Prepare();
>>>#use Data::Dumper;
>>>#$RT::Logger->warning(Dumper($self->TemplateObj->MIMEObj->head));
>>>return $res;
>>>----- cut here -----
>>>Commit part is only:
>>>----- cut here -----
>>>$self->{'tmpscrip'}->Commit;
>>>----- cut here -----
>>>
>>>
>>>Jan Okrouhlý
>>>
>>>//------------------------------------\-\-\+\-\-\---okrouhly at civ.zcu.cz-\\
>>>|Laboratory for Computer Science           |    phone: +420 377 632 837  |
>>>|University of West Bohemia                | location: Univerzitni 22    |
>>>|Americka 42, 306 14 Pilsen, Czech Republic|     room: UI402             |
>>>+---------------------------------------73-!-de-OK1INC at OK0PPL.#BOH.CZE.EU+
>>>|  Monday or Tuesday:                      |    phone: +420 224 355 263  |
>>> \\___________________CESNET z.s.p.o.______|_location: Zikova 4, Prague_//
>>>
>>
>>
> 
> 
> Jan Okrouhlý
> 
> //------------------------------------\-\-\+\-\-\---okrouhly at civ.zcu.cz-\\
> |Laboratory for Computer Science           |    phone: +420 377 632 837  |
> |University of West Bohemia                | location: Univerzitni 22    |
> |Americka 42, 306 14 Pilsen, Czech Republic|     room: UI402             |
> +---------------------------------------73-!-de-OK1INC at OK0PPL.#BOH.CZE.EU+
> |  Monday or Tuesday:                      |    phone: +420 224 355 263  |
>  \\___________________CESNET z.s.p.o.______|_location: Zikova 4, Prague_//
> 
> 



More information about the Rt-devel mailing list