Refactoring our modules code for SS3 I stumbled over a new behavior. The method getCMSFields() of a DataObject must have a TabSet called 'Root' if there is a GridField in the tabs. The class GridFieldDetailForm.php has the following code on line 372ff:
if($form->Fields()->hasTabset()) {
$form->Fields()->findOrMakeTab('Root')->setTemplate('CMSTabSet');
$form->addExtraClass('cms-tabset');
}
Actually we have some child classes of DataObject that do not inherit their fields from DataObject (parent::getCMSFields()). I think we did this for performance reasons.
My question now: Is it a convention to have a TabSet called 'Root' in the FieldList returned by getCMSFields()?