Php 用于检查记录是否存在的vTiger事件处理程序
我正在开发vTiger 6.5,我正在试图找到一种方法来查看我的自定义模块中是否存在记录。我想在保存之前检查“policynumber”是否是新的,这是我目前的代码。出于某种原因,它似乎是随机的,取决于我选择的模块号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->
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
。希望您能找到一些线索来解决您的问题!非常感谢您的帮助,在进行了一些调试之后,我能够稍微修改代码并得到我想要的结果。谢谢!