Problemas en formuario_ml

Buenos días, estoy intentando hacer un formulario multilineas como enseñaron en el curso de toba, pero me da un error cuando quiero eliminar filas, el problema es que no me carga nada en el id cuando la operacion es baja, es decir,

$datos_ids[]=$fila['id'];

en esta parte del codigo, el array $datos_ids queda vacio, entonces cuando hacemos el array_diff, la variable $ids_baja me queda con los ids iniciales que es el valor del array s__datos_iniciales_ids cual puede ser el error? les paso el código. Saludos y desde ya muchas gracias.

<?php
class ci_area_conocimiento extends digesto_ci
{
    //-----------------------------------------------------------------------------------
    //---- Eventos ----------------------------------------------------------------------
    //-----------------------------------------------------------------------------------
    protected $s__datos;
    protected $s__datos_iniciales_ids;
    
    function evt__procesar()
    {
        $datos_ids=array();
        try{
            toba::db()->abrir_transaccion();
            foreach($this->s__datos as $clave =>$fila){
                $sql=" ";
                if($fila['apex_ei_analisis_fila']=='A'){
                    $sql="INSERT INTO area_conocimiento(denominacion)
                            VALUES (".quote($fila['denominacion']).");";
                    toba::db()->ejecutar($sql);
                }
                if($fila['apex_ei_analisis_fila']=='M'){
                    $sql="UPDATE area_conocimiento
                        SET denominacion =".quote($fila['denominacion'])."
                        WHERE id = ".quote($fila['id']).";";
                    toba::db()->ejecutar($sql);
                }
                    if($fila['apex_ei_analisis_fila']=='B'){
                    $datos_ids[]=$fila['id'];
                        //print_r($datos_id);
                        //toba::db()->ejecutar($sql);
                }
                
            }
            if(count($datos_ids) > 0){
                print_r($datos_id);
                //print_r($this->s__datos_iniciales_ids);
                $ids_baja=array_diff($this->s__datos_iniciales_ids, $datos_ids);
                    // print_r($ids_baja);
            }//else{
                //   $ids_baja=$this->s__datos_iniciales_ids;
            //}
            if(count($ids_baja > 0)){
                foreach($ids_baja as $id){
                    $sql="UPDATE area_conocimiento
                        SET estado= 0
                        WHERE id =".quote($id).";";
                    toba::db()->ejecutar($sql);
                    }
            }
            toba::db()->cerrar_transaccion();
            ei_arbol($this->s__datos_iniciales_ids);
            ei_arbol($datos_ids);
            ei_arbol($ids_baja);
            toba::notificacion()->agregar('Datos Grabados Correctamente', 'Info');
        }catch(toba_error_db $e){
            toba::db()->abortar_transaccion();
            ei_arbol($e);
            toba::notificacion()->agregar('Problemas en la Transaccion', 'Error');
            
            }
    }

    //-----------------------------------------------------------------------------------
    //---- formulario_ml ----------------------------------------------------------------
    //-----------------------------------------------------------------------------------

    function conf__formulario_ml(digesto_ei_formulario_ml $form_ml)
    {
        unset($this->s__datos_iniciales_ids);
        $sql="SELECT id, denominacion FROM area_conocimiento WHERE estado=1";
        $datos=toba::db()->consultar($sql);    
        $form_ml->set_datos($datos);
        foreach($datos as $fila){
            $this->s__datos_iniciales_ids[]=$fila['id'];
        }
    }

    function evt__formulario_ml__modificacion($datos)
    {
        print_r($datos);
        $this->s__datos=$datos;
    }

}
?>

Hola Walter,

hasta donde se, el ML cuando envia la fila borrada unicamente manda un identificador interno, no envia ninguna columna de las pertenecientes al formulario.
Con lo cual, yo iria recopilando los identificadores que si tuvieron modificaciones y los quitaria del conjunto inicial, con eso obtendria aquellos que ya no estan.
Los agregados no cuentan porque no estaban en el pedido anterior.

Luego a partir de alli, podes quitar las filas que no vinieron.
De todas maneras esa es la forma mas complicada de utilizar un ML, si lo usas con un DT en una linea resolves todo eso al hacer uso del metodo “procesar_filas”

Saludos