[rt-users] Append Data to CustomFields[SOLVED]

TheHoboKing demon_eyes_kyoms at hotmail.com
Wed Jun 6 10:37:03 EDT 2012


Hi Mike,

Thank you for the code and explanation, this is exactly what I needed.

The code works like a charm, just had to correct some minor typos in some
variable calls.

I'm glad to say I was terribly wrong when I said it was no longer possible
to obtain the value from Transaction CFs via scrips.

Thank you all for your time and help



Michael Coakley wrote:
> 
> I didn't see anyone else reply so here is some template code (very wordy
> to be clear) that should get you going...
> 
> Custom Condition
>  
> # Get the transaction object
> my $TransObj = $self->TransactionObj;
>  
> # Make sure the transaction is a Comment before we check anything else
> unless ($TransObj->Type eq "Comment") {
>   return 0;
> }
>  
> # Now get the custom field value for our transaction
> my $TransCustomFieldName = "TransCustomFieldName";
> my $TransCustomFieldValue =
> $transObj->FirstCustomFieldValue($TransCustomFieldName);
>  
> # Log it for debugging
> # NOTE: I always log with the queue name because I may use the same type
> of routine in multiple queues
> $RT::Logger->debug("$self->TicketObj->QueueObj->Name:
> $TransCustomFieldName = $TransCustomFieldValue");
>  
> # return 0 unless our value changed
> return 0 unless ($TransCustomFieldValue != 0);
>                                                
> 1;
> 
> Preparation Code
> 
> 1;
> 
> Clean-up Code
> 
> my $TicketObj = $self->TicketObj;
> my $TransObj = $self->TransactionObj;
> my $QueueObj = $TicketObj->QueueObj;
> 
> # First get the current value of our Ticket Custom field we want to update
> my $TransCustomFieldName = "TransCustomFIeldName";
> my $TransCustomFIeldValue =
> $TransObj->FirstCustomFieldValue($TransCustomFieldName);
> # Make sure to normalize your Transaction Custom Field Value if needed (in
> this case it isn't but if you are processing multiple Transaction Custom
> Fields it may be)
> # if (!$TransCustomFieldValue) { $TransCustomFieldValue = 0; }
> 
> # This code looks different because it is pulled right from the Wiki with
> some simple modifications. Best to keep the same structure for
> maintainability.
> my $CFName = "TicketCustomFIeldName";
> my $CFValue = $TicketObj->FirstCustomFieldValue($CFName);
> # Make sure you normalize your Ticket Custom Field Value too
> if (!$CFValue) { $CFValue = 0; }
>  
> # Or whatever you want to do with it...
> $CFValue += $TransCustomFieldValue;
>  
> my $DefaultValue = '0';
> my $RecTransaction = 1;
> $RT::Logger->debug("$QueueObj->Name: $CFName -> $CFValue");
> 
> my $CFObj = RT::CustomField->new($QueueObj->CurrentUser);
> $CFObj->LoadByNameAndQueue(Name => $CFName, Queue => $QueueObj->id);
> unless ($CFObj->id) {
>     $CFObj->LoadByNameAndQueue(Name => $CFName, Queue => 0);
>     unless ($CFObj->id) {
>         $RT::Logger->debug("$QueueObj->Name: $CFName doesn't exist, Queue
> - " . $QueueObj->Name);
>         return undef;
>     }
> }
> my($result, $msg) = $TicketObj->AddCustomFieldValue(
>                     Field => $CFObj->id,
>                     Value => $CFValue,
>                     RecordTransaction => $RecTransaction
> 	);
> unless ($result) {
>     $RT::Logger->debug("$QueueObj->Name: Couldn't set $CFValue as value
> for CF $CFName : $msg");
>   return undef;
> }
>  
> 1;
>  
> NOTES:
> 
> 1. Make sure you change the TransCustomFieldName variable to your actual
> field name
> 2. You may have to change the check to see if your field value changed.
> For my type of field in this scrip it was simple enough to do the test I'm
> doing. (Also, I'm a Perl newb so don't think this is pretty Perl.)
> 3. Make sure you change the CFName variable to your actual field name
> 4. Make sure you normalize your TicketCustomFieldValue variable just in
> case it hasn't been set yet. Additive values are never fun when you start
> with an unknown
> 5. MUST BE TransactionBatch
> 6. Use at your own peril, I haven't tested this code and it is freely
> given to the public domain as-is, enjoy!
> 
> I hoe that helps.
> 
> Thanks,
> 
> Mike
> 
> On Jun 4, 2012, at 10:42 AM, TheHoboKing wrote:
> 
>> 
>> Hi Thomas,
>> 
>> Yes, I did attempt with TransactionBatch (and Create), the value obtained
>> from the Transaction CF is always ' ' as if it's unable to capture the
>> actual value.
>> 
>> Here's the code I was using, I've tried with different variation but was
>> never able to get the value that was being added in the Trans-CFs.
>> 
>> As a test, I was simply trying to get the value from the Trans-CFs and
>> right
>> it back in a Ticket CF.
>> 
>> --------------
>> Custom Condition:
>> return 1;
>> 
>> Custom action preparation code:
>> return 1;
>> 
>> Custom action cleanup code:
>> my $ticket = $self->TicketObj;
>> my $cf_obj = RT::CustomField->new( $RT::SystemUser );
>> 
>> my $cf_name = "ValueFrom_tr-cf";
>> my $trcf_name = "tr-cf";
>> 
>> my $trcf_value = "1";
>> 
>> #Read and store the value of the Transaction CF "tr-cf"
>> 
>> $cf_obj->LoadByName(Name=>$trcf_name);
>> $trcf_value = $ticket->FirstCustomFieldValue($trcf_name);
>> 
>> #Add the value to the Ticket CF
>> $cf_obj->LoadByName(Name=>$cf_name);
>> $ticket->AddCustomFieldValue(Field=>$cf_obj, Value=>$trcf_value,
>> RecordTransaction=>0);
>> 
>> return 1;
>> 
>> ---------------------------------------------------
>> 
>> Any ideas on what could be going wrong?
>> 
>> Thank you
>> 
>> 
>> Thomas Sibley wrote:
>>> 
>>> On 06/04/2012 09:46 AM, TheHoboKing wrote:
>>>> After some research and trial and errors I finally realise extracting
>>>> values
>>>> from Transaction CFs is no longer possible.
>>>> 
>>>> The feature has been removed since RT 3.6 and doesn't seem to have been
>>>> successfully implemented again. Mike seems to be the last reported
>>>> successful extraction of CFs and such. (If anyone has a patch or
>>>> successful
>>>> scrip/solution to extract values from Trans-CFs, please by all means
>>>> come
>>>> forward and tell me how wrong I am)
>>> 
>>> You can absolutely read back out values from Transaction CFs.
>>> Unfortunately we can't guess what you're doing or why it's not working
>>> without seeing the code.  I suspect in your attempts you didn't follow
>>> Mike's warning about needing to use the TransactionBatch stage for your
>>> scrips.
>>> 
>>> Thomas
>>> 
>>> 
>> -- 
>> View this message in context:
>> http://old.nabble.com/Append-Data-to-CustomFields-tp33920988p33958371.html
>> Sent from the Request Tracker - User mailing list archive at Nabble.com.
>> 
> 
> 
> 
-- 
View this message in context: http://old.nabble.com/Append-Data-to-CustomFields-tp33920988p33970403.html
Sent from the Request Tracker - User mailing list archive at Nabble.com.




More information about the rt-users mailing list