Funcionamiento de setFieldByteArray()


([N1] rid0406) #1

Hola buenas, he estado probando el funcionamiento del setFieldByteArray() para intentar guardar la codificación en Base64 en un campo Objeto texto, y he encontrado algo muy curioso que puede que sea un bug o quizá no entienda muy bien el funcionamiento. La documentación dice:

void setFieldByteArray(Number nCampo, VByteArray baBuffer) o void setFieldByteArray(String szIDPrimarioCampo, VByteArray baBuffer)
Modifica el contenido de un campo de tipo objeto con el contenido de un objeto VByteArray. También se puede utilizar para campos que no sean de tipo objeto. El campo destino se especifica mediante su número de campo.
Parámetros:
– nCampo: Number que contiene la posición campo. El primer campo es 0.
– baBuffer: Buffer con el contenido del objeto VByteArray a grabar en el campo objeto.

Pues bien he hecho este codigo, los identificadores están modificados para que se entienda

importClass(“VImage”);
importClass(“VByteArray”);

var oByteArray = new VByteArray();
var oTexto = new VByteArray();
var oImage = new VImage();

var EdTexto = theRoot.dataView().control(“Caja_Texto”);
var EdImagen = theRoot.dataView().control(“Objeto_Dibujo”);

oImage = EdImagen.image();
oTexto.setText(EdTexto.text());

theRegisterIn.setFieldByteArray(“Campo_ObjetoTexto”, oTexto);
theRegisterIn.setFieldImage(“IMG”, oImage);
theRoot.dataView().saveRegister();
alert(“Alta Realizada”);

Pues bien en esta linea
theRegisterIn.setFieldByteArray(“Campo_ObjetoTexto”, oTexto);
Tanto si pongo el Identificador como la posición del campo correctas, no funciona y no me guarda nada.

Sin embargo, si pongo
theRegisterIn.setFieldByteArray(“pepe”, oTexto); // o simplemente “”
Detecta cual es el campo ObjetoTexto y guarda el oTexto ahí, lo hace automático y lo hace bien.

Y por probar he quitado el ID del campo, es decir
theRegisterIn.setFieldByteArray(oTexto);
Pero ya de esta forma me salta error y no funciona.

Creo que quizá deba guardar el oTexto, que es un ByteArray, en un campo Objeto Binario, pero no estoy seguro.
Alguna sugerencia sobre el funcionamiento?
Gracias por la atención

Att Daniel.


([N3] pacosatu) #2

Hola Daniel.

¿Por qué usas un ByteArray para guardar una cadena de texto Base64 en un campo Objeto texto?
No es necesario ya que la codificación en Base64 es un String.

De todas formas …
Si quieres obtener el Binario del Base64:
oByteArraBinario = new VByteArray();
oByteArraBinario.fromBase64(oTexto);

Si quieres guardar el Base64 del ByteArray a un campo Objeto texto:
// Obtienes un String del ByteArray
var cBase64 = oTexto.toLatin1String();
theRegisterIn.setField(“Campo_ObjetoTexto”,cBase64);

Saludos
Paco Satué


([N1] rid0406) #3

Es cierto, pensaba que al usar ByteArray ya se estaba codificando a binario para guardarla en el campo pero luego me di cuenta de que no hace falta guardarlo en binario pudiendo guardar la imagen una vez convertida a texto en un campo Objeto Texto.

Muchas gracias Paco :slight_smile: