定制模块子面板

问题描述

| 所以我有两个自定义模块。它们是一对多的。 模块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模块通过子面板快速创建按钮添加新要求时,记录确实创建了,但是没有字段\“ \'rhs_key \'=> \'lm_object \的实现数据' \“ 被建造。因此自然不会显示子面板上的新记录。 我缺少什么? 谢谢!     

解决方法

对不起,我的回复很晚,但是我可以解释一下: 您没有做错任何事,这是我在Sugar中发现的错误。 通过快速创建创建的记录与您正在使用的活动记录相关的原因是,因为快速创建按钮具有隐藏的形式,其当前记录的ID映射到子面板模块用于该关系的字段。但是,当您创建自定义模块时,快速创建将假定related字段为\“ moduleA_moduleB_id \”,这是Sugar中的库存模块。但是,当您在Sugar中创建自定义模块时,它将截断所有关系字段(在Bean和数据库中),以使它们不超过25个字符。 简而言之,快速创建代码假定将两者链接在一起的字段具有与库存模块关系相同的约定,这是错误的。 在不修复代码(或等待Sugar的错误修复)的情况下避免此问题的唯一方法是,确保自定义模块的名称少于10个字符,包括放在前面的密钥(因此实际上它应该是5-6个字符的顶部)。 我已经在自己安装的Sugar中更新了代码,并报告了该错误。它可能会在下次更新中修复。 我将说明如何在您的股票实例中修复它,但恐怕只会使事情更加混乱。但是,如果您仍然需要解决此问题,请告诉我,我将发布实际代码。