SugarCRM: Создать ПРИМЕЧАНИЕ с вложением без SOAP? - PullRequest
2 голосов
/ 27 октября 2010

У меня есть эта пользовательская кнопка в Lead Editview, которая при нажатии генерирует (через AJAX) номер счета и PDF с одинаковым номером.

На следующем шаге процедура использует SOAP для обратной связиSugar и создает заметку (вместе с PDF в качестве вложения).

Мой вопрос: можно ли избежать этого вызова SOAP и использовать какой-то другой внутренний механизм / классы, чтобы сделать то же самое?Что-то вроде

$invoice = new Note();
$invoice->create(....);
...

Возможно ли это?Я нигде не смог найти никакой документации ... кажется, все дороги указывают на SOAP.

1 Ответ

4 голосов
/ 28 октября 2010

Если ваш Ajax-вызов выполняет операцию обновления / сохранения в БД, то вы можете использовать after_save логический хук.

РЕДАКТИРОВАТЬ: , например, вы можете попробоватьэтот код, посмотрите на код в <sugar_root>/modules/Notes/Note.php

$note = new Note();
$note->modified_user_id = $current_user->id;
$note->created_by = $current_user->id;
$note->name = 'New';
$note->parent_type = "Accounts";
$note->parent_id = $bean->parent_id;
$note->description = $bean->description;
$note->save();

Что касается вложений, это немного сложно.Sugar ожидает, что вложение будет объектом upload_file.Посмотрите на код в <sugar_root>/modules/Notes/controller.php функциях action_save() и <sugar_root>/include/upload_file.php

HACK: это не правильный путь, но он работает.С небольшими изменениями в приведенном выше коде и хитрым использованием функции move, вы можете заставить вложение работать.Sugar хранит вложения в папке cache/upload с идентификатором созданной заметки.

$note->filename = "Yourfilename.txt" //your file name goes here
$note->file_mime_type = "text/plain"  // your file's mime type goes here
$new_note_id = $note->save();

move(your_file_location, cache/upload/$new_note_id)
//don't add a extension to cache/upload/$new_note_id

HTH

PS: непроверенный код

...