[rt-users] absence planning[Spam-Wahrscheinlichkeit=46]

Alex Peters alex at peters.net
Fri Aug 1 03:50:23 EDT 2014


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 at 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 at peters.net]
> *Gesendet:* Donnerstag, 31. Juli 2014 14:27
> *An:* Eierschmalz, Bernhard
> *Cc:* rt-users at 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 at 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 at peters.net]
> *Gesendet:* Donnerstag, 31. Juli 2014 13:26
>
>
> *An:* Eierschmalz, Bernhard; rt-users at 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 at 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
>
> <empty>
>
> 1
>
> No
>
> Absent no
>
> <empty>
>
>
>
>
>
>
>
> 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 at peters.net]
> *Gesendet:* Donnerstag, 31. Juli 2014 12:28
> *An:* Eierschmalz, Bernhard; rt-users at 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 at 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 at peters.net]
> *Gesendet:* Freitag, 25. Juli 2014 01:53
>
>
> *An:* Eierschmalz, Bernhard
> *Cc:* rt-users at 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 at 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 at peters.net]
> *Gesendet:* Donnerstag, 24. Juli 2014 16:11
> *An:* Eierschmalz, Bernhard
> *Cc:* rt-users at 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 at 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 at peters.net]
> *Gesendet:* Donnerstag, 24. Juli 2014 15:33
> *An:* Eierschmalz, Bernhard
> *Cc:* rt-users at 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 at 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
>
> 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,
>
>
> --
> RT Training - Boston, September 9-10
> http://bestpractical.com/training
>
>
>
>
>
>
>
>
>
>
> --
> RT Training - Boston, September 9-10
> http://bestpractical.com/training
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bestpractical.com/pipermail/rt-users/attachments/20140801/22176bde/attachment.htm>


More information about the rt-users mailing list