Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drupal 过期角色和发送提醒电子邮件的规则计划程序同时启动_Drupal_Drupal 7_Drupal Rules - Fatal编程技术网

Drupal 过期角色和发送提醒电子邮件的规则计划程序同时启动

Drupal 过期角色和发送提醒电子邮件的规则计划程序同时启动,drupal,drupal-7,drupal-rules,Drupal,Drupal 7,Drupal Rules,我有3条规则组成我的“会员资格” 购买产品X时分配角色(此项有效!) 2分钟后发送提醒电子邮件 4分钟后删除角色 请注意,2分钟和4分钟仅用于测试目的,它们将分别变为350天和365天 而两者都是2。或3。在工作中,我有两个问题: 规则n2和n3同时启动,因此在2分钟时,不仅会发送电子邮件,还会删除角色 假设用户MARK购买了产品X,一分钟后,JOE也这样做了。MARK购买产品X 2分钟后,MARK收到提醒电子邮件,他的角色被删除,但JOE也收到提醒电子邮件,他的角色被删除 似乎只要有什么东

我有3条规则组成我的“会员资格”

  • 购买产品X时分配角色(此项有效!)
  • 2分钟后发送提醒电子邮件
  • 4分钟后删除角色
  • 请注意,2分钟和4分钟仅用于测试目的,它们将分别变为350天和365天

    而两者都是2。或3。在工作中,我有两个问题:

    • 规则n2和n3同时启动,因此在2分钟时,不仅会发送电子邮件,还会删除角色

    • 假设用户MARK购买了产品X,一分钟后,JOE也这样做了。MARK购买产品X 2分钟后,MARK收到提醒电子邮件,他的角色被删除,但JOE也收到提醒电子邮件,他的角色被删除

    似乎只要有什么东西触发,所有人都会这么做

    正如您从导出中看到的,我从完成的商业订单的x分钟中触发了一个规则,从分配的角色中触发了另一个规则,认为与两个不同的事件相关,我将解决这个问题。它不起作用

    以下是我的规则的导出:

    规则“发送提醒”组件:

    { "rules_sends_email_to_pipps_reminder_1_week_prior_expiry" : {
    "LABEL" : "Sends Email to PIPPS Reminder 1 week prior expiry",
    "PLUGIN" : "rule set",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "USES VARIABLES" : { "user_argument" : { "label" : "User {argument}", "type" : "user" } },
    "RULES" : [
      { "RULE" : {
          "DO" : [
            { "mail" : {
                "to" : "[commerce-order:mail]",
                "subject" : "Heads up!",
                "message" : "Yo! Heads up!",
                "from" : "pipps@siteemail.com",
                "language" : [ "site:current-cart-order:state" ]
              }
            }
          ],
          "LABEL" : "Send email reminder to PIPPS"
        }
      }
    ]
    
    { "rules_expire_pipps_role_rule_set_" : {
    "LABEL" : "Expire PIPPS Role {rule_set}",
    "PLUGIN" : "rule set",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "USES VARIABLES" : { "user_argument" : { "label" : "User {argument}", "type" : "user" } },
    "RULES" : [
      { "RULE" : {
          "DO" : [
            { "user_remove_role" : {
                "account" : [ "user_argument" ],
                "roles" : { "value" : { "13" : "13" } }
              }
            }
          ],
          "LABEL" : "Expire action {rule}"
        }
      }
    ]
    
    } }

    规则“发送提醒”触发器:

    } }

    规则“角色过期”组件:

    { "rules_sends_email_to_pipps_reminder_1_week_prior_expiry" : {
    "LABEL" : "Sends Email to PIPPS Reminder 1 week prior expiry",
    "PLUGIN" : "rule set",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "USES VARIABLES" : { "user_argument" : { "label" : "User {argument}", "type" : "user" } },
    "RULES" : [
      { "RULE" : {
          "DO" : [
            { "mail" : {
                "to" : "[commerce-order:mail]",
                "subject" : "Heads up!",
                "message" : "Yo! Heads up!",
                "from" : "pipps@siteemail.com",
                "language" : [ "site:current-cart-order:state" ]
              }
            }
          ],
          "LABEL" : "Send email reminder to PIPPS"
        }
      }
    ]
    
    { "rules_expire_pipps_role_rule_set_" : {
    "LABEL" : "Expire PIPPS Role {rule_set}",
    "PLUGIN" : "rule set",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "USES VARIABLES" : { "user_argument" : { "label" : "User {argument}", "type" : "user" } },
    "RULES" : [
      { "RULE" : {
          "DO" : [
            { "user_remove_role" : {
                "account" : [ "user_argument" ],
                "roles" : { "value" : { "13" : "13" } }
              }
            }
          ],
          "LABEL" : "Expire action {rule}"
        }
      }
    ]
    
    } }

    规则“过期角色”触发器:

    } }

    非常感谢您的任何建议!谢谢。

    您的规则(和规则组件)似乎“按实现方式工作”。。。你的“问题”似乎是,在测试过程中,你应该更有耐心。。。请继续阅读以了解更多详细信息

    了解正在发生的事情 在调度规则(使用规则调度器子模块)后,它将仅在下次cron运行时实际执行

    例如:

    • 安排第一个规则组件在时间戳X1执行
    • 如果cron的下一次运行时间是在时间戳X1之后的
      Y分钟,则此第一个规则组件的执行将仅在那时(=在时间戳X1
      之后的
      Y分钟)发生
    • 安排第二个规则组件在时间戳X2执行
    • 如果cron的下一次运行时间是在时间戳X2之后的
      Y分钟,则此第二个规则组件的执行将只在那时(=在时间戳X2
      之后的
      Y分钟)发生
    由于您的问题场景中的描述,似乎
    时间戳X2
    发生在时间戳X1之后
    Y分钟之前。这也解释了为什么两个规则组件实际上同时执行(或多或少)

    补救措施,让它发挥你真正想要的作用
    假设您的cron作业每小时运行一次,那么在4分钟之后计划的规则组件的直接(次要)修复将改为在2小时之后计划它们。因此,您可以确保两个规则组件在同一个cron作业期间没有实际执行。

    请记住,cron运行时规则调度器正在调用。当您调用cron工作时,所有未调用的调度程序都应该被调用。Hi@lamp5感谢您的建议。我的理解是,当我有一个日期偏移量(就像我在那些触发器上做的那样)时,cron检查是否满足该日期偏移量,然后触发这些规则。那么你是说,不管日期偏移值是多少,它都会被调用?谢谢