Обработчик событий vTiger для проверки существования записи

Я работаю над vTiger 6.5 и пытаюсь найти способ проверить, существует ли запись в моем собственном модуле. Я хочу проверить, является ли "номер политики" новым перед сохранением, вот мой код. По некоторым причинам это, кажется, действует случайным образом в зависимости от выбранного номера моего модуля.

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 ответа

isNew()

Возвращает true, если создается новая запись, иначе false. Больше информации здесь

Вы должны написать собственный запрос, чтобы проверить номер политики, уже существующий или не существующий в вашей функции:

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')

Обновить:

Я предполагаю, что в вашей форме есть поле т.е. номер политики, вы вводите какое-то значение в это поле и отправляете форму. поэтому вы получите введенное значение номера политики из этого:

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

если это не работает, вы можете просто использовать глобальную переменную php $_REQUEST['policynumber'] но я не очень хорошая практика Надеюсь, это поможет.

Это обновление к моему ответу, я просто сделал оператор 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;
}
Другие вопросы по тегам