assign_user_id не изменяется - PullRequest
0 голосов
/ 23 ноября 2018

Должен быть что-то простое, я уверен, но я просто не вижу этого.

У меня есть до и после хуков сохранения, которые просто проверяютесли назначенный идентификатор пользователя изменился.Но я получаю тот же user_ID в до и после хуков сохранения.

Реестр логического хука

$hook_array['before_save'] = Array();
$hook_array['before_save'][] = Array(
 77,
 'If a new user is assigned to the unit of inventory it changes inventory status to OFFER',
 'custom/modules/un_inventory/user_assigned_c.php',
 'user_assigned_c',
 'user_assigned_before_save');

$hook_array['after_save'] = Array();
$hook_array['after_save'][] = Array(
 78,
 'If a new user is assigned to the unit of inventory it changes inventory status to OFFER',
 'custom/modules/un_inventory/user_assigned_c.php',
 'user_assigned_c',
 'user_assigned_after_save');

И логический хук

class user_assigned_c {

    function user_assigned_before_save($bean, $event, $arguments) {

        $GLOBALS['log']->info('User ID before save: '.$bean->assigned_user_id);

    }

    function user_assigned_after_save($bean, $event, $arguments) {
        // $bean->assigned_user_id stays the same as in the method above...
        $GLOBALS['log']->info('User ID after save: '.$bean->assigned_user_id);
    }

}

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

В SugarCRM 7+ вы можете использовать after_save крючок:

   function user_assigned_after_save($bean, $event, $arguments) {
        if (!$arguments['isUpdate']) {
            $GLOBALS['log']->info('New bean with User ID: '.$bean->assigned_user_id);
        } else if (isset($arguments['dataChanges']['assigned_user_id'])) {
            $idChange = $arguments['dataChanges']['assigned_user_id'];
            $old = $idChange['before'];
            $new = $idChange['after'];
            $GLOBALS['log']->info("Bean's User ID was changed from '$old' to '$new'");
        }
    }

В SugarCRM (старые и новые версии), также SuiteCRM,
вы можете использовать before_save крючок (какзаявлено Джимом):

   function user_assigned_before_save($bean, $event, $arguments) {
        $old = $bean->fetched_row['assigned_user_id'];
        $new = $bean->assigned_user_id;
        if ($old != $new) {
            $GLOBALS['log']->info("Bean's User ID was changed from '$old' to '$new'");
        }
    }

Если вы используете хук before_save и у вас есть хуки, которые изменяют поле assign_user_id, убедитесь, что эти хуки работают в правильном порядке (Первый параметр в массиве хуков каждогокрюк определяет порядок).

0 голосов
/ 23 ноября 2018

Это ожидается.Обычный поток может быть следующим:

$bean = getBeanFromSomewhere();
$bean->assigned_user_is = "12345ABC";
$bean->save();

Обратите внимание, что при сохранении назначенный идентификатор пользователя уже установлен.

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

Т.е.

$newId = $bean->assigned_user_id;
$oldId = $bean->fetched_row['assigned_user_id'];
if($newId !== $oldId){
    //Assigned user changed!
}

Я считаю, что были проблемы вПрошлое с fetched_row в хуке после сохранения, но, надеюсь, это поможет.

...