所以我有两个自定义模块。它们是一对多的关系。模块A vardef有:`‘lm_contacts’=>
array(
'name' => 'lm_contacts',
'type' => 'link',
'relationship' => 'lm_contacts_relation',
'source' => 'non-db',
'vname' => 'LBL_LEADS',
),
'relationships' =>
array (
'lm_contacts_relation' =>
array (
'lhs_module' => 'LM_LM_Objektas',
'lhs_table' => 'lm_lm_objektas',
'lhs_key' => 'id',
'rhs_module' => 'LM_LM_contact_person',
'rhs_table' => 'lm_lm_contact_person',
'rhs_key' => 'lm_object ',
'relationship_type' => 'one-to-many',
),
),
模块a有subpaneldef:
$layout_defs['LM_LM_Objektas'] = array(
// list of what Subpanels to show in the DetailView
'subpanel_setup' =>
array(
'lm_contacts' =>
array(
'order' => 10,
'module' => 'LM_LM_contact_person',
'subpanel_name' => 'default',
'sort_order' => 'asc',
//'sort_by' => 'id',
'title_key' => 'LBL_CONTACT_SUBPANEL_TITLE',
'get_subpanel_data' => 'lm_contacts',
'add_subpanel_data' => 'lm_contacts_id',
'top_buttons' =>
array (
0 =>
array (
'widget_class' => 'SubPanelTopButtonQuickCreate',
),
1 =>
array (
'widget_class' => 'SubPanelTopSelectButton',
'mode' => 'MultiSelect',
'popup_module' => 'LM_LM_contact_person',
),
),
),
),
);
现在模块a: lm_objectas确实正确地显示子面板,但是当我尝试通过子面板快速创建按钮向lm_contacts模块添加新的reqord时,确实创建了记录,但没有创建字段“'rhs_key‘=> 'lm_object’”的相关数据。因此,自然不会显示subpanle上的新记录。我错过了什么?谢谢!
发布于 2011-09-09 15:15:27
很抱歉回复晚了,但我可以解释一下:
你没有做错什么,这是我在Sugar中发现的一个bug……
从快速创建创建的记录与您所在的活动记录相关的原因是因为快速创建按钮有一个隐藏表单,其中当前记录的id映射到子面板模块用于该关系的字段。但是,当您创建自定义模块时,快速创建假设relate字段将为"moduleA_moduleB_id",这是用于Sugar中的库存模块的字段。但是,当您在Sugar中创建自定义模块时,它会截断所有关系字段(在Bean和数据库中),以便它们不超过25个字符。
长话短说,快速创建代码假设将两者链接在一起的字段将与股票模块关系具有相同的约定,这是错误的。
在不修复代码(或等待Sugar的bug修复)的情况下避免这种情况的唯一方法是确保您的自定义模块的名称少于10个字符,包括放在前面的密钥(所以实际上应该是5-6个字符)。
我已经更新了我自己安装的Sugar中的代码,并报告了这个错误。它可能会在下一次更新中修复。
我会在你的股票实例中解释如何修复它,但我担心这只会让事情变得更加混乱。但是,如果你仍然需要修复这个问题,请告诉我,我会发布实际的代码。
https://stackoverflow.com/questions/6110680
复制相似问题