lunes, 29 de noviembre de 2010

BC y nulos

Como parte de un trabajo de migracion de datos a partir de una planilla excel en la que podrian no venir todos los datos de la manera esperada, me propuse realizar la importacion  de las filas via BC.

Para ello todos los atributos de la transaccion afectada (menos la PK) fueron seteadas con nullable = yes.

Luego en el proceso una vez obtenido el emparejamiento de los atributos y las columnas del tipo Att = col, almacenados en un SDT para el proposito, realice la importacion con los siguientes pasos:

  1. &Xml = &Transaction1.toXml() // &xml (longvarchar) y &Transaction1 (BC)
  2. Por cada atributo que exista en el par Atributo, Columna
    • &Buscar = '<'+&Atributo+'/>' // buscamos el atributo vacio (los numericos tienen otro tratamiento)
    • &Reemplazar = '<'+&Atributo+'>'+&Dato+'</'+&Atributo+'>'
    • &Xml = &Xml.Replace(&Buscar,&Reemplazar)
  3. &Transaction1.FromXml(&Xml)
  4. &Transaction1.Save()
  5. Commit
Ahora bien, el problema se daba con las claves extranjeras que no estaban referenciadas, provocaba violacion de la integridad referencial.

A pesar de haber modificado las propiedades Empty As Null en la transaccion para cada atributo, me seguia rebotando.

Finalmente encontre una documentacion que hablaba que esa propiedad no funcionaba para BC por lo que habria que poner una regla del tipo ClaveExt.SetNull() if ClaveExt.isEmpty(); en la transaccion referenciada por el BC.

Con eso solucionamos el problema y pudimos migrar los datos correctamente (los que pudimos, el resto quedo en null).

En otra entrada voy a dar mas detalles de la solucion completa y presentar el asistente que creamos para la migracion que bien puede ser objeto de  un pattern que proximamente estaremos encarando.

No hay comentarios:

Publicar un comentario