es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La transformación falló en BizTalk.

Tengo un mapa con un script en C# en el functoide Script para convertir una fecha en formato dd/MM/yyyy a formato yyyy-MM-dd:

Aquí está el script que uso en mi functoide:

public string CheckDate(string inputDate)
{
if(String.IsNullOrEmpty(inputDate))
return "";
else
{
System.DateTime dt = System.Convert.ToDateTime(inputDate);
return dt.ToString("yyyy-MM-dd");
}
}

Por alguna razón desconocida, este script funciona perfectamente cuando hago una Prueba de mapa en VS, también funciona en mi entorno DEV, pero cuando lo implemento en UAT, obtengo este mensaje de error:

Excepción general: error encontrado durante la ejecución de la transformación
XXX. Error: Transformación fallida..

Ya intenté usar TryParse() o TryParseExact(), pero el comportamiento del mapeo sigue siendo el mismo. Funciona en DEV y en la prueba del mapeo, pero no en UAT.

EDICIÓN

Capturé la InnerException del error:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. —> System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
at System.Convert.ToDateTime(String value)
at System.Xml.Xsl.CompiledQuery.Script1.ConvertCompletedDate(String param)

Entonces el problema es el valor de entrada, pero solo no funciona en el entorno UAT. Este error no se produce en DEV. Verifiqué el marco .NET utilizado y son los mismos en ambos entornos.

¿Alguien puede decirme cómo puedo convertir 18/11/2021 en un formato DateTime válido?

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema encontrado es que la cadena “18/11/2021” no puede ser reconocida como un formato de fecha y hora válido. Esto podría ser causado por diferentes configuraciones regionales en el entorno UAT si son diferentes de las utilizadas en DEV.

    Una solución al problema es especificar las configuraciones culturales de manera explícita en el código de la transformación. Esto se puede lograr pasando un objeto CultureInfo así como DateTimeStyles al método Convert.ToDateTime. Por ejemplo, si el formato de fecha es dd/MM/yyyy, se puede utilizar el siguiente código:

    System.DateTime dt;
    CultureInfo provider = CultureInfo.InvariantCulture;
    DateTimeStyles styles = DateTimeStyles.None;
    
    if (DateTime.TryParseExact(inputDate, "dd/MM/yyyy", provider, styles, out dt))
    {
        return dt.ToString("yyyy-MM-dd");
    }
    else
    {
        return string.Empty;
    }
    

    Al utilizar este código, se asegura que el formato de la fecha de entrada sea reconocido correctamente utilizando las configuraciones culturales especificadas. Si la conversión es exitosa, se devuelve la fecha en el formato deseado (“yyyy-MM-dd”). De lo contrario, se devuelve una cadena vacía.

    Asegúrese de probar el mapa actualizado antes de implementarlo en el entorno UAT para garantizar que funcione como se espera.

Comments are closed.