I’m creating update code for dhtmlxGrid and all works well when i make update stuff
with one primary key…
But … in a case where i have 2 primary keys update process doesn’t work:
Here’s my code:
function config_employee_update($data_config)
{
$employee_id=$data_config->get_value(“employee_id”);
$day_of_week=$data_config->get_value(“day_of_week”);
$number_of_punches=$data_config->get_value(“number_of_punches”);
$working_hours=$data_config->get_value(“working_hours”);
$first_pin_ts=$data_config->get_value(“first_pin_ts”);
$first_pout_ts=$data_config->get_value(“first_pout_ts”);
$last_pin_ts=$data_config->get_value(“last_pin_ts”);
$last_pout_ts=$data_config->get_value(“last_pout_ts”);
$number_of_punches_holidays=$data_config->get_value(“number_of_punches_holidays”);
$working_hours_holidays=$data_config->get_value(“working_hours_holidays”);
$pin_ts_holidays=$data_config->get_value(“pin_ts_holidays”);
$pout_ts_holidays=$data_config->get_value(“pout_ts_holidays”);
mysql_query("UPDATE hr_aux.hs_hr_hours SET number_of_punches=’{$number_of_punches}’ , " .
"working_hours=’{$working_hours}’ , first_pin_ts=’{$first_pin_ts}’ , " .
"first_pout_ts=’{$first_pout_ts}’ , last_pin_ts=’{$last_pin_ts}’ , " .
"last_pout_ts=’{$last_pout_ts}’ , number_of_punches_holidays=’{$number_of_punches_holidays}’ , " .
"working_hours_holidays=’{$working_hours_holidays}’ , pin_ts_holidays=’{$pin_ts_holidays}’ , " .
"pout_ts_holidays=’{$pout_ts_holidays}’ " .
“where employee_id={$employee_id} . “AND” . day_of_week={$day_of_week}”);
$data_config->success(); //if you have made custom update - mark operation as finished
}
$config_grid->event->attach(“beforeUpdate”,“config_employee_update”);
$config_grid->render_sql(“select hs_hr_hours.employee_id, hs_hr_employee.emp_lastname,” .
“hs_hr_employee.emp_firstname, hs_hr_hours.day_of_week,” .
“hs_hr_hours.number_of_punches,hs_hr_hours.working_hours,hs_hr_hours.first_pin_ts,” .
“hs_hr_hours.first_pout_ts,hs_hr_hours.last_pin_ts,hs_hr_hours.last_pout_ts,” .
“hs_hr_hours.number_of_punches_holidays,hs_hr_hours.working_hours_holidays,” .
"hs_hr_hours.pin_ts_holidays,hs_hr_hours.pout_ts_holidays " .
"from hr_mysql.hs_hr_employee join hr_aux.hs_hr_hours " .
“on hs_hr_employee.emp_number=hs_hr_hours.employee_id”,
“employee_id,day_of_week”,“employee_id,emp_lastname,emp_firstname,day_of_week,number_of_punches,working_hours,” .
“first_pin_ts,first_pout_ts,last_pin_ts,last_pout_ts,number_of_punches_holidays,” .
“working_hours_holidays,pin_ts_holidays,pout_ts_holidays”);
In the definitio of render_sql commands i insered “first_primary_key,second_primary_key” …
could u tell my why doesn’t work?
N.B:
if i insert in the code one of the 2 primary key the update process works but obiviously not like i want…
is it a Syntax error?
Thank u
a) you are using both IDs as visible columns in grid, if they are editable it can cause inconsistence.
b) grid doesn’t support complex IDs , but you can define extra rules - how multiple values can be used to form the single ID
function config_employee_update($data){
$temp = explode("",$data->get_id());
$employee_id=$temp[0];
$day_of_week=$temp[1];
… other update code …
}
function config_employee_render($data){
$data->set_id($data->get_value(“employee_id”)."".$data->get_value(“day_of_week”));
}
$config_grid->event->attach(“beforeUpdate”,“config_employee_update”);
$config_grid->event->attach(“beforeRender”,“config_employee_render”);
as result , two values will be used to form the ID during rendering and during update , single value will be split to restore separate values.
Employee_id and day_of_week are not editable and only day_of_week are visible in the grid…however i don’t understand the code cause
u write two function with the same name…
Cam u pls explain me well the code for render and for update?
u write two function with the same name…
Above code is updated
>>Cam u pls explain me well the code for render and for update?
during rendering
$data->set_id($data->get_value(“employee_id”)."".$data->get_value(“day_of_week”));
we combine two fields , which you are using as primary ID , and built a string ID for the row|
during updating, we take row ID and split it back, restoring two separate ID values
$temp = explode("",$data->get_id());
$employee_id=$temp[0];
$day_of_week=$temp[1];
mmm…still something wrong… render_sql works well and in the employee_id columm i see 1_1 ( employee_id__day_of_week) … and could be ok.
but update not work…here is the code like u suggest me:
$config_grid = new GridConnector($res);
$config_grid->enable_log(“Log/config_timesheet_grid_connector.log”,true);
$config_grid->set_encoding(“ISO-8859-1”);
$config_grid->dynamic_loading(50);
//$config_grid->event->attach(“beforeRender”,giorno);
function config_employee_update($data_config)
{
$temp = explode("",$data_config->get_id());
$employee_id=$temp[0];
$day_of_week=$temp[1];
//$employee_id=$data_config->get_value(“employee_id”);
//$day_of_week=$data_config->get_value(“day_of_week”);
$number_of_punches=$data_config->get_value(“number_of_punches”);
$working_hours=$data_config->get_value(“working_hours”);
$first_pin_ts=$data_config->get_value(“first_pin_ts”);
$first_pout_ts=$data_config->get_value(“first_pout_ts”);
$last_pin_ts=$data_config->get_value(“last_pin_ts”);
$last_pout_ts=$data_config->get_value(“last_pout_ts”);
$number_of_punches_holidays=$data_config->get_value(“number_of_punches_holidays”);
$working_hours_holidays=$data_config->get_value(“working_hours_holidays”);
$pin_ts_holidays=$data_config->get_value(“pin_ts_holidays”);
$pout_ts_holidays=$data_config->get_value(“pout_ts_holidays”);
mysql_query("UPDATE hr_aux.hs_hr_hours SET number_of_punches=’{$number_of_punches}’ , " .
"working_hours=’{$working_hours}’ , first_pin_ts=’{$first_pin_ts}’ , " .
"first_pout_ts=’{$first_pout_ts}’ , last_pin_ts=’{$last_pin_ts}’ , " .
"last_pout_ts=’{$last_pout_ts}’ , number_of_punches_holidays=’{$number_of_punches_holidays}’ , " .
"working_hours_holidays=’{$working_hours_holidays}’ , pin_ts_holidays=’{$pin_ts_holidays}’ , " .
“pout_ts_holidays=’{$pout_ts_holidays}’ " .
“where employee_id={$employee_id} . AND . day_of_week={$day_of_week}”);
$data_config->success(); //if you have made custom update - mark operation as finished
}
function config_employee_render($data)
{
$data->set_id($data->get_value(“employee_id”).”".$data->get_value(“day_of_week”));
}
$config_grid->event->attach(“beforeUpdate”,“config_employee_update”);
$config_grid->event->attach(“beforeRender”,“config_employee_render”);
$config_grid->render_sql(“select hs_hr_hours.employee_id, hs_hr_employee.emp_lastname,” .
“hs_hr_employee.emp_firstname, hs_hr_hours.day_of_week,” .
“hs_hr_hours.number_of_punches,hs_hr_hours.working_hours,hs_hr_hours.first_pin_ts,” .
“hs_hr_hours.first_pout_ts,hs_hr_hours.last_pin_ts,hs_hr_hours.last_pout_ts,” .
“hs_hr_hours.number_of_punches_holidays,hs_hr_hours.working_hours_holidays,” .
"hs_hr_hours.pin_ts_holidays,hs_hr_hours.pout_ts_holidays " .
"from hr_mysql.hs_hr_employee join hr_aux.hs_hr_hours " .
“on hs_hr_employee.emp_number=hs_hr_hours.employee_id”,
“employee_id”,“employee_id,emp_lastname,emp_firstname,day_of_week,number_of_punches,working_hours,” .
“first_pin_ts,first_pout_ts,last_pin_ts,last_pout_ts,number_of_punches_holidays,” .
“working_hours_holidays,pin_ts_holidays,pout_ts_holidays”);
Can you please add the next line
$grid->enable_log(“some.txt”);
and provide the log records for the incorrect operation.
In the log u can see the same error at the top of Question:
====================================
Log started, 19/10/2009 06:10:24
====================================
SELECT DISTINCT first_pin_ts as value FROM hr_mysql.hs_hr_employee join hr_aux.hs_hr_hours on hs_hr_employee.emp_number=hs_hr_hours.employee_id
SELECT DISTINCT last_pin_ts as value FROM hr_mysql.hs_hr_employee join hr_aux.hs_hr_hours on hs_hr_employee.emp_number=hs_hr_hours.employee_id
SELECT hs_hr_hours.employee_id, hs_hr_employee.emp_lastname,hs_hr_employee.emp_firstname, hs_hr_hours.day_of_week,hs_hr_hours.number_of_punches,hs_hr_hours.working_hours,hs_hr_hours.first_pin_ts,hs_hr_hours.first_pout_ts,hs_hr_hours.last_pin_ts,hs_hr_hours.last_pout_ts,hs_hr_hours.number_of_punches_holidays,hs_hr_hours.working_hours_holidays,hs_hr_hours.pin_ts_holidays,hs_hr_hours.pout_ts_holidays FROM hr_mysql.hs_hr_employee join hr_aux.hs_hr_hours on hs_hr_employee.emp_number=hs_hr_hours.employee_id LIMIT 0,50
SELECT COUNT(*) as DHX_COUNT FROM hr_mysql.hs_hr_employee join hr_aux.hs_hr_hours on hs_hr_employee.emp_number=hs_hr_hours.employee_id
Done in 0.00667190551758s
====================================
Log started, 19/10/2009 06:10:28
====================================
DataProcessor object initialized
1__0_gr_id => 1__0
1__0_c0 => 1__0
1__0_c1 => PESCE
1__0_c2 => GIOVANNA
1__0_c3 => 0
1__0_c4 => 0
1__0_c5 => 0.00
1__0_c6 => 00:00:00
1__0_c7 => 00:00:00
1__0_c8 => 00:00:00
1__0_c9 => 00:00:00
1__0_c10 => 10
1__0_c11 => 0.00
1__0_c12 => 00:00:00
1__0_c13 => 00:00:00
1__0_!nativeeditor_status => updated
ids => 1__0
Row data [1__0]
Incorrect field name used: number_of_punches
data
Incorrect field name used: working_hours
data
Incorrect field name used: first_pin_ts
data
Incorrect field name used: first_pout_ts
data
Incorrect field name used: last_pin_ts
data
Incorrect field name used: last_pout_ts
data
Incorrect field name used: number_of_punches_holidays
data
Incorrect field name used: working_hours_holidays
data
Incorrect field name used: pin_ts_holidays
data
Incorrect field name used: pout_ts_holidays
data
Event code for update processed
Edit operation finished
0 => action:updated; sid:1__0; tid:1__0;
Done in 0.0105981826782s
Everytime it says incorrect data field…as i write at first post if i make update process with only one id in where clause:
mysql_query(“UPDATE hr_aux…where employee_id={$employee_id}”); the update process completes but
change obiviously too much data…
Please try to change
$temp = explode("",$data_config->get_id());
with
$temp = explode("@@",$data_config->get_id());
and
$data->set_id($data->get_value(“employee_id”)."".$data->get_value(“day_of_week”));
with
$data->set_id($data->get_value(“employee_id”)."@@".$data->get_value(“day_of_week”));
whao…it works…
my last question is:
i add a function in order to change value of day_of_week during render…all works…the only thing is that it logs me an error…
the function is:
function config_employee_render($data)
{
//$data->set_id($data->get_value(“employee_id”)."__".$data->get_value(“day_of_week”));
$data->set_id($data->get_value(“employee_id”)."@@".$data->get_value(“day_of_week”));
switch ($data->get_value(“day_of_week”))
{
case “0”:
$data->set_value(day_of_week,“Domenica”);
break;
case “1”:
$data->set_value(day_of_week,“Lunedì”);
break;
case “2”:
$data->set_value(day_of_week,“Martedì”);
break;
case “3”:
$data->set_value(day_of_week,“Mercoledì”);
break;
case “4”:
$data->set_value(day_of_week,“Giovedì”);
break;
case “5”:
$data->set_value(day_of_week,“Venerdì”);
break;
case “6”:
$data->set_value(day_of_week,“Sabato”);
break;
}
}
an the error is:
Use of undefined constant day_of_week - assumed ‘day_of_week’ at /var/www/punch1.0/includes/DataProcessor/config_timesheet_grid_connector.php line 96
how can i do?
thank u