Обновление и сохранение записи программно в vTiger

В настоящее время я пытаюсь изменить пользователя «Назначено» для лида на текущего пользователя всякий раз, когда пользователь входит на экран сведений о лиде.

У меня есть следующий код:

function checkPermission(Vtiger_Request $request) {

    $moduleName = $request->getModule();
    $recordId = $request->get('record');

    $recordModel = Vtiger_Record_Model::getInstanceById($recordId, $moduleName);

    $recordModel->set('assigned_user_id',$current_user->id);

    $recordModel->save();

    ...

    return true;
}

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

Работа на vTiger v6.2.0


person CS Koh    schedule 29.07.2015    source источник
comment
У меня была та же проблема, команда сохранения создает повторяющуюся запись. Но я не знаю, как получить доступ к уже созданному объекту. Хотелось бы увидеть ответ и на этот вопрос, на самом деле я обновил базу данных вручную global $adb; [...] $adb->pquery("UPDATE [...]. Но не очень приятно!   -  person Preexo    schedule 10.08.2015


Ответы (3)


Вам нужно установить режим редактирования в recordModel перед сохранением

$recordModel->set('mode','edit');
person Haidang Nguyen    schedule 29.09.2015

Попробуйте что-то вроде этого:

            $recordModel= Vtiger_Record_Model::getInstanceById($recordId,$moduleName);
            $recordModel->set(my_fields, my_new_value);
            $recordModel->set(my_fields2, my_new_value2);
            $recordModel->set('mode', 'edit');
            $recordModel->save();
person The Fire TITAN    schedule 08.10.2015

Трей с обработчиком событий;

создайте файл: /modules/yourmodulename/handlers/RecordUpdater.php, затем поместите приведенный ниже код в свой файл RecordUpdater.php:

require_once 'include/events/VTEventHandler.inc';

class yourmodulename_RecordUpdater_Handler extends VTEventHandler {

    function handleEvent($eventName, $data) {
        global $adb;
        $currentUserModel = Users_Record_Model::getCurrentUserModel();
        $module           = $data->getModuleName();

        if ($eventName === 'vtiger.entity.beforesave' AND $module === "yourmodulename") {

                require_once 'modules/yourmodulename/yourmodulename.php';

                $currentUserId = $currentUserModel->getId();

                $data->set('assigned_user_id', $currentUserId);
                }

        }
}

наконец, не забудьте вставить в таблицу vtiger_eventhandlers:

INSERT INTO `vtigercrm`.`vtiger_eventhandlers` (
`eventhandler_id` ,
`event_name` ,
`handler_path` ,
`handler_class` ,
`cond` ,
`is_active` ,
`dependent_on`
)
VALUES (
NULL , 'vtiger.entity.beforesave', 'modules/yourmodulename/handlers/RecordUpdater.php', 'yourmodulename_RecordUpdater_Handler', NULL , '1', '[]'
);

затем увеличьте vtiger_eventhandlers_seq на 1

Это оно :)

Я надеюсь, это поможет вам

person Laila    schedule 20.06.2017