Вы здесь

Как передать параметры в Rules Component при программном создании задачи в Rules Scheduler ?

0

Добрый день.

Задача - программно создать задание в Rules Scheduler и передать ему свои параметры.

Сначала я создаю action таким образом.

function my_module_rules_action_info()
{
    $actions = [];

    $actions['yrv_my_action'] = [
        'label' => t('My label'),
        'group' => t('System'),
        'base' => 'my_callback',
        'parameter' => [
            'uid' => [
                'type' => 'integer',
                'label' => t('User ID'),
            ],
            'rid' => [
                'type' => 'integer',
                'label' => t('Role ID'),
            ]
        ],
    ];

    return $actions;
}

function my_callback($uid, $rid){
    drupal_set_message('User '.$uid.' deprived role '.$rid);
}

Затем определяю Component вот таким образом

function my_module_default_rules_configuration()
{
    $configs = [];

    $rule = rule();
    $rule->label = t('My component label');
    $rule->class = 'Rule';
    $rule->action('yrv_my_action', ['uid' => 1, 'rid' => 1]);
    $rule->active = TRUE;

    $configs['yrv_my_component'] = $rule;

    return $configs;
}

А затем создаю задание в Rules Scheduler, чтобы выполнилось через 10 секунд.
Код взял отсюда - https://www.drupal.org/node/1967786

$now = new DateTime();
    $component = 'yrv_my_component';
    $task_id = $now->getTimestamp();

    rules_action('schedule', ['component' => $component])
        ->executeByArgs([
            'date' => $now->getTimestamp()+10,
            'identifier' => $task_id,
            'param_uid' => 10,
            'param_rid' => 5,
        ]);

Задание создается и выполняется. Но проблема в том, оно выполняется с параметрами, указанными в определении компонента (то есть, uid = 1 и rid = 1), а не передаваемыми при создании задания (uid = 10 и rid = 5).

Скажите пожалуйста, как правильно передавать параметры при выполнении метода executeByArgs ?

Версия Drupal: 
7.x
Связанные проекты: 
Rules
Вопрос задан 20.11.2017 - 16:18

Ответы

0

Удалось найти решение.

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

function mu_module_default_rules_configuration()
{
    $configs = [];

    $rule = rule([
        'uid' => [
            'type' => 'integer',
            'label' => t('User ID'),
        ],
        'rid' => [
            'type' => 'integer',
            'label' => t('Role ID'),
        ],
    ]);
    $rule->label = 'My Label';
    $rule->class = 'Rule';
    $rule->action('yrv_my_action', []);
    $rule->active = TRUE;

    $configs['yrv_my_component'] = $rule;

    return $configs;
}
Ответ дан 21.11.2017 - 19:00