vTiger事件处理程序,用于检查记录是否存在

时间:2017-04-03 15:43:59

标签: php event-handling vtiger

我正在研究vTiger 6.5,我正试图找出一种方法来查看我的自定义模块中是否存在记录。我想检查一下' policynumber'在保存之前是新的,这是我的代码到目前为止。出于某种原因,它似乎随机行动取决于我选择的模块编号。

class isaHandler extends VTEventHandler { 
function handleEvent($eventName, $entityData) {
    global $adb;
    $moduleName = $entityData->getModuleName(); 
    if($moduleName=='isa'){     
        if($eventName == 'vtiger.entity.beforesave.modifiable') {
            $isNew = $entityData->isNew('policynumber');
                    if ($isNew == false) {
                echo "Duplicate policy number";
                    exit;
        }
        }

        if($eventName == 'vtiger.entity.beforesave') {}}
        if($eventName == 'vtiger.entity.beforesave.final') {
            $price = $entityData->get('currentamount');
                    if($price > 20000){
                    echo "Please go back and enter less than 20000";
                    exit;
            }

        if($eventName == 'vtiger.entity.aftersave') {}
    }   
}

目前我正在使用回声来查看结果。但是稍后我会表现得更多。

2 个答案:

答案 0 :(得分:0)

isNew()

如果正在创建新记录,则返回true,否则返回false。 More info is here

你应该编写一个自定义查询来检查你的函数中是否存在policynumber:

if($eventName == 'vtiger.entity.beforesave.modifiable') {
        global $adb;

$result = $adb->pquery("SELECT your-field-name FROM table_name WHERE policynumber=?", array($policynumbervalue));
if($result && $adb->num_rows($result)) {
  echo "This policy number exist";
  die();
    }else{
    // write your overwrite code
    }
  } //end if($eventName == 'vtiger.entity.beforesave.modifiable')

<强>更新

我假设您的表单中有字段即policynumber,您在此字段中输入一些值并提交表单。因此,您将从此输入政策编号值:

$policynumbervalue = $entityData->get('policynumber'); //this is vtiger standard way

如果这不起作用,你可以简单地使用php全局变量$_REQUEST['policynumber'],但我不是一个好习惯。 希望这会有所帮助。

答案 1 :(得分:0)

这是对我的回答的更新,我只是对显示的行数做了一个if语句。

    if($eventName == 'vtiger.entity.beforesave.modifiable') {

$policynumbervalue = $entityData->get('policynumber');
$sql = $adb->pquery("SELECT policynumber FROM vtiger_isa WHERE policynumber=?",array($policynumbervalue));
$nrows = $adb->num_rows($sql);
if($nrows > 0){
echo "<script type=\"text/javascript\">window.alert('ISA policy number already exists, you will be redirected to the updata module.');
window.location.href = '/vtigercrm/index.php?module=isa&view=List';</script>"; 
    exit;
}