Absence planning

Hello,

I want to build some absence planning into our RT to avoid that absent users receive messages and nobody sees this message. What I’m planning is the following:

  1.  Creating a user's custom field "absent" which is yes or no
    
  2.  When a user is absence, this user changes this field to yes, when he's back he changes back to no
    
  3.  When the status of one ticket with absent owner (where custom field value is "yes") changes, the owner show be set to nobody (so the other colleagues can find the ticket
    

so I planned to set up this with a Scrip.
Scrip Action is easy. It’s
$self->TicketObj->SetOwner ( $RT::Nobody->id );
Return 1;

What I’m having problems with is Scrip Condition.

For the first step, I tried to run the scrip on any update, so I only have to check whether the absent-CF is yes or no
I tried the following line:
return 1 if $self->TicketObj->Owner->Customfields->CustomFieldValue(‘absent’) eq “yes”;

but this isn’t working. What is wrong?

A second step will be to check, what exactly was changed (and only run if status was changed).
I think I can do this with
return 0 unless $self->TransactionObj->Type eq “Status”

in front of the other code; am I right?

Best regards,

Bernhard,

You can probably use:

$self->TicketObj->OwnerObj->FirstCustomFieldValue(‘absent’)

to access the value of the owner’s “absent” custom field.

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?On 24 July 2014 23:14, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello,

I want to build some absence planning into our RT to avoid that absent
users receive messages and nobody sees this message. What I’m planning is
the following:

  1.  Creating a user’s custom field “absent” which is yes or no
    
  2.  When a user is absence, this user changes this field to yes, when
    

he’s back he changes back to no

  1.  When the status of one ticket with absent owner (where custom
    

field value is “yes”) changes, the owner show be set to nobody (so the
other colleagues can find the ticket

so I planned to set up this with a Scrip.

Scrip Action is easy. It’s

$self->TicketObj->SetOwner ( $RT::Nobody->id );

Return 1;

What I’m having problems with is Scrip Condition.

For the first step, I tried to run the scrip on any update, so I only have
to check whether the absent-CF is yes or no

I tried the following line:

return 1 if
$self->TicketObj->Owner->Customfields->CustomFieldValue(‘absent’) eq “yes”;

but this isn’t working. What is wrong?

A second step will be to check, what exactly was changed (and only run if
status was changed).

I think I can do this with

*return 0 unless $self->TransactionObj->Type eq “Status” *

in front of the other code; am I right?

Best regards,

Bernhard,


RT Training - Boston, September 9-10
Training — Best Practical Solutions

There might be API inconsistency across RT versions. What version of RT
are you using? Also, are you receiving any errors in RT’s logs when that
code runs?

If I understand you correctly, the “on correspond, open inactive tickets”
scrip is interfering with your ability to test whether an absent owner’s
ticket was previously marked as stalled or resolved rather than open. If
you move your scrip to execute before the scrip that opens inactive tickets
on correspond, the interference should no longer occur.On 24 July 2014 23:56, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

So now I try:

return 1 if $self->TicketObj->FirstCustomFieldValue(‘absent’) eq “yes”;

But it still doesn’t work. What is wrong?

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?

A user usually changes all his tickets to “stalled” or “resolved” when
he’s absent. When the user leaves tickets on “open” during his absence that
means, nobody else can finish this ticket, only he can do it (e.g. on
larger projects)

So when one of the stalled or resolved tickets receive an answer, the
status is changed and with my scrip the user will be nobody.

Best regards,

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 24. Juli 2014 15:33
An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] absence planning

You can probably use:

$self->TicketObj->OwnerObj->FirstCustomFieldValue(‘absent’)

to access the value of the owner’s “absent” custom field.

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?

On 24 July 2014 23:14, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello,

I want to build some absence planning into our RT to avoid that absent
users receive messages and nobody sees this message. What I’m planning is
the following:

  1.  Creating a user’s custom field “absent” which is yes or no
    
  2.  When a user is absence, this user changes this field to yes, when
    

he’s back he changes back to no

  1.  When the status of one ticket with absent owner (where custom
    

field value is “yes”) changes, the owner show be set to nobody (so the
other colleagues can find the ticket

so I planned to set up this with a Scrip.

Scrip Action is easy. It’s

$self->TicketObj->SetOwner ( $RT::Nobody->id );

Return 1;

What I’m having problems with is Scrip Condition.

For the first step, I tried to run the scrip on any update, so I only have
to check whether the absent-CF is yes or no

I tried the following line:

return 1 if
$self->TicketObj->Owner->Customfields->CustomFieldValue(‘absent’) eq “yes”;

but this isn’t working. What is wrong?

A second step will be to check, what exactly was changed (and only run if
status was changed).

I think I can do this with

*return 0 unless $self->TransactionObj->Type eq “Status” *

in front of the other code; am I right?

Best regards,

Bernhard,


RT Training - Boston, September 9-10
Training — Best Practical Solutions

I feel that you are overcomplicating your scrip by testing for a status
change (which is actually a side effect of another scrip), because your
primary goal is to perform this action when correspondence occurs.

If I were in your position, I would have two scrips in place:

  1. On (correspond AND owner is absent AND ticket is stalled/resolved), set
    owner to Nobody. Runs first.

  2. On correspond, open inactive tickets. Runs second.

Actually, in your position I would probably assign an additional
“Exclusive” custom field to tickets that when set to true, indicates that
the ticket can only be worked on by the current owner. Then I would change
Scrip 1’s condition to “on (correspond AND owner absent AND ticket not
exclusive).” That way, the status isn’t used to convey that meaning.

Custom fields can be loaded by name, so that shouldn’t be failing for you.
Is “absent” the exact name of the field? What is the exact code that you
are using?On 25/07/2014 12:44 am, “Eierschmalz, Bernhard” < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello Alex,

I user RT 4.2.6

In my error logs I find the following:

[3066] [Thu Jul 24 14:16:20 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[3066] [Thu Jul 24 14:16:20 2014] [warning]: Use of uninitialized value
in string eq at (eval 896) line 1. ((eval 896):1)

[3066] [Thu Jul 24 14:16:23 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[3066] [Thu Jul 24 14:16:23 2014] [warning]: Use of uninitialized value
in string eq at (eval 905) line 1. ((eval 905):1)

What does this mean? Should I identify the CF by ID?

If I understand you correctly, the “on correspond, open inactive tickets”
scrip is interfering with your ability to test whether an absent owner’s
ticket was previously marked as stalled or resolved rather than open. If
you move your scrip to execute before the scrip that opens inactive tickets
on correspond, the interference should no longer occur.

Not exactly. Let me explain once again.

When a user is absent, he maybe has open tickets, and for sure has many
resolved and stalled tickets.

The open tickets are tickets, only this user can resolve, and this user
decides to resolve this ticket after his absence. (e.g. because this is a
large project)

When there is any transaction (e.g. an answer from client or somebody) the
owner of this ticket should not be changed (because the owner will resolve
it after his absence)

on open tickets the “on correspond, open inactive tickets” isn’t
triggered, so the status doesn’t change, and my scrip doesn’t run

Now over to the resolved and stalled tickets: when there is any
transaction on these tickets, user should be set to “nobody” to inform the
other colleagues about this tickets.

On the transaction, firstly the “on correspond, open inactive tickets” is
triggered and changes the state from stalled or resolved to “open”

Now my scrip triggers this status change and changes the user to “nobody”.

I hope you can see my idea more clear now.

best regards

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 24. Juli 2014 16:11
An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] absence planning

There might be API inconsistency across RT versions. What version of RT
are you using? Also, are you receiving any errors in RT’s logs when that
code runs?

If I understand you correctly, the “on correspond, open inactive tickets”
scrip is interfering with your ability to test whether an absent owner’s
ticket was previously marked as stalled or resolved rather than open. If
you move your scrip to execute before the scrip that opens inactive tickets
on correspond, the interference should no longer occur.

On 24 July 2014 23:56, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

So now I try:

return 1 if $self->TicketObj->FirstCustomFieldValue(‘absent’) eq “yes”;

But it still doesn’t work. What is wrong?

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?

A user usually changes all his tickets to “stalled” or “resolved” when
he’s absent. When the user leaves tickets on “open” during his absence that
means, nobody else can finish this ticket, only he can do it (e.g. on
larger projects)

So when one of the stalled or resolved tickets receive an answer, the
status is changed and with my scrip the user will be nobody.

Best regards,

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 24. Juli 2014 15:33
An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] absence planning

You can probably use:

$self->TicketObj->OwnerObj->FirstCustomFieldValue(‘absent’)

to access the value of the owner’s “absent” custom field.

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?

On 24 July 2014 23:14, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello,

I want to build some absence planning into our RT to avoid that absent
users receive messages and nobody sees this message. What I’m planning is
the following:

  1.  Creating a user’s custom field “absent” which is yes or no
    
  2.  When a user is absence, this user changes this field to yes, when
    

he’s back he changes back to no

  1.  When the status of one ticket with absent owner (where custom
    

field value is “yes”) changes, the owner show be set to nobody (so the
other colleagues can find the ticket

so I planned to set up this with a Scrip.

Scrip Action is easy. It’s

$self->TicketObj->SetOwner ( $RT::Nobody->id );

Return 1;

What I’m having problems with is Scrip Condition.

For the first step, I tried to run the scrip on any update, so I only have
to check whether the absent-CF is yes or no

I tried the following line:

return 1 if
$self->TicketObj->Owner->Customfields->CustomFieldValue(‘absent’) eq “yes”;

but this isn’t working. What is wrong?

A second step will be to check, what exactly was changed (and only run if
status was changed).

I think I can do this with

*return 0 unless $self->TransactionObj->Type eq “Status” *

in front of the other code; am I right?

Best regards,

Bernhard,


RT Training - Boston, September 9-10
Training — Best Practical Solutions

The uninitialized value warnings can be solved by changing the test line:

my $CFval = $self->TicketObj->FirstCustomFieldValue(27);
return 1 if defined $CFval and $CFval eq ‘yes’;

since when the custom field is not set, $CFval will be undefined.

It seems that either your custom field isn’t named precisely “absent”, or
perhaps you are running an older version of RT which doesn’t support
loading custom fields by name. If using the ID (27) works for you, it is
probably best to just use that for now.On 31 July 2014 19:50, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello Alex,

your idea with 2 scrips running independent of each other sounds good – I
will try this.

But first, I still have the problem by loading the CF.

I tried around a little bit – but no solution. I changed my Condition to
the following:

my $CFval = $self->TicketObj->FirstCustomFieldValue(27);

return 1 if $CFval eq ‘yes’;

I receive the following failure:

[12166] [Thu Jul 31 09:37:56 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 807) line 2. ((eval 807):2)

[12166] [Thu Jul 31 09:37:58 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 816) line 2. ((eval 816):2)

27 is the ID of my Custom field. When I change to
FirstCustomFieldValue(‘absent’) I receive the following failure message:

[12166] [Thu Jul 31 09:49:00 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[12166] [Thu Jul 31 09:49:00 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 829) line 2. ((eval 829):2)

[12166] [Thu Jul 31 09:49:06 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[12166] [Thu Jul 31 09:49:06 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 838) line 2. ((eval 838):2)

What should I do now?

best Regards,

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Freitag, 25. Juli 2014 01:53

An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: AW: [rt-users] absence planning

I feel that you are overcomplicating your scrip by testing for a status
change (which is actually a side effect of another scrip), because your
primary goal is to perform this action when correspondence occurs.

If I were in your position, I would have two scrips in place:

  1. On (correspond AND owner is absent AND ticket is stalled/resolved),
    set owner to Nobody. Runs first.

  2. On correspond, open inactive tickets. Runs second.

Actually, in your position I would probably assign an additional
“Exclusive” custom field to tickets that when set to true, indicates that
the ticket can only be worked on by the current owner. Then I would change
Scrip 1’s condition to “on (correspond AND owner absent AND ticket not
exclusive).” That way, the status isn’t used to convey that meaning.

Custom fields can be loaded by name, so that shouldn’t be failing for
you. Is “absent” the exact name of the field? What is the exact code that
you are using?

On 25/07/2014 12:44 am, “Eierschmalz, Bernhard” < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello Alex,

I user RT 4.2.6

In my error logs I find the following:

[3066] [Thu Jul 24 14:16:20 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[3066] [Thu Jul 24 14:16:20 2014] [warning]: Use of uninitialized value
in string eq at (eval 896) line 1. ((eval 896):1)

[3066] [Thu Jul 24 14:16:23 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[3066] [Thu Jul 24 14:16:23 2014] [warning]: Use of uninitialized value
in string eq at (eval 905) line 1. ((eval 905):1)

What does this mean? Should I identify the CF by ID?

If I understand you correctly, the “on correspond, open inactive tickets”
scrip is interfering with your ability to test whether an absent owner’s
ticket was previously marked as stalled or resolved rather than open. If
you move your scrip to execute before the scrip that opens inactive tickets
on correspond, the interference should no longer occur.

Not exactly. Let me explain once again.

When a user is absent, he maybe has open tickets, and for sure has many
resolved and stalled tickets.

The open tickets are tickets, only this user can resolve, and this user
decides to resolve this ticket after his absence. (e.g. because this is a
large project)

When there is any transaction (e.g. an answer from client or somebody) the
owner of this ticket should not be changed (because the owner will resolve
it after his absence)

on open tickets the “on correspond, open inactive tickets” isn’t
triggered, so the status doesn’t change, and my scrip doesn’t run

Now over to the resolved and stalled tickets: when there is any
transaction on these tickets, user should be set to “nobody” to inform the
other colleagues about this tickets.

On the transaction, firstly the “on correspond, open inactive tickets” is
triggered and changes the state from stalled or resolved to “open”

Now my scrip triggers this status change and changes the user to “nobody”.

I hope you can see my idea more clear now.

best regards

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 24. Juli 2014 16:11
An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] absence planning

There might be API inconsistency across RT versions. What version of RT
are you using? Also, are you receiving any errors in RT’s logs when that
code runs?

If I understand you correctly, the “on correspond, open inactive tickets”
scrip is interfering with your ability to test whether an absent owner’s
ticket was previously marked as stalled or resolved rather than open. If
you move your scrip to execute before the scrip that opens inactive tickets
on correspond, the interference should no longer occur.

On 24 July 2014 23:56, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

So now I try:

return 1 if $self->TicketObj->FirstCustomFieldValue(‘absent’) eq “yes”;

But it still doesn’t work. What is wrong?

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?

A user usually changes all his tickets to “stalled” or “resolved” when
he’s absent. When the user leaves tickets on “open” during his absence that
means, nobody else can finish this ticket, only he can do it (e.g. on
larger projects)

So when one of the stalled or resolved tickets receive an answer, the
status is changed and with my scrip the user will be nobody.

Best regards,

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 24. Juli 2014 15:33
An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] absence planning

You can probably use:

$self->TicketObj->OwnerObj->FirstCustomFieldValue(‘absent’)

to access the value of the owner’s “absent” custom field.

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?

On 24 July 2014 23:14, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello,

I want to build some absence planning into our RT to avoid that absent
users receive messages and nobody sees this message. What I’m planning is
the following:

  1.  Creating a user’s custom field “absent” which is yes or no
    
  2.  When a user is absence, this user changes this field to yes, when
    

he’s back he changes back to no

  1.  When the status of one ticket with absent owner (where custom
    

field value is “yes”) changes, the owner show be set to nobody (so the
other colleagues can find the ticket

so I planned to set up this with a Scrip.

Scrip Action is easy. It’s

$self->TicketObj->SetOwner ( $RT::Nobody->id );

Return 1;

What I’m having problems with is Scrip Condition.

For the first step, I tried to run the scrip on any update, so I only have
to check whether the absent-CF is yes or no

I tried the following line:

return 1 if
$self->TicketObj->Owner->Customfields->CustomFieldValue(‘absent’) eq “yes”;

but this isn’t working. What is wrong?

A second step will be to check, what exactly was changed (and only run if
status was changed).

I think I can do this with

*return 0 unless $self->TransactionObj->Type eq “Status” *

in front of the other code; am I right?

Best regards,

Bernhard,


RT Training - Boston, September 9-10
Training — Best Practical Solutions

I believe that the “Absent” custom field belongs to users rather than
tickets. If that is correct, your code should read as follows:

my $CFval = $self->TicketObj->OwnerObj->FirstCustomFieldValue(27);
return 1 if defined $CFval and $CFval eq ‘Yes’;

Note that values are case-sensitive, so a capital Y is required. Does this
help?

(P.S. Please reply-all to ensure that the list remains informed of this
discussion.)On 31 July 2014 21:04, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hallo Alex,

If I understand correctly you mean when the Custom Field is not set, my
$CFval will be undefined?

But the custom field for my testuser (who is owner of my test ticket) is
set to ‘no’

Could it be that the type of the custom field matters? I have selected
“choose one value”. My values are:

Sort

Name

Description

Category

0

Yes

Absent yes

1

No

Absent no

It seems that either your custom field isn’t named precisely “absent”, or
perhaps you are running an older version of RT which doesn’t support
loading custom fields by name. If using the ID (27) works for you, it is
probably best to just use that for now.

It is named absent, and I user RT 4.2.6 – but I think anyway it’s better
to use the ID.

Best regards

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 31. Juli 2014 12:28
An: Eierschmalz, Bernhard; rt-users@lists.bestpractical.com

Betreff: Re: AW: [rt-users] absence planning

The uninitialized value warnings can be solved by changing the test line:

my $CFval = $self->TicketObj->FirstCustomFieldValue(27);

return 1 if defined $CFval and $CFval eq ‘yes’;

since when the custom field is not set, $CFval will be undefined.

It seems that either your custom field isn’t named precisely “absent”, or
perhaps you are running an older version of RT which doesn’t support
loading custom fields by name. If using the ID (27) works for you, it is
probably best to just use that for now.

On 31 July 2014 19:50, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello Alex,

your idea with 2 scrips running independent of each other sounds good – I
will try this.

But first, I still have the problem by loading the CF.

I tried around a little bit – but no solution. I changed my Condition to
the following:

my $CFval = $self->TicketObj->FirstCustomFieldValue(27);

return 1 if $CFval eq ‘yes’;

I receive the following failure:

[12166] [Thu Jul 31 09:37:56 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 807) line 2. ((eval 807):2)

[12166] [Thu Jul 31 09:37:58 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 816) line 2. ((eval 816):2)

27 is the ID of my Custom field. When I change to
FirstCustomFieldValue(‘absent’) I receive the following failure message:

[12166] [Thu Jul 31 09:49:00 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[12166] [Thu Jul 31 09:49:00 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 829) line 2. ((eval 829):2)

[12166] [Thu Jul 31 09:49:06 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[12166] [Thu Jul 31 09:49:06 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 838) line 2. ((eval 838):2)

What should I do now?

best Regards,

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Freitag, 25. Juli 2014 01:53

An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com

Betreff: Re: AW: [rt-users] absence planning

I feel that you are overcomplicating your scrip by testing for a status
change (which is actually a side effect of another scrip), because your
primary goal is to perform this action when correspondence occurs.

If I were in your position, I would have two scrips in place:

  1. On (correspond AND owner is absent AND ticket is stalled/resolved),
    set owner to Nobody. Runs first.

  2. On correspond, open inactive tickets. Runs second.

Actually, in your position I would probably assign an additional
“Exclusive” custom field to tickets that when set to true, indicates that
the ticket can only be worked on by the current owner. Then I would change
Scrip 1’s condition to “on (correspond AND owner absent AND ticket not
exclusive).” That way, the status isn’t used to convey that meaning.

Custom fields can be loaded by name, so that shouldn’t be failing for
you. Is “absent” the exact name of the field? What is the exact code that
you are using?

On 25/07/2014 12:44 am, “Eierschmalz, Bernhard” < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello Alex,

I user RT 4.2.6

In my error logs I find the following:

[3066] [Thu Jul 24 14:16:20 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[3066] [Thu Jul 24 14:16:20 2014] [warning]: Use of uninitialized value
in string eq at (eval 896) line 1. ((eval 896):1)

[3066] [Thu Jul 24 14:16:23 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[3066] [Thu Jul 24 14:16:23 2014] [warning]: Use of uninitialized value
in string eq at (eval 905) line 1. ((eval 905):1)

What does this mean? Should I identify the CF by ID?

If I understand you correctly, the “on correspond, open inactive tickets”
scrip is interfering with your ability to test whether an absent owner’s
ticket was previously marked as stalled or resolved rather than open. If
you move your scrip to execute before the scrip that opens inactive tickets
on correspond, the interference should no longer occur.

Not exactly. Let me explain once again.

When a user is absent, he maybe has open tickets, and for sure has many
resolved and stalled tickets.

The open tickets are tickets, only this user can resolve, and this user
decides to resolve this ticket after his absence. (e.g. because this is a
large project)

When there is any transaction (e.g. an answer from client or somebody) the
owner of this ticket should not be changed (because the owner will resolve
it after his absence)

on open tickets the “on correspond, open inactive tickets” isn’t
triggered, so the status doesn’t change, and my scrip doesn’t run

Now over to the resolved and stalled tickets: when there is any
transaction on these tickets, user should be set to “nobody” to inform the
other colleagues about this tickets.

On the transaction, firstly the “on correspond, open inactive tickets” is
triggered and changes the state from stalled or resolved to “open”

Now my scrip triggers this status change and changes the user to “nobody”.

I hope you can see my idea more clear now.

best regards

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 24. Juli 2014 16:11
An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] absence planning

There might be API inconsistency across RT versions. What version of RT
are you using? Also, are you receiving any errors in RT’s logs when that
code runs?

If I understand you correctly, the “on correspond, open inactive tickets”
scrip is interfering with your ability to test whether an absent owner’s
ticket was previously marked as stalled or resolved rather than open. If
you move your scrip to execute before the scrip that opens inactive tickets
on correspond, the interference should no longer occur.

On 24 July 2014 23:56, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

So now I try:

return 1 if $self->TicketObj->FirstCustomFieldValue(‘absent’) eq “yes”;

But it still doesn’t work. What is wrong?

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?

A user usually changes all his tickets to “stalled” or “resolved” when
he’s absent. When the user leaves tickets on “open” during his absence that
means, nobody else can finish this ticket, only he can do it (e.g. on
larger projects)

So when one of the stalled or resolved tickets receive an answer, the
status is changed and with my scrip the user will be nobody.

Best regards,

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 24. Juli 2014 15:33
An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] absence planning

You can probably use:

$self->TicketObj->OwnerObj->FirstCustomFieldValue(‘absent’)

to access the value of the owner’s “absent” custom field.

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?

On 24 July 2014 23:14, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello,

I want to build some absence planning into our RT to avoid that absent
users receive messages and nobody sees this message. What I’m planning is
the following:

  1.  Creating a user’s custom field “absent” which is yes or no
    
  2.  When a user is absence, this user changes this field to yes, when
    

he’s back he changes back to no

  1.  When the status of one ticket with absent owner (where custom
    

field value is “yes”) changes, the owner show be set to nobody (so the
other colleagues can find the ticket

so I planned to set up this with a Scrip.

Scrip Action is easy. It’s

$self->TicketObj->SetOwner ( $RT::Nobody->id );

Return 1;

What I’m having problems with is Scrip Condition.

For the first step, I tried to run the scrip on any update, so I only have
to check whether the absent-CF is yes or no

I tried the following line:

return 1 if
$self->TicketObj->Owner->Customfields->CustomFieldValue(‘absent’) eq “yes”;

but this isn’t working. What is wrong?

A second step will be to check, what exactly was changed (and only run if
status was changed).

I think I can do this with

*return 0 unless $self->TransactionObj->Type eq “Status” *

in front of the other code; am I right?

Best regards,

Bernhard,


RT Training - Boston, September 9-10
Training — Best Practical Solutions

Hi Alex,

Yes, it works now! Great!

Now the second step – to check the state.

I think it should be OK when I change my condition to:
return 0 if $self->Status eq ‘open’;
my $CFval = $self->TicketObj->OwnerObj->FirstCustomFieldValue(27);
return 1 if defined $CFval and $CFval eq ‘yes’;

right?

How do I manage to run this scrip before “on correspond open tickets” scrip?

Best Regards
BernhardVon: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 31. Juli 2014 13:26
An: Eierschmalz, Bernhard; rt-users@lists.bestpractical.com
Betreff: Re: AW: [rt-users] absence planning

I believe that the “Absent” custom field belongs to users rather than tickets. If that is correct, your code should read as follows:

my $CFval = $self->TicketObj->OwnerObj->FirstCustomFieldValue(27);
return 1 if defined $CFval and $CFval eq ‘Yes’;

Note that values are case-sensitive, so a capital Y is required. Does this help?

(P.S. Please reply-all to ensure that the list remains informed of this discussion.)

Since you only want to run this scrip when correspondence occurs on a
stalled/resolved ticket, and the owner is absent, the following condition
should work:

is this correspondence?

return if $self->TransactionObj->Type ne ‘Correspond’;

is the ticket stalled/resolved?

my $status = $self->TicketObj->Status;
return if $status ne ‘stalled’ and $status ne ‘resolved’;

is the owner absent?

my $absent = $self->TicketObj->OwnerObj->FirstCustomFieldValue(27);
return if not defined $absent or $absent eq ‘No’;

all criteria apply

return 1;

Go to Admin > Global > Scrips as a super user and use the Up/Down controls
to ensure that your custom scrip runs before the On Correspond Open Tickets
scrip.On 31 July 2014 21:56, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hi Alex,

Yes, it works now! Great!

Now the second step – to check the state.

I think it should be OK when I change my condition to:

return 0 if $self->Status eq ‘open’;

my $CFval = $self->TicketObj->OwnerObj->FirstCustomFieldValue(27);

return 1 if defined $CFval and $CFval eq ‘yes’;

right?

How do I manage to run this scrip before “on correspond open tickets”
scrip?

Best Regards

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 31. Juli 2014 13:26

An: Eierschmalz, Bernhard; rt-users@lists.bestpractical.com
Betreff: Re: AW: [rt-users] absence planning

I believe that the “Absent” custom field belongs to users rather than
tickets. If that is correct, your code should read as follows:

my $CFval = $self->TicketObj->OwnerObj->FirstCustomFieldValue(27);
return 1 if defined $CFval and $CFval eq ‘Yes’;

Note that values are case-sensitive, so a capital Y is required. Does
this help?

(P.S. Please reply-all to ensure that the list remains informed of this
discussion.)

On 31 July 2014 21:04, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hallo Alex,

If I understand correctly you mean when the Custom Field is not set, my
$CFval will be undefined?

But the custom field for my testuser (who is owner of my test ticket) is
set to ‘no’

Could it be that the type of the custom field matters? I have selected
“choose one value”. My values are:

Sort

Name

Description

Category

0

Yes

Absent yes

1

No

Absent no

It seems that either your custom field isn’t named precisely “absent”, or
perhaps you are running an older version of RT which doesn’t support
loading custom fields by name. If using the ID (27) works for you, it is
probably best to just use that for now.

It is named absent, and I user RT 4.2.6 – but I think anyway it’s better
to use the ID.

Best regards

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 31. Juli 2014 12:28
An: Eierschmalz, Bernhard; rt-users@lists.bestpractical.com

Betreff: Re: AW: [rt-users] absence planning

The uninitialized value warnings can be solved by changing the test line:

my $CFval = $self->TicketObj->FirstCustomFieldValue(27);

return 1 if defined $CFval and $CFval eq ‘yes’;

since when the custom field is not set, $CFval will be undefined.

It seems that either your custom field isn’t named precisely “absent”, or
perhaps you are running an older version of RT which doesn’t support
loading custom fields by name. If using the ID (27) works for you, it is
probably best to just use that for now.

On 31 July 2014 19:50, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello Alex,

your idea with 2 scrips running independent of each other sounds good – I
will try this.

But first, I still have the problem by loading the CF.

I tried around a little bit – but no solution. I changed my Condition to
the following:

my $CFval = $self->TicketObj->FirstCustomFieldValue(27);

return 1 if $CFval eq ‘yes’;

I receive the following failure:

[12166] [Thu Jul 31 09:37:56 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 807) line 2. ((eval 807):2)

[12166] [Thu Jul 31 09:37:58 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 816) line 2. ((eval 816):2)

27 is the ID of my Custom field. When I change to
FirstCustomFieldValue(‘absent’) I receive the following failure message:

[12166] [Thu Jul 31 09:49:00 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[12166] [Thu Jul 31 09:49:00 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 829) line 2. ((eval 829):2)

[12166] [Thu Jul 31 09:49:06 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[12166] [Thu Jul 31 09:49:06 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 838) line 2. ((eval 838):2)

What should I do now?

best Regards,

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Freitag, 25. Juli 2014 01:53

An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com

Betreff: Re: AW: [rt-users] absence planning

I feel that you are overcomplicating your scrip by testing for a status
change (which is actually a side effect of another scrip), because your
primary goal is to perform this action when correspondence occurs.

If I were in your position, I would have two scrips in place:

  1. On (correspond AND owner is absent AND ticket is stalled/resolved),
    set owner to Nobody. Runs first.

  2. On correspond, open inactive tickets. Runs second.

Actually, in your position I would probably assign an additional
“Exclusive” custom field to tickets that when set to true, indicates that
the ticket can only be worked on by the current owner. Then I would change
Scrip 1’s condition to “on (correspond AND owner absent AND ticket not
exclusive).” That way, the status isn’t used to convey that meaning.

Custom fields can be loaded by name, so that shouldn’t be failing for
you. Is “absent” the exact name of the field? What is the exact code that
you are using?

On 25/07/2014 12:44 am, “Eierschmalz, Bernhard” < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello Alex,

I user RT 4.2.6

In my error logs I find the following:

[3066] [Thu Jul 24 14:16:20 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[3066] [Thu Jul 24 14:16:20 2014] [warning]: Use of uninitialized value
in string eq at (eval 896) line 1. ((eval 896):1)

[3066] [Thu Jul 24 14:16:23 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[3066] [Thu Jul 24 14:16:23 2014] [warning]: Use of uninitialized value
in string eq at (eval 905) line 1. ((eval 905):1)

What does this mean? Should I identify the CF by ID?

If I understand you correctly, the “on correspond, open inactive tickets”
scrip is interfering with your ability to test whether an absent owner’s
ticket was previously marked as stalled or resolved rather than open. If
you move your scrip to execute before the scrip that opens inactive tickets
on correspond, the interference should no longer occur.

Not exactly. Let me explain once again.

When a user is absent, he maybe has open tickets, and for sure has many
resolved and stalled tickets.

The open tickets are tickets, only this user can resolve, and this user
decides to resolve this ticket after his absence. (e.g. because this is a
large project)

When there is any transaction (e.g. an answer from client or somebody) the
owner of this ticket should not be changed (because the owner will resolve
it after his absence)

on open tickets the “on correspond, open inactive tickets” isn’t
triggered, so the status doesn’t change, and my scrip doesn’t run

Now over to the resolved and stalled tickets: when there is any
transaction on these tickets, user should be set to “nobody” to inform the
other colleagues about this tickets.

On the transaction, firstly the “on correspond, open inactive tickets” is
triggered and changes the state from stalled or resolved to “open”

Now my scrip triggers this status change and changes the user to “nobody”.

I hope you can see my idea more clear now.

best regards

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 24. Juli 2014 16:11
An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] absence planning

There might be API inconsistency across RT versions. What version of RT
are you using? Also, are you receiving any errors in RT’s logs when that
code runs?

If I understand you correctly, the “on correspond, open inactive tickets”
scrip is interfering with your ability to test whether an absent owner’s
ticket was previously marked as stalled or resolved rather than open. If
you move your scrip to execute before the scrip that opens inactive tickets
on correspond, the interference should no longer occur.

On 24 July 2014 23:56, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

So now I try:

return 1 if $self->TicketObj->FirstCustomFieldValue(‘absent’) eq “yes”;

But it still doesn’t work. What is wrong?

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?

A user usually changes all his tickets to “stalled” or “resolved” when
he’s absent. When the user leaves tickets on “open” during his absence that
means, nobody else can finish this ticket, only he can do it (e.g. on
larger projects)

So when one of the stalled or resolved tickets receive an answer, the
status is changed and with my scrip the user will be nobody.

Best regards,

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 24. Juli 2014 15:33
An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] absence planning

You can probably use:

$self->TicketObj->OwnerObj->FirstCustomFieldValue(‘absent’)

to access the value of the owner’s “absent” custom field.

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?

On 24 July 2014 23:14, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello,

I want to build some absence planning into our RT to avoid that absent
users receive messages and nobody sees this message. What I’m planning is
the following:

  1.  Creating a user’s custom field “absent” which is yes or no
    
  2.  When a user is absence, this user changes this field to yes, when
    

he’s back he changes back to no

  1.  When the status of one ticket with absent owner (where custom
    

field value is “yes”) changes, the owner show be set to nobody (so the
other colleagues can find the ticket

so I planned to set up this with a Scrip.

Scrip Action is easy. It’s

$self->TicketObj->SetOwner ( $RT::Nobody->id );

Return 1;

What I’m having problems with is Scrip Condition.

For the first step, I tried to run the scrip on any update, so I only have
to check whether the absent-CF is yes or no

I tried the following line:

return 1 if
$self->TicketObj->Owner->Customfields->CustomFieldValue(‘absent’) eq “yes”;

but this isn’t working. What is wrong?

A second step will be to check, what exactly was changed (and only run if
status was changed).

I think I can do this with

*return 0 unless $self->TransactionObj->Type eq “Status” *

in front of the other code; am I right?

Best regards,

Bernhard,


RT Training - Boston, September 9-10
Training — Best Practical Solutions


RT Training - Boston, September 9-10
Training — Best Practical Solutions

Running the scrip without checking for “is correspondence” should be fine.

Another option is to automatically unset the user’s Absent value when they
next log in.

To do this, create
local/html/Callbacks/OnLoginMakeUserNotAbsent/autohandler/SuccessfulLogin
with the following line:

% $session{‘CurrentUser’}->UserObj->AddCustomFieldValue( Field => 27, Value
=> ‘No’ );

then delete the contents of var/mason/data/obj and restart your web server.On 1 August 2014 16:39, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hi Alex,

great, now it works!

Do you think it’s a problem to run the scrip on any change? Without the
check “is correspondence”?

Background: I think when one user is back from holiday and forgets to set
himself to “not absent”, he will recognize this faster when I run the scrip
on any change.

Br

bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 31. Juli 2014 14:27
An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] absence planning[Spam-Wahrscheinlichkeit=46]

Since you only want to run this scrip when correspondence occurs on a
stalled/resolved ticket, and the owner is absent, the following condition
should work:

is this correspondence?

return if $self->TransactionObj->Type ne ‘Correspond’;

is the ticket stalled/resolved?

my $status = $self->TicketObj->Status;

return if $status ne ‘stalled’ and $status ne ‘resolved’;

is the owner absent?

my $absent = $self->TicketObj->OwnerObj->FirstCustomFieldValue(27);

return if not defined $absent or $absent eq ‘No’;

all criteria apply

return 1;

Go to Admin > Global > Scrips as a super user and use the Up/Down controls
to ensure that your custom scrip runs before the On Correspond Open Tickets
scrip.

On 31 July 2014 21:56, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hi Alex,

Yes, it works now! Great!

Now the second step – to check the state.

I think it should be OK when I change my condition to:

return 0 if $self->Status eq ‘open’;

my $CFval = $self->TicketObj->OwnerObj->FirstCustomFieldValue(27);

return 1 if defined $CFval and $CFval eq ‘yes’;

right?

How do I manage to run this scrip before “on correspond open tickets”
scrip?

Best Regards

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 31. Juli 2014 13:26

An: Eierschmalz, Bernhard; rt-users@lists.bestpractical.com
Betreff: Re: AW: [rt-users] absence planning

I believe that the “Absent” custom field belongs to users rather than
tickets. If that is correct, your code should read as follows:

my $CFval = $self->TicketObj->OwnerObj->FirstCustomFieldValue(27);
return 1 if defined $CFval and $CFval eq ‘Yes’;

Note that values are case-sensitive, so a capital Y is required. Does
this help?

(P.S. Please reply-all to ensure that the list remains informed of this
discussion.)

On 31 July 2014 21:04, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hallo Alex,

If I understand correctly you mean when the Custom Field is not set, my
$CFval will be undefined?

But the custom field for my testuser (who is owner of my test ticket) is
set to ‘no’

Could it be that the type of the custom field matters? I have selected
“choose one value”. My values are:

Sort

Name

Description

Category

0

Yes

Absent yes

1

No

Absent no

It seems that either your custom field isn’t named precisely “absent”, or
perhaps you are running an older version of RT which doesn’t support
loading custom fields by name. If using the ID (27) works for you, it is
probably best to just use that for now.

It is named absent, and I user RT 4.2.6 – but I think anyway it’s better
to use the ID.

Best regards

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 31. Juli 2014 12:28
An: Eierschmalz, Bernhard; rt-users@lists.bestpractical.com

Betreff: Re: AW: [rt-users] absence planning

The uninitialized value warnings can be solved by changing the test line:

my $CFval = $self->TicketObj->FirstCustomFieldValue(27);

return 1 if defined $CFval and $CFval eq ‘yes’;

since when the custom field is not set, $CFval will be undefined.

It seems that either your custom field isn’t named precisely “absent”, or
perhaps you are running an older version of RT which doesn’t support
loading custom fields by name. If using the ID (27) works for you, it is
probably best to just use that for now.

On 31 July 2014 19:50, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello Alex,

your idea with 2 scrips running independent of each other sounds good – I
will try this.

But first, I still have the problem by loading the CF.

I tried around a little bit – but no solution. I changed my Condition to
the following:

my $CFval = $self->TicketObj->FirstCustomFieldValue(27);

return 1 if $CFval eq ‘yes’;

I receive the following failure:

[12166] [Thu Jul 31 09:37:56 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 807) line 2. ((eval 807):2)

[12166] [Thu Jul 31 09:37:58 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 816) line 2. ((eval 816):2)

27 is the ID of my Custom field. When I change to
FirstCustomFieldValue(‘absent’) I receive the following failure message:

[12166] [Thu Jul 31 09:49:00 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[12166] [Thu Jul 31 09:49:00 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 829) line 2. ((eval 829):2)

[12166] [Thu Jul 31 09:49:06 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[12166] [Thu Jul 31 09:49:06 2014] [warning]: Use of uninitialized value
$CFval in string eq at (eval 838) line 2. ((eval 838):2)

What should I do now?

best Regards,

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Freitag, 25. Juli 2014 01:53

An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com

Betreff: Re: AW: [rt-users] absence planning

I feel that you are overcomplicating your scrip by testing for a status
change (which is actually a side effect of another scrip), because your
primary goal is to perform this action when correspondence occurs.

If I were in your position, I would have two scrips in place:

  1. On (correspond AND owner is absent AND ticket is stalled/resolved),
    set owner to Nobody. Runs first.

  2. On correspond, open inactive tickets. Runs second.

Actually, in your position I would probably assign an additional
“Exclusive” custom field to tickets that when set to true, indicates that
the ticket can only be worked on by the current owner. Then I would change
Scrip 1’s condition to “on (correspond AND owner absent AND ticket not
exclusive).” That way, the status isn’t used to convey that meaning.

Custom fields can be loaded by name, so that shouldn’t be failing for
you. Is “absent” the exact name of the field? What is the exact code that
you are using?

On 25/07/2014 12:44 am, “Eierschmalz, Bernhard” < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello Alex,

I user RT 4.2.6

In my error logs I find the following:

[3066] [Thu Jul 24 14:16:20 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[3066] [Thu Jul 24 14:16:20 2014] [warning]: Use of uninitialized value
in string eq at (eval 896) line 1. ((eval 896):1)

[3066] [Thu Jul 24 14:16:23 2014] [warning]: Couldn’t load custom field
by ‘absent’ identifier (/opt/rt4/sbin/…/lib/RT/Record.pm:2231)

[3066] [Thu Jul 24 14:16:23 2014] [warning]: Use of uninitialized value
in string eq at (eval 905) line 1. ((eval 905):1)

What does this mean? Should I identify the CF by ID?

If I understand you correctly, the “on correspond, open inactive tickets”
scrip is interfering with your ability to test whether an absent owner’s
ticket was previously marked as stalled or resolved rather than open. If
you move your scrip to execute before the scrip that opens inactive tickets
on correspond, the interference should no longer occur.

Not exactly. Let me explain once again.

When a user is absent, he maybe has open tickets, and for sure has many
resolved and stalled tickets.

The open tickets are tickets, only this user can resolve, and this user
decides to resolve this ticket after his absence. (e.g. because this is a
large project)

When there is any transaction (e.g. an answer from client or somebody) the
owner of this ticket should not be changed (because the owner will resolve
it after his absence)

on open tickets the “on correspond, open inactive tickets” isn’t
triggered, so the status doesn’t change, and my scrip doesn’t run

Now over to the resolved and stalled tickets: when there is any
transaction on these tickets, user should be set to “nobody” to inform the
other colleagues about this tickets.

On the transaction, firstly the “on correspond, open inactive tickets” is
triggered and changes the state from stalled or resolved to “open”

Now my scrip triggers this status change and changes the user to “nobody”.

I hope you can see my idea more clear now.

best regards

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 24. Juli 2014 16:11
An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] absence planning

There might be API inconsistency across RT versions. What version of RT
are you using? Also, are you receiving any errors in RT’s logs when that
code runs?

If I understand you correctly, the “on correspond, open inactive tickets”
scrip is interfering with your ability to test whether an absent owner’s
ticket was previously marked as stalled or resolved rather than open. If
you move your scrip to execute before the scrip that opens inactive tickets
on correspond, the interference should no longer occur.

On 24 July 2014 23:56, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

So now I try:

return 1 if $self->TicketObj->FirstCustomFieldValue(‘absent’) eq “yes”;

But it still doesn’t work. What is wrong?

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?

A user usually changes all his tickets to “stalled” or “resolved” when
he’s absent. When the user leaves tickets on “open” during his absence that
means, nobody else can finish this ticket, only he can do it (e.g. on
larger projects)

So when one of the stalled or resolved tickets receive an answer, the
status is changed and with my scrip the user will be nobody.

Best regards,

Bernhard

Von: Alex Peters [mailto:alex@peters.net]
Gesendet: Donnerstag, 24. Juli 2014 15:33
An: Eierschmalz, Bernhard
Cc: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] absence planning

You can probably use:

$self->TicketObj->OwnerObj->FirstCustomFieldValue(‘absent’)

to access the value of the owner’s “absent” custom field.

I don’t understand why you are testing for a ticket status change.
Wouldn’t you want the scrip to run only when correspondence occurs?

On 24 July 2014 23:14, Eierschmalz, Bernhard < Bernhard.Eierschmalz@scheppach.com> wrote:

Hello,

I want to build some absence planning into our RT to avoid that absent
users receive messages and nobody sees this message. What I’m planning is
the following:

  1.  Creating a user’s custom field “absent” which is yes or no
    
  2.  When a user is absence, this user changes this field to yes, when
    

he’s back he changes back to no

  1.  When the status of one ticket with absent owner (where custom
    

field value is “yes”) changes, the owner show be set to nobody (so the
other colleagues can find the ticket

so I planned to set up this with a Scrip.

Scrip Action is easy. It’s

$self->TicketObj->SetOwner ( $RT::Nobody->id );

Return 1;

What I’m having problems with is Scrip Condition.

For the first step, I tried to run the scrip on any update, so I only have
to check whether the absent-CF is yes or no

I tried the following line:

return 1 if
$self->TicketObj->Owner->Customfields->CustomFieldValue(‘absent’) eq “yes”;

but this isn’t working. What is wrong?

A second step will be to check, what exactly was changed (and only run if
status was changed).

I think I can do this with

*return 0 unless $self->TransactionObj->Type eq “Status” *

in front of the other code; am I right?

Best regards,

Bernhard,


RT Training - Boston, September 9-10
Training — Best Practical Solutions


RT Training - Boston, September 9-10
Training — Best Practical Solutions