Как вставить данные в вложенные таблицы модуля с помощью SugarBean
Как вставить данные в вложенную таблицу модуля? Например, у меня есть этот модуль: MainModule, его таблица - это mainmodule, а подтаблица модуля - mainmodule_sub.
поэтому я хочу знать, как вставить данные в mainmodule_sub с помощью SugarBean.
Для более четкого представления:
проблема в том, что большинство модулей имеют только таблицы main_tables и _cstm, и не все модули имеют одну или две таблицы; так что я просто хочу знать, как вставить данные в третью таблицу, скажем, например, модуль ProspectLists, и он имеет 5 таблиц, а именно: prospect_lists, prospect_lists_cstm, prospect_lists_prospect, prospect_lists_campaign и так далее..
как мне вставить данные в prospect_lists_prospect?
2 ответа
Как я уже задавал вопрос от Stack разработчикам, и на данный момент вы либо создаете свой собственный API для этого, либо делаете свой собственный локальный вызов / вставку через SQL, потому что к каждому из них подключены только таблицы main_tables и _cstm. ModuleAPI.
Я полагаю, что вы имеете в виду таблицу для хранения пользовательских полей, созданных в 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();
Вы МОЖЕТЕ добавить новые поля в таблицы _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, NOT 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();
распознает это поле и обновит его.