AddCustomFieldsValuesToMail

From Request Tracker Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This Template part adds ticket custom field values to mail.

{
 # old RT versions may be need:
 # my $CustomFields = $Ticket->QueueObj->CustomFields();
 my $CustomFields = $Ticket->QueueObj->TicketCustomFields();
 while (my $CustomField = $CustomFields->Next()) {
   my $CustomFieldValues=$Ticket->CustomFieldValues($CustomField->Id);
   $OUT .= $CustomField->Name;
   if ($CustomFieldValues->Count) {
     my $spacer;
      if ( $CustomField->Type ne 'FreeformMultiple' and
          $CustomField->Type ne 'SelectMultiple' ) {
       $spacer = " " x (20 - length($CustomField->Name));
     } else {
       $spacer = "\n";
     }
     $OUT .= ":" . $spacer;
   } else {
     $OUT .= ":\n";
     next;
   }
   while (my $CustomFieldValue = $CustomFieldValues->Next) {
     $OUT .= " " if ( $CustomField->Type eq 'FreeformMultiple' or
                       $CustomField->Type eq 'SelectMultiple' );
     $OUT .= $CustomFieldValue->Content . "\n";
   }
   $OUT .= "\n" if ( $CustomField->Type eq 'FreeformMultiple' or
                       $CustomField->Type eq 'SelectMultiple' );
 }
 $OUT;
}


This works for Ticket Level custom fields. This will not list Transaction Custom Fields.

In order to access Transaction Custom fields e. g. in a Template, it is necessary to enable the TransactionBatch stage. If this is not enabled, a script might trigger a Template at a point in time when the custom field is not yet available because it had not been processed yet.

The following worked for me (Debian, rt 3.4.1, to include a Transaction custom field in a template that is triggered by a scrip running on "TransactionBatch".

my $OwnCustomFieldValue;
my $ViValue;
my $TicketObj = $Ticket;
my $OwnObjectCustomFields = $TicketObj->Transactions;

$OwnContent = $Transaction;
$OwnCustomFieldValue=$OwnContent->CustomFieldValues;

while (my $SingleOwnCustomFieldValue = $OwnCustomFieldValue->Next)
{
     $ViValue=$SingleOwnCustomFieldValue->Content;
     $RT::Logger->debug( ">  CustomField: $ViValue  <<<<<<<< \n\n" );
}


I assume that it is also possible to access custom-field name via CustomField->Name and the custom-field type via CustomField->Type.