0

在流程制造商中,我将一些使用过的任务分配Start Custom Task给一些用户,

我想知道有没有办法在这样的工作流程中回滚到以前的任务,

例如,如果一个用户 (user1) 错误地拒绝任务并且工作流创建另一个任务

对于下一个用户(user2),是否可以将工作流回滚到上一步并分配任务

再次给user1?

如果有人可以帮助我,我将不胜感激。

4

1 回答 1

0

应该从 sub_application 和 app_delegation 的最终列表中删除记录,直到需要记录

使用此代码,我可以将案例从任何地方恢复到任何地方

foreach($GLOBALS['gridHistory'] as $cuurentTask)
{
        $cuurentTask["PRO_UID"] =$dbHandle->Convertnumber2english(trim($cuurentTask["PRO_UID"]));
        $cuurentTask["TAS_UID"] =$dbHandle->Convertnumber2english(trim($cuurentTask["TAS_UID"]));
        $cuurentTask["DEL_INDEX"]=$dbHandle->Convertnumber2english(trim($cuurentTask["DEL_INDEX"]));

        if($cuurentTask["PRO_UID"]!==$to_PRO_UID || $cuurentTask["TAS_UID"]!==$to_TAS_UID || $cuurentTask["DEL_INDEX"]!==$to_DEL_INDEX)
        { 
            $task_type=task_type($cuurentTask["TAS_UID"],$cuurentTask["PRO_UID"]);

            $inPath=checkForExistInPath($to_APP_UID,$cuurentTask["APP_UID"],$to_DEL_INDEX,$cuurentTask["DEL_INDEX"]);

            if($task_type=="NORMAL" && $inPath )
            {       
                    if(rollbackAppDelegate($cuurentTask["APP_UID"],$cuurentTask["DEL_INDEX"])!=1)
                        die('خطا در بازگرداندن کار نرمال '.$cuurentTask["APP_UID"]);
            }
            else if($task_type=="SUBPROCESS" && $inPath)
            {
                $sub_application=$baseClass->query("select APP_UID from sub_application where app_parent='".$cuurentTask["APP_UID"]."' and DEL_INDEX_PARENT='".$cuurentTask["DEL_INDEX"]."'");
                if(deleteSubProcess($sub_application[0]["APP_UID"])!=1)
                    die('خطا در حذف زیر فرآیند'.$sub_application[0]["APP_UID"]);
                if(rollbackAppDelegate($cuurentTask["APP_UID"],$cuurentTask["DEL_INDEX"])!=1)
                    die('خطا در بازگرداندن کار موازی'.$cuurentTask["APP_UID"]);
            }
            else
                echo 'امکان انتقال وجود ندارد.';
        }
        else
        {
            if($APP_CUR_USER=$baseClass->query("select USR_UID from app_delegation where app_delegation.APP_UID='{$cuurentTask['APP_UID']}' order by DEL_INDEX desc LIMIT 1"))
                if($baseClass->query("update app_delegation set DEL_THREAD_STATUS='OPEN' , DEL_FINISH_DATE=null where  app_delegation.APP_UID='{$cuurentTask['APP_UID']}' and app_delegation.DEL_INDEX='{$cuurentTask["DEL_INDEX"]}';"))
                    if($baseClass->query("update application set APP_STATUS='TO_DO' , APP_FINISH_DATE=null,APP_CUR_USER='{$APP_CUR_USER[0]["USR_UID"]}' where  application.APP_UID='{$cuurentTask['APP_UID']}';"))
                    {
                        echo 'true';
                        break;
                    }
                    else
                        echo 'false';
        }
}  
于 2015-04-06T06:02:38.443 回答