在vTiger中以编程方式更新和保存记录

时间:2015-07-29 08:02:32

标签: 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

3 个答案:

答案 0 :(得分:2)

您需要在保存

之前将模式设置为recordModel
$recordModel->set('mode','edit');

答案 1 :(得分:0)

尝试这样的事情:

            $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();

答案 2 :(得分:0)

带有事件处理程序的托盘;

创建一个文件:/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', '[]'
);

然后用1

递增vtiger_eventhandlers_seq

就是这样:)

我希望,这有助于你