// we switch off security for this one method! be carefull!
cnx->check_security = 0;
@co_call(par_area,'"generic"',"insertChild", par_area=>par_area,par_class=>par_class,par_id=>par_id, child_class=>child_class,child_prop=>child_prop, foreign_prop=>foreign_prop);



id_new = *(int *) cou_getReturnValue(cnx, CO_INTEGER, &err);

@co_call(par_area,par_class,"copyACL", par_area=>par_area,par_class=>par_class,par_id=>par_id, area_target=>par_area,class_target=>child_class,id_target=>id_new);


cnx->check_security = 1;
// security switched on again
/*
__CREATE_QUERY("INSERT INTO co_sec_acl
SELECT NEXTVAL('co_sec_acl_sqid'), version, deleted, id_permission, %d ,id_role, area, '%s'
FROM co_sec_acl
WHERE area = '%s' AND class_name = '%s' AND id_object = %d ",
id_new, child_class, par_area, par_class, par_id );
__SQL_EXEC
*/
if(create_params != NULL)
{
NParams = coa_GetElementCount(cnx, create_params);
for(ppos = 0; ppos < NParams; ppos+=2)
{
const char* prop_name = coa_GetElement(cnx, create_params, ppos);
const char* prop_value= coa_GetElement(cnx, create_params, ppos+1);
@co_call(par_area, child_class, "update",par_area=>par_area,par_class=>child_class,par_id=>id_new,par_prop=>prop_name,new_value=>prop_value,version=>0);
}
}

cou_setReturnValue(cnx, &id_new, CO_INTEGER);