Php SuiteCRM:从beforesave钩子逻辑重定向到editview

Php SuiteCRM:从beforesave钩子逻辑重定向到editview,php,redirect,sugarcrm,suitecrm,Php,Redirect,Sugarcrm,Suitecrm,从beforesave钩子逻辑重定向到editview 如果在保存钩子逻辑之前发生错误,我正在尝试从该逻辑重定向。它应该重定向到带有错误的编辑视图。我正在使用以下代码: function ShowError($errorMsg,$beanID){ try{ SugarApplication::appendErrorMessage('An error has been occured: '.$errorMsg); $params = array(

从beforesave钩子逻辑重定向到editview

如果在保存钩子逻辑之前发生错误,我正在尝试从该逻辑重定向。它应该重定向到带有错误的编辑视图。我正在使用以下代码:

function ShowError($errorMsg,$beanID){
    try{
        SugarApplication::appendErrorMessage('An error has been occured: '.$errorMsg);
        $params = array(
            'module'=> 'ad123_Ads',
            'action'=>'EditView', 
            'id' => $beanID
        );
        SugarApplication::redirect('index.php?' . http_build_query($params));
    } catch (Exception $e) {
        echo 'Caught exception: ',  $e, "\n";
    }

}

但问题是重定向后所有字段都未填充。

其中一个参数错误,它必须是
记录
,而不是
id

试试这个:

try{
         SugarApplication::appendErrorMessage('An error has been occured: '.$errorMsg);
                $params = array(
                  'module'=> 'ad123_Ads',
                  'action'=>'EditView', 
                  'record' => $beanID
                );
        SugarApplication::redirect('index.php?' . http_build_query($params));
            }
    catch (Exception $e) {
          echo 'Caught exception: ',  $e, "\n";
        }
我不推荐这种验证,因为您将丢失对表单所做的更改。通常,您必须在提交之前进行JS验证,以便用户在提交和丢失所有更改之前有时间更正错误

SugarApplication::appendErrorMessage('End Date must be after Start Date');
$queryParams = array(
                'module' => $module_name,
                'action' => $action,
                'record' => $recordId,
            );
            SugarApplication::redirect('index.php?' . http_build_query($queryParams));
这里$module_name是您正在编写逻辑钩子的模块。 $action是“EditView”或“DetailView”。 $recordId是$bean->id

您需要了解,在保存之前,逻辑钩子不会返回记录ID,因为它还没有被分配。这将使页面返回空白

我认为解决这个问题的最好方法是使用after_save logic hook。当您将bean->id传递给上面的recordId时,这将恢复表单上的所有值