如何使用SugarBean将数据插入到模块的子表中

时间:2013-10-21 06:02:12

标签: php sugarcrm sugarbean

如何在模块的子表中插入数据? 例如我有这个模块:MainModule它的表是mainmodule,模块的子表是mainmodule_sub。

所以我想知道如何使用SugarBean将数据插入mainmodule_sub。

更清晰的观点:

问题是大多数模块只有main_tables和_cstm表,并不是所有模块都有一个或两个表;所以我只想知道如何将数据插入到third_table中,例如ProspectLists模块,它有5个表,即prospect_lists,prospect_lists_cstm,prospect_lists_prospect,prospect_lists_campaign等等。

如何将数据插入到prospect_lists_prospect中?

3 个答案:

答案 0 :(得分:1)

我认为您的意思是用于存储通过Studio创建的自定义字段的表格,默认情况下名为<module_name>_cstm。如果是这样,则需要致电$bean->custom_fields->retrieve();以获取访问权限。然后,您可以使用普通$bean->save();来存储其值。

例如:

// Assume custom field 'account_custom_category_c' 
$bean->custom_fields->retrieve();
$bean->account_custom_category_c = 'Very Big Company';
$bean->save();

答案 1 :(得分:0)

我一直在向Stack询问开发人员的问题,截至目前,您要么创建自己的API,要么通过SQL创建自己的本地调用/插入,因为只有main_tables和_cstm表是连接到每个ModuleAPI。

答案 2 :(得分:0)

您可以手动将新字段添加到_cstm表中,因此不必冒丢失现有数据的风险。

使用以下模板通过SQL和PHP添加字段(替换为您需要在其中添加新字段的任何模块:

ALTER TABLE <module>_cstm add COLUMN new_field_c varchar(255) NULL;

最后的_c很重要,_cstm表中的字段应在_c上结束。

然后,导航至

{sugar_base_directory}/custom/Extension/modules/<module>/Ext/Vardefs

在该目录中,创建一个名为sugarfield_new_field_c.php的新文件

在此新创建的文件中,定义要添加的字段的属性(请注意,$ dictionary数组中此处的模块名称应为单数,例如Prospect,而非Prospects):

<?php
$dictionary['<module_singular>']['fields']['new_field_c']['name'] = 'new_field_c';
$dictionary['<module_singular>']['fields']['new_field_c']['vname'] = 'LBL_NEW_FIELD_C';
$dictionary['<module_singular>']['fields']['new_field_c']['type'] = 'varchar';
$dictionary['<module_singular>']['fields']['new_field_c']['enforced'] = '';
$dictionary['<module_singular>']['fields']['new_field_c']['dependency'] = '';
$dictionary['<module_singular>']['fields']['new_field_c']['required'] = false;
$dictionary['<module_singular>']['fields']['new_field_c']['massupdate'] = '0';
$dictionary['<module_singular>']['fields']['new_field_c']['default'] = '';
$dictionary['<module_singular>']['fields']['new_field_c']['no_default'] = false;
$dictionary['<module_singular>']['fields']['new_field_c']['comments'] = 'Example Vardef';
$dictionary['<module_singular>']['fields']['new_field_c']['help'] = '';
$dictionary['<module_singular>']['fields']['new_field_c']['importable'] = 'true';
$dictionary['<module_singular>']['fields']['new_field_c']['duplicate_merge'] = 'disabled';
$dictionary['<module_singular>']['fields']['new_field_c']['duplicate_merge_dom_value'] = 0;
$dictionary['<module_singular>']['fields']['new_field_c']['audited'] = false;
$dictionary['<module_singular>']['fields']['new_field_c']['reportable'] = true;
$dictionary['<module_singular>']['fields']['new_field_c']['unified_search'] = false;
$dictionary['<module_singular>']['fields']['new_field_c']['merge_filter'] = 'disabled';
$dictionary['<module_singular>']['fields']['new_field_c']['calculated'] = false;
$dictionary['<module_singular>']['fields']['new_field_c']['len'] = '255';
$dictionary['<module_singular>']['fields']['new_field_c']['size'] = '20';
$dictionary['<module_singular>']['fields']['new_field_c']['id'] = 'new_field_c';
$dictionary['<module_singular>']['fields']['new_field_c']['custom_module'] = '<module>';
$dictionary['<module_singular>']['fields']['new_field_c']['source'] = 'custom_fields';
?>

然后,在表fields_meta_data中插入一个相应的记录,该记录将触发比较过程,即,使SugarCRM知道此新字段:

INSERT INTO fields_meta_data (id, name, vname, comments, custom_module, type, len, required, deleted, audited, massupdate, duplicate_merge, reportable, importable) VALUES ('<module>new_field_c', 'new_field_c', 'LBL_NEW_FIELD_C', 'Example Vardef', '<module>', 'varchar', 255, 0, 0, 0, 0, 0, 1, 'true');

到位后,进行维修和重建,您的新字段就可以使用。

这将使该字段与SugarBean兼容:

$bean = BeanFactory::getBean('<module>');
$bean->new_field_c = 'abcd';
$bean->save();

将识别该字段并对其进行更新。