Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于检查记录是否存在的vTiger事件处理程序_Php_Event Handling_Vtiger - Fatal编程技术网

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

Php 用于检查记录是否存在的vTiger事件处理程序,php,event-handling,vtiger,Php,Event Handling,Vtiger,我正在开发vTiger 6.5,我正在试图找到一种方法来查看我的自定义模块中是否存在记录。我想在保存之前检查“policynumber”是否是新的,这是我目前的代码。出于某种原因,它似乎是随机的,取决于我选择的模块号 class isaHandler extends VTEventHandler { function handleEvent($eventName, $entityData) { global $adb; $moduleName = $entityData->

我正在开发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') {}
    }   
}
目前我正在使用回音来查看结果。但稍后我会表演更多

isNew()
如果正在创建新记录,则返回true,否则返回false。

您应该编写一个自定义查询,以检查函数中是否已存在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全局变量
$\u REQUEST['policynumber']
,但我不是一个好的做法。 希望这会有所帮助

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

您应该编写一个自定义查询,以检查函数中是否已存在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全局变量
$\u 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;
}
if($eventName=='vtiger.entity.beforesave.modifiable'){
$policynumbervalue=$entityData->get('policynumber');
$sql=$adb->pquery(“从vtiger_isa中选择policynumber,其中policynumber=?”,数组($policynumbervalue));
$nrows=$adb->num_行($sql);
如果($nrows>0){
echo“window.alert('ISA策略号已经存在,您将被重定向到updatea模块');
window.location.href='/vtigercrm/index.php?module=isa&view=List';“;
出口
}

这是对我答案的更新,我只是对显示的行数做了一个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;
}
if($eventName=='vtiger.entity.beforesave.modifiable'){
$policynumbervalue=$entityData->get('policynumber');
$sql=$adb->pquery(“从vtiger_isa中选择policynumber,其中policynumber=?”,数组($policynumbervalue));
$nrows=$adb->num_行($sql);
如果($nrows>0){
echo“window.alert('ISA策略号已经存在,您将被重定向到updatea模块');
window.location.href='/vtigercrm/index.php?module=isa&view=List';“;
出口
}

if($eventName=='vtiger.entity.beforesave'){//将您的代码放入此文件中并重试}
@Bhaskar我以前尝试过此方法,我刚刚再次尝试过此方法,但我仍然能够输入两个相同的策略编号。
if($eventName=='vtiger.entity.beforesave'){//将您的代码放入此文件中并重试}
@Bhaskar我以前试过这个,我刚刚又试了一次,但我仍然能够输入两个相同的保单号码。感谢您的回复@Bhaskar,这是我得到的,我不确定要放入什么
policynumber=?
这是我到目前为止得到的:
$result=$adb->pquery(“从vtiger_isa中选择policynumber,其中policynumber=?”,数组($policynumbervalue));如果($result&&$adb->num_rows($result)){echo“此策略编号存在”;die()}
感谢您的更新@Bhaskar,这是我现在拥有的,尽管它似乎不起作用。
$policynumbervalue=$entityData->get('policynumber'));$result=$adb->pquery(“从vtiger_isa中选择policynumber,其中policynumber=?”,数组($policynumbervalue));if($result&&$adb->num_rows($result)){echo“此策略编号存在”;die();}
只是想让您知道我也尝试了
$\u请求['policynumber']
@Diddy,我认为这应该可以,进行调试。1)
echo$entityData->get('policynumber');
get policynumber?2)在数据库中运行查询
从vtiger\u isa中选择policynumber,其中policynumber='put-here-policy-number'
并返回数据库中的任何行。如果这些都可以,请通过执行
print\r($adb)检查
$adb>
。希望您能得到一些线索来解决您的问题!非常感谢您的帮助,在进行了一些调试之后,我能够稍微修改代码并得到我想要的结果。谢谢!感谢您的回复@Bhaskar,这是我得到的,我不确定要放入什么
policynumber=?
这是我目前为止得到的:
$result=$adb->pquery(“从vtiger_isa中选择policynumber,其中policynumber=?”,数组($policynumbervalue));if($result&&$adb->num_rows($result)){echo“此策略编号存在”;die();}
感谢您的更新@Bhaskar,这是我现在拥有的,尽管它似乎不起作用。
$policynumbervalue=$entityData->get('policynumber');$result=$adb->pquery(“从vtiger_isa中选择policynumber,其中policynumber=?”,array($policynumbervalue));if($result&&$adb->num rows($result)){echo“此策略编号存在。”“die();}
只是想让您知道,我也尝试了
$\u请求['policynumber']
@Diddy,我认为这应该可以,进行调试。1)
echo$entityData->get('policynumber'))
获取policynumber?2)在DB中运行查询
从vtiger_isa中选择policynumber,其中policynumber='put-here-policy-number'
是否返回DB中的任何行。如果没有问题,请通过执行
打印($adb)来检查
$adb
。希望您能找到一些线索来解决您的问题!非常感谢您的帮助,在进行了一些调试之后,我能够稍微修改代码并得到我想要的结果。谢谢!