Difference between revisions of "Formato de validación de duplicados"

From ABCD Wiki
Jump to: navigation, search
(Página creada con «Para explicar el proceso de validación de duplicados usaremos como ejemplo el campo del ISBN (tag 20 en las estructuras MARC) La validación de duplicados consiste en ub...»)
 
 
Line 1: Line 1:
Para explicar el proceso de validación de duplicados usaremos como ejemplo el campo del ISBN (tag 20 en las estructuras MARC)
+
Para explicar el proceso de validación de duplicados usaremos como ejemplo el campo del ISBN (tag 20 en las estructuras MARC). La validación de duplicados consiste en ubicar si ya existe en la base de datos otro registro con igual valor que el campo en proceso de validación. La forma más directa de realizar este proceso es a través de una búsqueda en la lista invertida. Si ya existe un término igual, entonces podemos asumir que el campo está duplicado.
La validación de duplicados consiste en ubicar si ya existe en la base de datos otro registro con igual valor que el campo en proceso de validación. La forma más directa de realizar este proceso es a través de una búsqueda en la lista invertida. Si ya existe un término igual, entonces podemos asumir que el campo está duplicado.
+
 
 
Sin embargo, ésto no es totalmente cierto, ya que en el proceso de edición de registros ya los campos han sido indizados en la base de datos por lo cual, al ya existir la clave, podríamos tener una condición de falso duplicado. Por ello hay que tomar ciertas previsiones para que nuestro formato cubra todas las posibilidades.
 
Sin embargo, ésto no es totalmente cierto, ya que en el proceso de edición de registros ya los campos han sido indizados en la base de datos por lo cual, al ya existir la clave, podríamos tener una condición de falso duplicado. Por ello hay que tomar ciertas previsiones para que nuestro formato cubra todas las posibilidades.
 
   
 
   
Line 11: Line 11:
 
Con la función L del lenguaje de formateo podemos determinar si ya existe en la lista invertida otro registros con la clave de búsqueda suministrada. Esta función devuelve el MFN del primer registro que contenga la clave solicitada. Si el ISBN está indizado con el prefijo IS_, tendríamos:
 
Con la función L del lenguaje de formateo podemos determinar si ya existe en la lista invertida otro registros con la clave de búsqueda suministrada. Esta función devuelve el MFN del primer registro que contenga la clave solicitada. Si el ISBN está indizado con el prefijo IS_, tendríamos:
  
If L('IS_'v20)<>0 then 'ISBN duplicado' fi  
+
        If L('IS_'v20)<>0 then 'ISBN duplicado' fi  
 
   
 
   
 
Como la validación se realiza sobre un registro virtual, es necesario suministrar en la función L el nombre de la lista invertida sobre la cual se va a aplicar la búsqueda
 
Como la validación se realiza sobre un registro virtual, es necesario suministrar en la función L el nombre de la lista invertida sobre la cual se va a aplicar la búsqueda
  
If L(['marc'] 'IS_'v20)<>0 then 'ISBN duplicado' fi
+
        If L(['marc'] 'IS_'v20)<>0 then 'ISBN duplicado' fi
 
   
 
   
 
Este formato funciona en creación de registros, pero no en la modificación, ya que el ISBN ya existe en la lista invertida. Por lo tanto la función L retornaría el MFN del registro que se está modificando.
 
Este formato funciona en creación de registros, pero no en la modificación, ya que el ISBN ya existe en la lista invertida. Por lo tanto la función L retornaría el MFN del registro que se está modificando.
 +
 
Esto nos dice que necesitamos comparar el MFN que nos devuelve la función L contra el MFN del registro que estamos procesando para determinar si ambos coinciden, lo cual anularía la condición de error.
 
Esto nos dice que necesitamos comparar el MFN que nos devuelve la función L contra el MFN del registro que estamos procesando para determinar si ambos coinciden, lo cual anularía la condición de error.
  
if l(['marc']|IS_|v20^a) <> 0 then  
+
    if l(['marc']|IS_|v20^a) <> 0 then  
  if l(['marc']|IS_|v20^a)<>MFN then 'ISBN duplicado', fi  
+
        if l(['marc']|IS_|v20^a)<>MFN then 'ISBN duplicado', fi  
fi
+
    fi
  
 
Como ya dijimos que la validación opera sobre un registro virtual, y el MFN de un registro virtual es siempre uno (1), la fórmula antes mencionada no produce ningún resultado confiable ya que la función L siempre retornaría 1.
 
Como ya dijimos que la validación opera sobre un registro virtual, y el MFN de un registro virtual es siempre uno (1), la fórmula antes mencionada no produce ningún resultado confiable ya que la función L siempre retornaría 1.
  
Para manejar esta circunstancia, cuando ABCD activa el proceso de validación, coloca en el campo 3333 el valor 0 si se trata de un registro nuevo, o el MFN del registro si se trata de un registro en proceso de edición. Por lo tanto, podemos expresar nuestro formato de validación de la siguiente manera:
+
Para manejar esta circunstancia, cuando ABCD activa el proceso de validación, coloca en el campo '''3333''' el valor '''0''' si se trata de un '''registro nuevo''', o el '''MFN''' del registro si se trata de un '''registro en proceso de edición'''. Por lo tanto, podemos expresar nuestro formato de validación de la siguiente manera:
 
+
    if l(['marc']|IS_|v20^a) <> 0 then  
if l(['marc']|IS_|v20^a) <> 0 then  
+
        if l(['marc']|IS_|v20^a)<>val(v3333) then 'ISBN duplicado', fi  
  if l(['marc']|IS_|v20^a)<>val(v3333) then 'ISBN duplicado', fi  
