Добрый день.
Задача - программно создать задание в 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
Ответы
Удалось найти решение.
В моем случае нужно компонент создавать таким вот образом, определяя в нем переменные.
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