<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7652.24">
<TITLE>RE: [rt-users] Not saving custom fields in RTFM upon Articlecreation</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>On Tue, 2007-06-12 at 18:18 -0400, Jeff Platter wrote:<BR>
> So I think I figured out what was going on. I have fixed the problem<BR>
> for my RTFM situation but I need to know if what I did was the right<BR>
> thing or not. So if one of the developers would like to look this over<BR>
> that would be fantastic, and let me know if I broke anything else or<BR>
> not.<BR>
><BR>
> <BR>
><BR>
> I found the problem to be that the format for<BR>
> ProcessObjectCustomFieldUpdates in /rt3/ lib/RT/Interface/Web.pm. The<BR>
> format for the custom object that it is expecting is: # format:<BR>
> Object-<object class>-<object id>-CustomField-<CF id>-<commands><BR>
><BR>
> <BR>
><BR>
> However when you load /rt3/share/html/RTFM/Article/Edit.html for the<BR>
> first time to create an article there is no initial object id. So the<BR>
> field end up being Object-<object class>--CustomField-<CF<BR>
> id>-<commands> with a missing object id section.<BR>
><BR>
> <BR>
><BR>
> When ProcessObjectCustomFieldUpdates runs the first loop:<BR>
><BR>
>     foreach my $arg ( keys %$ARGSRef ) {<BR>
><BR>
>         # format: Object-<object class>-<object id>-CustomField-<CF<BR>
> id>-<commands><BR>
><BR>
>         next unless $arg =~ /^Object-([\w:]+)-(\d*)-CustomField-(\d<BR>
> +)-(.*)$/;<BR>
><BR>
> <BR>
><BR>
>         # For each of those objects, find out what custom fields we<BR>
> want to work with.<BR>
><BR>
>         $custom_fields_to_mod{ $1 }{ $2 || 0 }{ $3 }{ $4 } =<BR>
> $ARGSRef->{ $arg };<BR>
><BR>
>     }<BR>
><BR>
> <BR>
><BR>
> It ends up setting the ID field to 0 cause it doesn’t exist. Then when<BR>
> it loops through the class and id’s later and tries to get the<BR>
> $Object:<BR>
><BR>
> $Object->Load( $id ) unless ($Object->id || 0) == $id;<BR>
><BR>
> <BR>
><BR>
> It resets the object id to the wrong thing because the article has<BR>
> already been created by this point and it has an id but the custom<BR>
> fields don’t associate with that object id<BR>
><BR>
> <BR>
><BR>
> I don’t know if I’m making any sense with this anymore.<BR>
><BR>
> <BR>
><BR>
> Here is what I did to fix the issue:<BR>
><BR>
>     foreach my $arg ( keys %$ARGSRef ) {<BR>
><BR>
>         # format: Object-<object class>-<object id>-CustomField-<CF<BR>
> id>-<commands><BR>
><BR>
>         next unless $arg =~ /^Object-([\w:]+)-(\d*)-CustomField-(\d<BR>
> +)-(.*)$/;<BR>
><BR>
> <BR>
><BR>
>         my $Object = $args{'Object'} if exists $args{'Object'};<BR>
><BR>
>         my $id = $Object->id || 0;<BR>
><BR>
> <BR>
><BR>
>         # For each of those objects, find out what custom fields we<BR>
> want to work with.<BR>
><BR>
>         $custom_fields_to_mod{ $1 }{ $2 || $id }{ $3 }{ $4 } =<BR>
> $ARGSRef->{ $arg };<BR>
><BR>
>     }<BR>
><BR>
> <BR>
><BR>
> I changed the first loop to pull the object if it was passed in and<BR>
> set the id to the object->id or to 0. So it should default back to<BR>
> what it was doing before if no object is currently passed in.<BR>
><BR>
> <BR>
><BR>
> Someone please take the time to read this and let me know if what I<BR>
> did is good or not. If ne1 else is having this issue and needs a patch<BR>
> file I can create one and send / post it somewhere, just lmk.<BR>
><BR>
> <BR>
><BR>
> Thanks for all the help this list has been so far.<BR>
><BR>
> -Jeff<BR>
><BR>
> <BR>
><BR>
> From:rt-users-bounces@lists.bestpractical.com<BR>
> [<A HREF="mailto:rt-users-bounces@lists.bestpractical.com">mailto:rt-users-bounces@lists.bestpractical.com</A>] On Behalf Of Jeff<BR>
> Platter<BR>
> Sent: Tuesday, June 12, 2007 4:36 PM<BR>
> To: rt-users@lists.bestpractical.com<BR>
> Subject: [FILTER] [rt-users] Not saving custom fields in RTFM upon<BR>
> Article creation<BR>
><BR>
><BR>
> <BR>
><BR>
> I’m using RTFM 2.2.0RC5 with RT 3.6.3. I have created a custom field<BR>
> for the body of the article. I have setup all permissions on the<BR>
> custom field and added it to the class that I want it in. When<BR>
> creating a new article it doesn’t save the value of the custom field<BR>
> that I have. I have to go back in to the article and modify the field<BR>
> and then it saves ok.<BR>
><BR>
> <BR>
><BR>
> Is this a bug or is there a setting that I’m missing?<BR>
><BR>
> <BR>
><BR>
> Thanks,<BR>
><BR>
> -Jeff<BR>
<BR>
Hi,<BR>
<BR>
Jeff, thanks very much for this email.  It solved the problem we were<BR>
having with RTFM too when upgrading from 3.4 to 3.6 and trying to<BR>
extract RTFM articles.  Has this been verified as a bug, or is there<BR>
possibly something wrong with my installation?<BR>
<BR>
Currently running RT 3.6.4 and RTFM 2.2.0RC5.  Also had the same problem<BR>
with RT 3.6.4 and RTFM 2.0.4.  With this patch for now it appears that<BR>
all is working flawlessly.<BR>
<BR>
Thanks to all on the list for help and to the devs for a great product<BR>
in RT and RTFM,<BR>
Dave<BR>
<BR>
Patch generated from Jeff's suggestions:<BR>
<BR>
[root@rt Interface]# diff -u Web.pm.20070706 Web.pm<BR>
--- Web.pm.20070706     2007-07-06 09:34:50.000000000 -0400<BR>
+++ Web.pm      2007-07-06 09:36:36.000000000 -0400<BR>
@@ -1198,8 +1198,14 @@<BR>
         # format: Object-<object class>-<object id>-CustomField-<CF<BR>
id>-<commands><BR>
         next unless $arg =~ /^Object-([\w:]+)-(\d*)-CustomField-(\d<BR>
+)-(.*)$/;<BR>
<BR>
+       # added by dbh for rtfm issue<BR>
+       my $Object = $args{'Object'} if exists $args{'Object'};<BR>
+        my $id = $Object->id || 0;<BR>
+<BR>
         # For each of those objects, find out what custom fields we<BR>
want to work with.<BR>
-        $custom_fields_to_mod{ $1 }{ $2 || 0 }{ $3 }{ $4 } =<BR>
$ARGSRef->{ $arg };<BR>
+        #$custom_fields_to_mod{ $1 }{ $2 || 0 }{ $3 }{ $4 } =<BR>
$ARGSRef->{ $arg };<BR>
+        # this line modified by dbh too, for rtfm issue<BR>
+       $custom_fields_to_mod{ $1 }{ $2 || $id }{ $3 }{ $4 } =<BR>
$ARGSRef->{ $arg };<BR>
     }<BR>
<BR>
     # For each of those objects<BR>
<BR>
</FONT>
</P>

</BODY>
</HTML>