+
    fi
fi
 
 
 
 
De esta forma estamos verificando que no exista ningún registro con la clave solicitada y además que, en caso de existir, que el MFN del registro recuperado no sea igual al MFN del registro que se está procesando.
 
De esta forma estamos verificando que no exista ningún registro con la clave solicitada y además que, en caso de existir, que el MFN del registro recuperado no sea igual al MFN del registro que se está procesando.
  
 
Si deseamos restringir la validación de duplicados solo en el caso de creación de registros, el formato para validación de duplicados quedaría:
 
Si deseamos restringir la validación de duplicados solo en el caso de creación de registros, el formato para validación de duplicados quedaría:
  
if val(v3333)=0 then  
+
    if val(v3333)=0 then  
  if l(['marc']|IS_|v20^a) <> 0 then  'ISBN duplicado’ fi  
+
        if l(['marc']|IS_|v20^a) <> 0 then  'ISBN duplicado’ fi  
fi
+
    fi
 
   
 
   
Ejemplo de validación del número de control duplicado:
 
  
if val(v3333)=0 then  
+
'''Ejemplo de validación del número de control duplicado:'''
  if l(['marc']|CN_|v2) <> 0 then  'Control, duplicado ',v2 fi  
+
 
fi
+
    if val(v3333)=0 then  
 +
      if l(['marc']|CN_|v2) <> 0 then  'Control, duplicado ',v2 fi  
 +
    fi

Latest revision as of 17:39, 21 December 2013

Para explicar el proceso de validación de duplicados usaremos como ejemplo el campo del ISBN (tag 20 en las estructuras MARC). La validación de duplicados consiste en ubicar si ya existe en la base de datos otro registro con igual valor que el campo en proceso de validación. La forma más directa de realizar este proceso es a través de una búsqueda en la lista invertida. Si ya existe un término igual, entonces podemos asumir que el campo está duplicado.

Sin embargo, ésto no es totalmente cierto, ya que en el proceso de edición de registros ya los campos han sido indizados en la base de datos por lo cual, al ya existir la clave, podríamos tener una condición de falso duplicado. Por ello hay que tomar ciertas previsiones para que nuestro formato cubra todas las posibilidades.

Por otra parte, cuando se crea un nuevo registro, la validación se realiza sobre un registro virtual, por cuanto no existe un registro real. Por definición, el MFN de los registros virtuales tiene el valor 1, por lo que también hay que tomar ciertas previsiones para distinguir entre el MFN 1 del registro real y el MFN 1 del registro virtual.

El proceso de validación de registros siempre se realiza sobre un registro virtual por lo que nos toca tomar previsiones para diferenciar si estamos aplicando la validación sobre un registro nuevo o sobre un registro ya existente. El lenguaje de formateo provee el comando MFN para determinar el número mfn del registro que se está procesando. Como ya dijimos, no podemos utilizar esta facilidad ya que siempre nos devolvería 1, valor del MFN en el registro virtual.

Tomando en cuenta estos factores procederemos a desarrollar un formato para validación de duplicados.

Con la función L del lenguaje de formateo podemos determinar si ya existe en la lista invertida otro registros con la clave de búsqueda suministrada. Esta función devuelve el MFN del primer registro que contenga la clave solicitada. Si el ISBN está indizado con el prefijo IS_, tendríamos:

       If L('IS_'v20)<>0 then 'ISBN duplicado' fi 

Como la validación se realiza sobre un registro virtual, es necesario suministrar en la función L el nombre de la lista invertida sobre la cual se va a aplicar la búsqueda

       If L(['marc'] 'IS_'v20)<>0 then 'ISBN duplicado' fi

Este formato funciona en creación de registros, pero no en la modificación, ya que el ISBN ya existe en la lista invertida. Por lo tanto la función L retornaría el MFN del registro que se está modificando.

Esto nos dice que necesitamos comparar el MFN que nos devuelve la función L contra el MFN del registro que estamos procesando para determinar si ambos coinciden, lo cual anularía la condición de error.

    if l(['marc']|IS_|v20^a) <> 0 then 
       if l(['marc']|IS_|v20^a)<>MFN then 'ISBN duplicado', fi 
    fi

Como ya dijimos que la validación opera sobre un registro virtual, y el MFN de un registro virtual es siempre uno (1), la fórmula antes mencionada no produce ningún resultado confiable ya que la función L siempre retornaría 1.

Para manejar esta circunstancia, cuando ABCD activa el proceso de validación, coloca en el campo 3333 el valor 0 si se trata de un registro nuevo, o el MFN del registro si se trata de un registro en proceso de edición. Por lo tanto, podemos expresar nuestro formato de validación de la siguiente manera:

    if l(['marc']|IS_|v20^a) <> 0 then 
       if l(['marc']|IS_|v20^a)<>val(v3333) then 'ISBN duplicado', fi 
    fi

De esta forma estamos verificando que no exista ningún registro con la clave solicitada y además que, en caso de existir, que el MFN del registro recuperado no sea igual al MFN del registro que se está procesando.

Si deseamos restringir la validación de duplicados solo en el caso de creación de registros, el formato para validación de duplicados quedaría:

   if val(v3333)=0 then 
       if l(['marc']|IS_|v20^a) <> 0 then  'ISBN duplicado’ fi 
   fi

Ejemplo de validación del número de control duplicado:

   if val(v3333)=0 then 
      if l(['marc']|CN_|v2) <> 0 then  'Control, duplicado ',v2 fi 
   fi