public function doFrontEndAction(array $data, Form $form, HTTPRequest $request)
    {
        if (!$obj = $this->getContextObject()) {
            throw new Exception(
                _t(
                    'FrontEndWorkflowController.FRONTENDACTION_CONTEXT_EXCEPTION',
                    'Context Object Not Found'
                )
            );
        }

        if (!$this->getCurrentTransition()->canExecute($this->contextObj->getWorkflowInstance())) {
            throw new Exception(
                _t(
                    'FrontEndWorkflowController.FRONTENDACTION_TRANSITION_EXCEPTION',
                    'You do not have permission to execute this action'
                )
            );
        }

        //Only Save data when Transition is 'Active'
        if ($this->getCurrentTransition()->Type == 'Active') {
            //Hand off to WorkflowAction to perform Save
            $svc    = singleton(WorkflowService::class);
            $active = $svc->getWorkflowFor($obj);

            $active->doFrontEndAction($data, $form, $request);
        }

        //run execute on WorkflowInstance instance
        $action = $this->contextObj->getWorkflowInstance()->currentAction();
        $action->BaseAction()->execute($this->contextObj->getWorkflowInstance());

        //get valid transitions
        $transitions = $action->getValidTransitions();

        //tell instance to execute transition if it's in the permitted list
        if ($transitions->find('ID', $this->transitionID)) {
            $this->contextObj->getWorkflowInstance()->performTransition($this->getCurrentTransition());
        }
    }