Custom fields design doc

Luis Villa louie at ximian.com
Sat May 24 13:37:55 UTC 2003


On Sat, 2003-05-24 at 05:23, Gervase Markham wrote:
> >>I'm having trouble understanding this proposal, because of one big 
> >>question: what's a custom field group?
> > 
> > It's my proposed mechanism for implementing field sharing.  Say a group
> > G contains fields Foo, Bar, and Baz.  Then every project that contains the
> > group G also has fields Foo, Bar, and Baz.  I probably didn't describe the
> > concept in enough detail, but I hoped the editcustomfields.html example page
> > I provided would get the idea across.
> 
> I'm not sure that the groups are really necessary... why not just have a 
> mapping from custom field IDs to product IDs?

Just FWIW, in at least our setup, we have no need for per-product custom
fields, and if there is no way to say 'all products get this field',
it'll be quite inconvenient.

Luis (still wishing he had more time to contribute :/

> The UI would be something like:
> 
> Product: Foo-Bar Product
> 
> Choose the custom fields for this product:
> 
> |------------|
> | SomeField  |
> | OtherField |
> | Priority   |   <- multi-select list box
> | Severity   |
> | Chip Name  |
> |------------|
> 
> This seems, conceptually and in code, the easiest thing.
> 
> >>"display_index" should have the same name as the fields which do the 
> >>same thing in other tables (can't remember what it is offhand.)
> > 
> > Would that be "sortkey"?
> 
> Yep :-)
> 
> >>>cf_selections
> >>>-------------
> >>>
> >>>cf_selection_labels
> >>>-------------------
> > 
> >>Why can these two tables not be combined?
> > 
> > Because then the unset_label column would have to be duplicated.
> 
> E.g. in the cf_selection_labels table, if the label_index was 0, or -1, 
> or whatever special value you want, then that would be the unset_label. 
> But actually, I don't really see the need for an unset_label at all. 
> What's wrong with "the field should be blank if it's not been set".
> 
> >>>The following six tables hold bug activity data.
> > 
> >>Dude, scrap this! Use our current tables for bug activity data. Please! 
> >>:-) Store the name of the field, what it changed from, and what it 
> >>changed to, just like now. That's fine. Really.
> > 
> > I'm reluctant to do this for a few reasons.  First, the more orthogonal
> > the custom fields implementation is to the core, the less chance there
> > is of a buggy interaction between the two.
> 
> The more tested core code the custom fields implementation reuses, the 
> less buggy it will be :-)
> 
> Do not think of custom fields as some sort of side bolt-on that can be 
> unbolted later.
> 
> > Second, queries against bug
> > activity would be complicated by cast functions if everything is stored
> > as a string.  
> 
> I don't quite understand this statement. What problem is is highlighting 
> that we don't currently have anyway?
> 
> > Finally, the current activity table (bugs_activity) logs
> > changes in tinytext columns, which aren't big enough to log changes in
> > long string fields or some multiselect fields.  Even if the columns were
> > widened to the text type, multiselect changes could potentially still be too
> > large for them, as I've described in a previous message.
> 
> The bugs_activity log is for auditing rather than rollback, and so it's 
> not completely essential that it capture all changes, or all parts of a 
> particular change. For example, it doesn't currently capture added 
> comments.
> 
> I agree that this needs discussion, but truncating the stored parts of 
> long string changes or multi-select changes to tinytexts might well be 
> an acceptable solution. Expanding the field size might also be fine.
> 
> >>>ADMINISTRATION
> >>>==============
> >>>Each page contains a single form, which always contains a hidden field
> >>>called "context".
> > 
> >>We call this "action" everywhere else.
> > 
> > "context" is more intuitive to me, but oh well, viva consistency.
> 
> (This assumes, of course, that I understand what this field does. Does 
> it define what action the CGI takes when the form is submitted?)
> 
> >>>Initial page
> >>>------------
> >>>Context:  choose-scope
> >>>Template: template/en/default/custom/choose-scope.html.tmpl
> >>>
> >>>The user may select a scope via either of the following three elements:
> > 
> >>What is a scope?
> > 
> > A project, a group, or the global scope.
> 
> What's a project?
> 
> > As just one example, in theory
> > it's sufficient to copy the "type" column from the custom_fields table
> > into a template-accessible hash, but in writing the template I found
> > that it's clearer to abstract the type information into several distinct
> > members--"is_integer", "is_string", etc.  
> 
> This sort of decision is also implementation, and has no place in a 
> design document either :-) I wouldn't deny that implementing it gives 
> you good ideas about implementation, but if you change the actual 
> _design_ for technical reasons, there's usually something wrong (unless 
> what you wanted is genuinely impossible.)
> 
> Gerv
> 
> 
> ----
> To view or change your list settings, click here:
> <http://bugzilla.org/cgi-bin/mj_wwwusr?user=louie@ximian.com>
> 




More information about the developers mailing list