Фон и контекст
Я пытаюсь создать пользовательский модуль REST в SugarCRM 8.0, который объединяет два модуля в связанном поле. Два модуля:
- Счета (модуль OOTB)
- ConsumerLeads (пользовательский модуль)
Эти два модуля представляют собой связанное поле с именем w002_consumerleads_accounts_1 , так что когда я вызываю следующую конечную точку, я получаю ответ JSON со всеми данными ConsumerLead, связанными с этой конкретной учетной записью uuid.
/rest/v11_4/Accounts/{ account_uuid }/link/w002_consumerleads_accounts_1
Однако вместо того, чтобы возвращать объединенные результаты на основе учетной записи uuid, мой пользовательский модуль возвращает объединенные результаты на основе другого атрибута учетной записи, который однозначно идентифицирует учетную запись.
/rest/v11_4/customer/{ customer_id }/leads
Причина, по которой я пытаюсь создать собственный модуль для этого (вместо того, чтобы использовать предопределенный api rest, указанный выше), связана с тем, что система, вызывающая этот вызов, не знает uuid учетной записи пользователя Sugar и вместо этого знает бизнес ключ, однозначно идентифицирующий учетную запись (и являющийся атрибутом модуля «Учетные записи»).
Выпуск
Когда я использую SugarQuery в своем пользовательском модуле отдыха для присоединения к Accounts и ConsumerLeads, мои результаты не совпадают с результатами, указанными в первом API отдыха (предопределенном API отдыха). Результат возвращает только модуль «Учетные записи» и не присоединяется к модулю «ConsumerLeads».
Проблема заключается в соединении двух модулей в связанном поле; проблема не связана с использованием клиентского uuid против учетной записи uuid.
Справочные реализации
На основе Руководства для разработчиков SugarCRM я написал следующий фрагмент кода.
public function GetLinkLeads($api, $args) {
try {
$query = new SugarQuery();
$query->from(BeanFactory::getBean('Accounts'));
$query->join('w002_consumerleads_accounts_1');
$query->limit(10);
$results = $query->execute();
return $results;
} catch ( Exception $e ) {
return $e->getCode();
}
return 1;
}
На основании всей информации, которую я могу собрать, эта функция должна возвращать первые 10 записей учетной записи, объединенные с их ConsumerLeads. Однако ответ содержит только данные модуля «Учетные записи», он не объединяет данные «ConsumerLeads».
Кроме того, я также попробовал следующий способ.
public function GetLinkLeads($api, $args) {
try {
$account = BeanFactory::getBean('Accounts', '4606e963-9213-7764-d83f-4cc050c8473d');
if ( $account->load_relationship('w002_consumerleads_accounts_1') ) {
$lead = $account->w002_consumerleads_accounts_1->getBeans();
return $lead;
}
} catch ( Exception $e ) {
return $e->getCode();
}
return 1;
}
Где 4606e963-9213-7764-d83f-4cc050c8473d
- это uuid учетной записи, с которой связан ConsumerLeads, но я все еще не могу получить данные ConsumerLeads для возврата.
Вопрос
Я бы хотел:
- Используйте SugarQuery () для объединения этих двух модулей на основе связанного поля
- Используйте остальные API по умолчанию для соединения двух модулей на основе атрибута в модуле Учетные записи (не в учетной записи uuid)
Я нашел этот точный вопрос о переполнении стека, и приведенная выше реализация основана на рекомендации этого поста. Тем не менее, он все еще не присоединяется к записям.