Buenas a todos, estoy realizando un programa de facturacion electronica comprobantes T, está casi listo, le falta la última parte que es mostrar el resultado dependiendo del tipo de respuesta (response) que devuelve el web service de la AFIP.
Como dije arriba, dependiendo del resultado, quiero mostrar las respuestas (en un log) que me dan cuando se autoriza una factura o no.
El tema es que los tipos de arrays del response son un poco confusos y no sé como manejarlos. Dejo una parte del codigo y describo un poco las variables y la idea.
1. Declaro una variable response (o respuesta) de tipo AutorizarComprobanteReturnType que devuelve una respuesta con 5 campos:
* campo comprobanteResponse de tipo ComprobanteResponseType que tiene datos del comprobante autorizado, esto seguramente lo voy a ver después en otro hilo, ya que todavia no llegué a esa parte, es en caso de que la factura sea aceptada.
* campo arrayObservaciones de tipo ArrayCodigosDescripcionesType es un Array del tipo CodigoDescripcionType y que tiene dos campos Codigo (tipo short) y Descripcion (tipo string)
* campo arrayErrores (idem arrayObservaciones )
* campo arrayErroresFormato de tipo ArrayCodigosDescripcionesStringType es un Array de que es del tipo CodigoDescripcionStringType y que tambien tiene dos campos Codigo (tipo short) y Descripcion (tipo string)
* campo Resultado de tipo ResultadoSimpleType que es un string (una letra): Conjunto de valores permitidos: { 'A', 'O', 'R' }
El resultado que puede devolver es un A de Aceptado, R de Rechazado y O de Observaciones.
El tema es que cuando analizo el resultado con el Equals no entra en ninguno de los if y sigue de largo. Corriendolo paso a paso el respone.resultado tiene una letra R (Rechazado), el response.arrayErroresFormato tiene los codigo y las descripciones de los errores, y los otros campos: comprobanteResponse, arrayErroresFormato y arrayObservaciones bienen nulos, pero como dije arriba no entra a ningún if..
Preguntas: tengo que hacer una conversion del response.resultado? me falta declarar algo? como hago para que entre a los if.. e imprima los errores?.
Por la dudas dejo el manual, no es necesario que lo lean todo solo vean la pagina 16 y ahí describe los tipos de cada campo del AutorizarComprobanteReturnType
[URL="http://www.afip.gob.ar/fe/documentos/Manual_Desarrollador_WSCT_v01.pdf"]http://www.afip.gob.ar/fe/documentos/Manual_Desarrollador_WSCT_v01.pdf[/URL]
Parte del codigo:
Código:
logger.Info("Procesando Comprobante N°{0}", factura.ComprobanteRelacionado);
WSFECT.AutorizarComprobanteReturnType response = solicitarCAE.GetCAERequest(factura, servicio, AuthRequest);
if (response.resultado.Equals("R"))
{
logger.Info("Errores reportados por Web Service de la AFIP");
foreach (WSFECT.CodigoDescripcionType error in response.arrayErrores)
{
logger.Error("Codigo: {0}\nMensaje: {1}", error.codigo, error.descripcion );
}
logger.Info("Errores de Formato");
foreach (WSFECT.CodigoDescripcionStringType error in response.arrayErroresFormato)
{
logger.Error("Codigo: {0}\nMensaje: {1}", error.codigo, error.descripcion );
}
}
else if (response.resultado.Equals("O"))
{
if (response.arrayObservaciones != null)
{
logger.Info("Factura rechaza con observaciones");
foreach (WSFECT.CodigoDescripcionType observacion in response.arrayObservaciones)
{
logger.Error("Codigo: {0}\nMensaje: {1}", observacion.codigo, observacion.descripcion);
}
}
else
{
logger.Info("Factura rechazada sin observaciones");
}
}
else if (response.resultado.Equals("A"))
{
logger.Info("Factura aprobada con CAE N°: {0} con vencimiento {1}", response.comprobanteResponse.CAE, response.comprobanteResponse.fechaVencimientoCAE);
}
}