ワークフロー: 最初の公開時のみ、スルーされる

再現条件等はまだ判明していないのですが、

  1. ワークフローを設定する
  2. 下書き⇒公開、のステップは承認ナシで実行される
  3. 公開後の変更は、ワークフローで承認が必要

という状況が発生したのですけど、起こりえますかね?

ワークフローを設定する前に作った下書きがあると、その下書きは後からワークフローを設定しても対象外?
になるでしょうか?

■ 新規に9.2.7で作ったサイトだと、再現しなかった。
現象が起きているのは9.1ぐらいでスタート⇒現在9.2.7

■ 現象が起きているのサイトでは、
新規に作った下書きでも再現した。(公開時のみスルーされた)

$db->executeQuery(‘insert into WorkflowProgress (wfID, wrID, wpDateAdded, wpCategoryID) values (?, ?, ?, ?)’, array(
$wf->getWorkflowID(), $wr->getWorkflowRequestID(), $wpDateAdded, $wpCategoryID,
));

のところで、$wf->getWorkflowID()に期待する値が入ってこないで0が入っている(場合がある)

問題が発生しているサイトでは、

■ 親ページによって、起きるかどうかが異なる

↑しかし条件がわからない

報告、ありがとうございます!

なるほど!

今の所、自分たちの周りでは、そのようなことが発生しているという情報がきていないです。

もしも条件がわかればお願いします

ありがとうございます。

ひとまず、
「もしgetWorkflowIDが0(DBで0なので、PHPではnullかも)だったら、1に変更する&発生したときにログを取得する」
で処理します。
詳細な条件がわかればお知らせします。

こちらの問題はその後解決していますでしょうか?

私の環境(9.3.5)ではページタイプごとに異なるワークフローを設定しているのですが、一様に新規公開時ではワークフローが処理されません。
concrete/src/Workflow/Request/Request.phptriggerRequest()$pa->getWorkflows() が有りますがここが0件となりワークフローの処理が取得出来ない状態です。

    protected function triggerRequest(\PermissionKey $pk)
    {
        if (!$this->wrID) {
            $this->save();
        }

        if (!$pk->canPermissionKeyTriggerWorkflow()) {
            throw new \Exception(t('This permission key cannot start a workflow.'));
        }

        $pa = $pk->getPermissionAccessObject();
        $skipWorkflow = true;
        if (is_object($pa)) {
            $workflows = $pa->getWorkflows();
            foreach ($workflows as $wf) {
                if ($wf->validateTrigger($this)) {
                    $wp = $this->addWorkflowProgress($wf);
                    $response = $wp->getWorkflowProgressResponseObject();
                    if ($response instanceof SkippedResponse) {
                        // Since the response was skipped, we delete the workflow progress operation and keep moving.
                        $wp->delete();
                    } else {
                        $skipWorkflow = false;
                    }
                    $event = new GenericEvent();
                    $event->setArgument('progress', $wp);
                    Events::dispatch('workflow_triggered', $event);
                }
            }
        }

        if ($skipWorkflow) {
            $defaultWorkflow = new EmptyWorkflow();
            $wp = $this->addWorkflowProgress($defaultWorkflow);

            $event = new GenericEvent();
            $event->setArgument('progress', $wp);
            Events::dispatch('workflow_triggered', $event);

            return $wp->getWorkflowProgressResponseObject();
        }
    }

編集時には設定したワークフローがセットされて配列として返却されます。

9.3.9だと解消されているように思います。どのバージョンで改善されたかまでは把握できていないです。

ひとまず9.3系の最新の9.3.9まで更新して確認してもらえればと思います。

情報ありがとうございます。
当方localのdocker環境で 9.3.9 でも確認してみたのですが、新規ページのワークフロー送信時にやはり対象のワークフローが発火せずそのまま公開されてしまいます。
私の環境で発生している問題とは原因が異なる可能性がありますね。

環境的には5.7.xからずっと継続している環境のためDBに問題がありそうな挙動を感じています。

$pk->getPermissionAccessObject() で取得した $pa に保持されている paID をテーブル PermissionAccessWorkflows で確認すると対応するエントリーが無いためこのテーブルが問題ではないかと考えています。