Hi,
I am using the data processor to insert or update and on insert I need to refresh the grid in order to have the id of the record that was inserted in case there is a subsequent update. Problem is that I cannot use the id that the grid sends to me since the table that I am inserting into has it’s own id scheme. I actually need to have the id that is created server side for the record. So, what I am thinking is to somehow do an afterInsert javascript function that refreshes the grid fro the inquiry_customer_info_contactdetail_xml.php. Is this possible?
my grid is set up like this:
mygrid = new dhtmlXGridObject(‘contact_detail’);
mygrid.setImagePath(“images/gridimages/”);
mygrid.setHeader(“UserID,Active,Contact Name, Phone, Partner Location, Comments, Email Address, Title,2nd Phone, Fax, Position, Description, Birthday, Greeting”);
mygrid.setInitWidths(“100,50,100,100,100,100,100,100,100,100,100,100,100,100”);
mygrid.setColumnIds(“userid, active, contactname,phone,partnerlocation,comments,emailaddress,title,2ndphone,fax,position,description,birthday,greeting”);
mygrid.setColAlign(“left,left,left,left,left,left,left,left,left,left,left,left,left,left”)
mygrid.setSkin(“light”);
mygrid.setColSorting(“str,str,str,str,str,str,str,str,str,str,str,str,str,str”);
mygrid.setColTypes(“ed,ed,ed,ed,combo,ed,ed,ed,ed,ed,combo,ed,ed,combo”);
mygrid.enablePaging(true,5,5,“pagingArea”,true,“recinfoArea”);
//mygrid.attachEvent(“onRowSelect”,doOnRowSelected);
//combo = mygrid.getColumnCombo(0);
//combo.enableFilteringMode(true);
//combo.loadXML(“functions/buildCombos.php?comboType=c_greeting&orgfilter=false&selectedID=1000000”);
mygrid.init();
mygrid.enableSmartRendering(true);
mygrid.loadXML(“inquiry_customer_info_contactdetail_xml.php?c_bpartner_id=<?php echo $c_bpartner_id;?>”);
var dp = new dataProcessor(“php/update.php?c_bpartner_id=<?php echo $c_bpartner_id;?>”);
dp.setTransactionMode(“GET”,true);
dp.setUpdateMode(“row”);
dp.setVerificator(1,checkRowForInsert);
//dp.enableDataNames(true);
dp.init(mygrid);
my update.php looks like this:
$newId = $_REQUEST[“ids”];
$mode = $REQUEST[$newId.""."!nativeeditor_status"]; //get request mode
$rowId = $REQUEST[$newId."".“gr_id”]; //id or row which was updated
$customerid=$_REQUEST[‘c_bpartner_id’];
$userid=$REQUEST[$newId."".“c0”];
$contactname=$REQUEST[$newId."".“c2”];
$contactemail=$REQUEST[$newId."".“c6”];
$contactphone=$REQUEST[$newId."".“c3”];
function insert_row(){
global $newId;
global $customerid, $userid, $contactname, $contactemail, $contactphone;
$query=“insert into users (customerid, name,email,phone) values(’”.$customerid."’, ‘".$contactname."’,’".$contactemail."’,’".$contactphone."’)";
$db->query($query);
return “inserted”;
}
function update_row(){
global $newId;
global $customerid, $userid, $contactname, $contactemail, $contactphone;
$query=“update users set customerid=’”.$customerid."’, name=’".$contactname."’, email=’".$contactemail."’,phone=’".$contactphone."’ where userid=".$userid)";
$db->query($query);
return “updated”;
}
function delete_row(){
return “deleted”;
}
//include XML Header (as response will be in xml format)
header(“Content-type: text/xml”);
//encoding may differ in your case
echo(’<?xml version="1.0" encoding="UTF-8"?>’);
switch($mode){
case “inserted”:
//row adding request
$action = insert_row();
break;
case “deleted”:
//row deleting request
$action = delete_row();
break;
default:
//row updating request
$action = update_row();
break;
}
//output update results
echo “”;
echo “”;
echo “”;
?>
a) The dataprocessor allows to update the ID of newly updated row ( it is a common use-case )
$query="insert into …
$db->query($query);
$newId = $db->get_new_id(); // get new ID for the record
return “inserted”;
This change will be enough to force data update on client side.
b) Technically, if you need to call something after inserting it can be done as
dp.attachEvent(“onAfterUpdate”,function(sid,action,tid){
if (action == “insert” ){
do_something();
}
return true;
})