Importar JSON modificar registro


([N4] rpaton) #1

Hola:

Tengo un importador de JSON al que le paso la cadena JSON y los datos para que realice una búsqueda por el campo CODIGO. Si el resultado de la Búsqueda por el campo CODIGO es 0 (no lo encuentra) se añade el registro con los datos del JSON. Sim embargo, si el registro existe quiero modificar el registro con los datos de JSON utilizando registro.modifyRegister() pero no me modifica los datos del registro. ¿Qué puedo tener mal?

Saludos.

Ricardo Patón


//IMPORTADOR JAVASCRIPT
// Leemos variables del proceso
var delimitador = theRoot.varToString( "DELIMITADOR" );
// alert( "Delimitador: " + delimitador );
var fichero = theRoot.varToString( "FICHERO" );
// alert( "Fichero: " + fichero );
var formato = theRoot.varToString( "FORMATO" );
var szErrMsg ="";

//Importamos las clases que vamos a necesitar
var tabla = theRoot.varToString( "TABLA" );
importClass( "VQuery" );
var bus = new VQuery( theRoot );
bus.setQuery( "vTomCamp/"+tabla+"_CODIGO" );

// Definimos la tabla para la importación
var theMainProject = theApp.mainProjectInfo();

if ( theMainProject )
{
   // Parseamos el fichero y pasamos la información a un objeto	
   var objetoImportacion = JSON.parse( fichero );	

   if ( objetoImportacion ) 
   {
      // Abrimos transacción
      if (theRoot.beginTrans("Importación del fichero" ))
      {
         var bOK = true;
	
         // Recorremos las tablas
         for (var table in objetoImportacion )
         {  
             var objectInfoTablaImportacion = objectInfoTabla( table.toUpperCase() );
             var tableInfoTablaImportacion = tableInfoTabla( table.toUpperCase() );
							
             if ( objectInfoTablaImportacion )
             {
				
                for ( var element in objetoImportacion[table] )
                {
                    // Recorremos las filas
                    for ( var row in objetoImportacion[table][element] )
                    { 
                        // Creamos el registro		
                        var registro = new VRegister(theRoot);
			
                        var bRegistroCreado = registro.setTable( objectInfoTablaImportacion.idRef(), false ); // true: Disparar contenidos iniciales
					
                        if ( bRegistroCreado && registro && registro.isOK() )
                        {
                           for ( var field in objetoImportacion[table][element][row] )
                           { 
                               var campo = field;      
                               var dato = objetoImportacion[table][element][row][field];

                               // Comprobamos que el campo exista
                               if ( tableInfoTablaImportacion.findField( campo ) > -1 )
                               {						
                                  registro.setField( campo,  dato );
                               }
									
                               if ( campo == "CODIGO" )
                               {
                                  bus.setVar( "CODIGO", dato);	
                               }
                           }
								
								
                           if ( bus.exec() )
                           {
                              ListaResultados = bus.result();
                              if ( ListaResultados.listSize() == 0 )
                              {
                                 // Si el CODIGO no existe añadimos el registro
                                 registro.addRegister();
                                 bOK = registro.isOK();
                              }
                              else
                              {
                                 // Si el CODIGO  existe añadimos el registro
                                 registro.modifyRegister();
                              }
                           }
								
                        }
                        if ( !bOK )
                        {
                             // Se deshace la transacción
                             theRoot.revert();
                             // Mensaje de error
                             szErrMsg = "Error. No se ha podido crear el registro: " + j + ".\n" + szMsg + "\nFinializa el proceso y se deshace la transacción.";
                             theRoot.setVar( "ERROR", szErrMsg );
                        }
                    }
                }
             }
             else
             {
                // Mensaje de error
                szErrMsg = "Error. No se ha podido encontrar la tabla: " + table;
                theRoot.setVar( "ERROR", szErrMsg );
	     }
         }
      }	
      else
      {
         // Mensaje de error
         szErrMsg = "Error. No se ha podido iniciar la transacción.";
         theRoot.setVar( "ERROR", szErrMsg );
      }
   }
   else
   {
      // Mensaje de error
      szErrMsg = "Error. No se ha podido parsear el fichero json.";
      theRoot.setVar( "ERROR", szErrMsg );
   }	
}
else
{
	// Mensaje de error
	szErrMsg = "Error. No se ha encontrado el proyecto." ;
	theRoot.setVar( "ERROR", szErrMsg );
}

// Devuelve el objectInfo de la tabla si existe
function  objectInfoTabla( id )
{
	// Recorremos los objetos tabla  = 0
	for( var nIndex=0; nIndex < theMainProject.allObjectCount(0); nIndex++ )
	{
		// Obtenemos el objectInfo del objeto búsqueda
		var tablaProyecto = theMainProject.allObjectInfo( 0, nIndex );
		
		if ( tablaProyecto && tablaProyecto.id() == id )
			return tablaProyecto;
	}
	return false;
}

// Devuelve el tableInfo de la tabla si existe
function  tableInfoTabla( id )
{
	// Recorremos los objetos tabla  = 0
	for( var nIndex=0; nIndex < theMainProject.allTableCount(0); nIndex++ )
	{
		// Obtenemos el objectInfo del objeto búsqueda
		var tablaProyecto = theMainProject.allTableInfo( nIndex );
		
		if ( tablaProyecto && tablaProyecto.id() == id )
			return tablaProyecto;
	}
	return false;
}


([N4] rpaton) #2

Hola:

Solucionado. 
Adjunto el código por si le hace falta a alguien.

Saludos.

