Re: [rt-users] scrip condition on transaction custom field

2016-02-17 Thread Sebastian Juenemann

Hi everyone,

OK - meanwhile i got this issue solved but still have some questions, 
especially about some strange behavior of RT.


The following scenario: I'm resolving a ticket via GUI and setting the 
custom field for this transaction ("FeedbackOnResolve") to "yes". If I 
also leaving a comment (i.e. writing something in the text field) this 
triggers two transactions: first the comment transaction, then the 
status change transaction 9from open to resolved).


1) it should be better commented that $self->TransactionObj in a batch 
scrip (condition) returns the _first_ _triggering/applicable_ 
transaction object. This can get really awkward in the scrip if you 
write several tests and when not everything fits, the the first 
_applicable_ transaction might not be really the _first_ transaction in 
this cascade. So there is limited reliance on this behavior.


2) transaction custom fields (CFS) are somehow attached to 'comment' (or 
correspondence) transactions only. So in order get TCFs working you are 
forced to fill out the text form in order to actually trigger a 
comment/correspondence transaction to which this CF will be attached. 
This also means that if you're searching for specific values on TCFs you 
need to parse through the appropriate transaction type, i.e. 
comment/correspondence.


Or is there another way to trigger TCFs in scrips for other transaction 
types as e.g. 'Status' or 'Set'?  And why do TCFs are not handled like 
ticket CFs (i.e. triggering an own 'CustomField' typed transaction)?


The whole documentary is more or less completely written for ticket CFs, 
which are handled totally different.


3) if anyone is interested the solution for my problem is the following:

my $resolved = 0;
my $feedback = 0;
my $trans_list = $self->TicketObj->TransactionBatch;
my $trans;
foreach my $trans (@$trans_list) {
my $type = $trans->Type;
my $field = $trans->Field;
if ($type eq "Status" || ( $type eq "Set" && $field eq "Status")){
   $resolved = 1 if ($trans->NewValue eq "resolved");
} elsif ($type eq "Comment") {
my $cfvs = $trans->CustomFieldValues("FeedbackOnResolve");
if (my $value = $cfvs->Next()) {
$feedback = 1 if ($value->Content() eq "yes");
}
}
}
return 0 unless $resolved && $feedback;
return 1;

- Sebastian


On 02/17/2016 08:36 AM, Sebastian Juenemann wrote:

Hi everyone,

I have an issue which i can't get resolved without further help by
anyone more experienced RT user/admin.

I want to have a special trigger which can be activated during the
resolving stage on a ticket in order to decide whether an appropriate
message will be sent to the ticket requester or not. Feedback mails to
requester are generally deactivated. The idea is that RT users then can
resolve tickets as normal but if they want that a feedback mail shall be
send they can set the transaction CF to 'yes' and do so explicitly.

For this, I've crated a transaction custom field 'feedback', enabled it
for my queue, with selectable values 'yes' and 'no'. I've then created a
batch scrip (from what I've learned it must be batch if transaction CFs
shall be parsed) which checks for two conditions: 1) ticket was resolved
and 2) transaction CF 'feedback' is set to 'yes'. The first part works
perfectly fine, but i don't get the second part working. I've tried
dozens of different ways two access transactions CFs, but it just wont
work.


So here are some methods which i tried unsuccessfully so far:

1)
return 0 unless $self->TicketObj->FirstCustomFieldValue('feedback') eq
'yes'; # only on ticket CFs?
2)
my $cfs=$txn->CustomFieldValues;
my $cf = $cfs->LimitToCustomField('feedback');
my $response = $cf->Next;
return 0 unless $response->Content eq 'yes';
3)
my $cfvs=$txn->CustomFieldValues;
my $feedback = 0;
while (my $cfv = $cfvs->Next)
{
  my $cfObj = $cfv->CustomFieldObj;
  my $cf_name = $cfObj->Name;
  my $cfv_name = $cfv->Name;
  if ($cf_name eq 'feedback' && $cfv_name eq 'yes') {
 $feedback = 1;
  }
}
return 0 if $feedback == 0;

So my question is: how do i access the transaction CF of my last
transaction (i.e. a resolve transaction = comment + status change to
resolve) in a scrip condition?

I found the documentation on this specific topic (transaction CFs, not
tiecket CFs) quite incomplete and hope some of you will be able to help me.

Many thank sin advance!

- Sebastian





--
Sebastian J√ľnemann
CeBiTec - Center for Biotechnology
Bielefeld University, D-33594 Bielefeld, Germany
Office: V6-147 -- Phone: +49-(0)521-106-4827
eMail: juene...@cebitec.uni-bielefeld.de
-
RT 4.4 and RTIR Training Sessions 
(http://bestpractical.com/services/training.html)
* Hamburg Germany - March 14 & 15, 2016
* Washington DC - May 23 & 24, 2016

[rt-users] scrip condition on transaction custom field

2016-02-16 Thread Sebastian Juenemann

Hi everyone,

I have an issue which i can't get resolved without further help by 
anyone more experienced RT user/admin.


I want to have a special trigger which can be activated during the 
resolving stage on a ticket in order to decide whether an appropriate 
message will be sent to the ticket requester or not. Feedback mails to 
requester are generally deactivated. The idea is that RT users then can 
resolve tickets as normal but if they want that a feedback mail shall be 
send they can set the transaction CF to 'yes' and do so explicitly.


For this, I've crated a transaction custom field 'feedback', enabled it 
for my queue, with selectable values 'yes' and 'no'. I've then created a 
batch scrip (from what I've learned it must be batch if transaction CFs 
shall be parsed) which checks for two conditions: 1) ticket was resolved 
and 2) transaction CF 'feedback' is set to 'yes'. The first part works 
perfectly fine, but i don't get the second part working. I've tried 
dozens of different ways two access transactions CFs, but it just wont 
work.



So here are some methods which i tried unsuccessfully so far:

1)
return 0 unless $self->TicketObj->FirstCustomFieldValue('feedback') eq 
'yes'; # only on ticket CFs?

2)
my $cfs=$txn->CustomFieldValues;
my $cf = $cfs->LimitToCustomField('feedback');
my $response = $cf->Next;
return 0 unless $response->Content eq 'yes';
3)
my $cfvs=$txn->CustomFieldValues;
my $feedback = 0;
while (my $cfv = $cfvs->Next)
{
 my $cfObj = $cfv->CustomFieldObj;
 my $cf_name = $cfObj->Name;
 my $cfv_name = $cfv->Name;
 if ($cf_name eq 'feedback' && $cfv_name eq 'yes') {
$feedback = 1;
 }
}
return 0 if $feedback == 0;

So my question is: how do i access the transaction CF of my last 
transaction (i.e. a resolve transaction = comment + status change to 
resolve) in a scrip condition?


I found the documentation on this specific topic (transaction CFs, not 
tiecket CFs) quite incomplete and hope some of you will be able to help me.


Many thank sin advance!

- Sebastian


--
Sebastian J√ľnemann
CeBiTec - Center for Biotechnology
Bielefeld University, D-33594 Bielefeld, Germany
Office: V6-147 -- Phone: +49-(0)521-106-4827
eMail: juene...@cebitec.uni-bielefeld.de
-
RT 4.4 and RTIR Training Sessions 
(http://bestpractical.com/services/training.html)
* Hamburg Germany - March 14 & 15, 2016
* Washington DC - May 23 & 24, 2016