Как вставить данные в вложенные таблицы модуля с помощью 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();

распознает это поле и обновит его.

Другие вопросы по тегам