Ricardo Patón

//IMPORTADOR JSON JAVASCRIPT
// Leemos variables del proceso
var fichero = theRoot.varToString( "FICHERO" );
var tabla = theRoot.varToString( "TABLA" );
var szErrMsg ="";

nSize = 0;

//Importamos las clases que vamos a necesitar
importClass( "VQuery" );
var bus = new VQuery( theRoot );
bus.setQuery( "vTomCamp/"+tabla+"_CODIGO" );

// Definimos la tabla para la importación
var theMainProject = theApp.mainProjectInfo();

if ( theMainProject ) {
	// Parseamos el fichero y pasamos la información a un objeto	
	var objetoImportacion = JSON.parse( fichero );	
	
	if ( objetoImportacion ){
		// Abrimos transacción
		if (theRoot.beginTrans("Importación del fichero" )){
			var bOK = true;
			
			// Recorremos las tablas
			for (var table in objetoImportacion ) {
				var objectInfoTablaImportacion = objectInfoTabla( table.toUpperCase() );
				var tableInfoTablaImportacion = tableInfoTabla( table.toUpperCase() );
								
				if ( objectInfoTablaImportacion ){
				
					for ( var element in objetoImportacion[table] ){
						// Recorremos las filas bdel JSON
						for ( var row in objetoImportacion[table][element] ){ 
							var registro = new VRegister(theRoot);
							for ( var field in objetoImportacion[table][element][row] ){ 
								var campo = field;
								var dato = objetoImportacion[table][element][row][field];
						
								if ( campo == "CODIGO" ){
									bus.setVar( "CODIGO", dato);	
								}
						    }
							if ( bus.exec() ){
					            ListaResultados = bus.result();
						        nSize = ListaResultados.listSize();
							}				
				            // Buscamos si el CODIGO ya existe: Si Existe se modifican los Campos. En caso contrario se añade Registro.			
							if ( nSize == 0 ){
								// Creamos el registro		
					            var registro = new VRegister(theRoot);
					            var bRegistroCreado = registro.setTable( objectInfoTablaImportacion.idRef(), false ); // true: Disparar contenidos iniciales
					            if ( bRegistroCreado && registro && registro.isOK() ) {
						           for ( var field in objetoImportacion[table][element][row] ){ 
						               var campo = field;
							           var dato = objetoImportacion[table][element][row][field];
							           // Comprobamos que el campo exista
							           if ( tableInfoTablaImportacion.findField( campo ) > -1 ) {						
							              registro.setField( campo,  dato );										
							           }
						           }
							       // Si todo ha ido bien, damos de alta el registro y lo añadimos a la salida
							       registro.addRegister();										
							       bOK = registro.isOK();
						        }
					            if ( !bOK ){
						           //Se deshace la transacción
						           theRoot.revert();
						           // Mensaje de error
						           szErrMsg = "Error. No se ha podido crear el registro: " + j + ".\n" + szMsg + "\nFinializa el proceso y se deshace la transacción.";
						           theRoot.setVar( "ERROR", szErrMsg );
					            }
							}
							else {
							   // Seleccionamos primer registro de la búsqueda en modo lectura/escritura
							   var registro = ListaResultados.readLockingAt(0);
                               if (registro.isOK()){
                                  for ( var field in objetoImportacion[table][element][row] ){ 
						              var campo = field;
							          var dato = objetoImportacion[table][element][row][field];
							          // Comprobamos que el campo exista
							          if ( tableInfoTablaImportacion.findField( campo ) > -1 ) {						
								         registro.setField( campo,  dato );									 
								      }
						          }         
                                  registro.modifyRegister();
                                  if (!registro.isOK()){ 
                                      //alert("Error al Modificar");
                                  }
					           }	
							}
				        }
					}
	     	    }	
		        else {
		           // Mensaje de error
		           szErrMsg = "Error. No se ha podido encontrar la tabla: " + table;
			       theRoot.setVar( "ERROR", szErrMsg );
		        }	
	        }	
		}
	    else {
	       // Mensaje de error
		   szErrMsg = "Error. No se ha podido iniciar la transacción.";
		   theRoot.setVar( "ERROR", szErrMsg );
	    }
	}
	else {
		// Mensaje de error
		szErrMsg = "Error. No se ha podido parsear el fichero json.";
		theRoot.setVar( "ERROR", szErrMsg );
	}	
}
else {
	// Mensaje de error
	szErrMsg = "Error. No se ha encontrado el proyecto." ;
	theRoot.setVar( "ERROR", szErrMsg );
}

// Devuelve el objectInfo de la tabla si existe
function  objectInfoTabla( id )
{
	// Recorremos los objetos tabla  = 0
	for( var nIndex=0; nIndex < theMainProject.allObjectCount(0); nIndex++ )
	{
		// Obtenemos el objectInfo del objeto búsqueda
		var tablaProyecto = theMainProject.allObjectInfo( 0, nIndex );
		
		if ( tablaProyecto && tablaProyecto.id() == id )
			return tablaProyecto;
	}
	return false;
}

// Devuelve el tableInfo de la tabla si existe
function  tableInfoTabla( id )
{
	// Recorremos los objetos tabla  = 0
	for( var nIndex=0; nIndex < theMainProject.allTableCount(0); nIndex++ )
	{
		// Obtenemos el objectInfo del objeto búsqueda
		var tablaProyecto = theMainProject.allTableInfo( nIndex );
		
		if ( tablaProyecto && tablaProyecto.id() == id )
			return tablaProyecto;
	}
	return false;
}