2013-07-26 4 views
2

Я хотел бы иметь возможность создать модуль как взаимодействие между sugarCRM и другой базой данных. Для этого я построил модуль благодаря инструменту построения модуля, и я хотел бы подключить его к новой таблице, которая представляет собой соединение между данными сахара и моими вторыми данными приложения (чтобы предотвратить дублирование данных).SugarCRM - запретить запись для настраиваемого модуля

Поскольку моя новая таблица для модуля представляет собой представление между двумя другими, сахар просматривает содержимое без каких-либо проблем, но выдает исключение всякий раз, когда я пытаюсь вставить что-либо. Поэтому я хотел бы использовать логический крюк, который будет непосредственно хранить данные в двух «оригинальных» таблицах.

Вот моя проблема: даже если данные правильно сохранены, я бы хотел, чтобы сахар не пытался хранить что-либо. Есть ли что-то, что я могу сделать в своем крюке, чтобы остановить действие сахара, как только мой крючок закончил свою работу?

Извините за мой страшный английский и спасибо за чтение.

+0

Чтобы убедиться, что я понимаю: вы использовали модуль Builder для создания модуля, который Sugar распознает, но данные для этого модуля поступают из внешнего источника, а Sugar должен только когда-либо _read_ из таблицы этого модуля, потому что это не реальный стол в любом случае, просто вид. Это верно? И конкретный вопрос не связан с логической привязкой для хранения данных в реальных таблицах, но исключительно для предотвращения того, что пользовательский модуль никогда не пытается сохранить что-либо, используя код модуля по умолчанию для Sugar. Правильно? – nmjk

+0

Извините за ответ так поздно, что я часто не использую эту учетную запись ... Вы поняли, я заставляю Sugar думать, что представление - это его собственная таблица, так что Sugar правильно считывает данные. Затем, когда что-то редактируется, я использую логические крючки для извлечения интересных данных и обновления их в первой таблице. Но затем с помощью этого метода Сахар пытается обновить представление (которое он считает его собственной таблицей), и это меня беспокоит, потому что Sugar падает тогда ... – user2622911

ответ

1

Я рекомендую переопределить метод Save в контроллере вашего настраиваемого модуля.

После создания и развертывания модуля появится новый каталог: custom/modules/yourcustommodule. В этом каталоге создайте файл с именем controller.php.

Этого файл должен включать в себя следующее (непроверенной) кода:

require_once('include/MVC/Controller/SugarController.php'); 

class yourcustommoduleController extends SugarController { 
    function action_save() { 
     return; 
    } 
} 

Вы можете даже переместить ваш до/после крючков в эту функцию пользовательского действия. Пока вы не вызываете метод сохранения по умолчанию (parent::action_save();, я думаю), SugarCRM по умолчанию сохраняет действие (ы) не произойдет.

Важно: после развертывания пользовательского модуля, наилучшей практикой SugarCRM является то, что он никогда не передислоцирует его, а выполняет все последующие изменения в Studio. Это важно, поскольку после внесения изменений на уровне файла в пользовательский модуль эти изменения будут потеряны, если вы переустановите модуль.

+1

Эта заметка о развертывании очень важна. В модуле Builder просто создайте поля и отношения, затем опубликуйте его, установите опубликованную версию и удалите копию в модуле Builder. Просто выйдите из Moule Builder как можно быстрее. В подходе OP к этому, замена таблицы модуля на представление - отличный способ сделать данные доступными для API, которые иначе не были бы доступны. У нас есть метаданные в таблицах присоединения некоторых отношений, и представление может вывести это в выбранные Записи для нас. Очень удобная техника. – Jason

Смежные вопросы