【发布时间】:2021-11-26 16:03:27
【问题描述】:
我在 Script functoid 中有一个带有 C# 脚本的地图,用于将 dd/MM/yyyy 格式的日期转换为 yyyy-MM-dd 格式:
这是我在 functoid 中使用的脚本:
public string CheckDate(string inputDate)
{
if(String.IsNullOrEmpty(inputDate))
return "";
else
{
System.DateTime dt = System.Convert.ToDateTime(inputDate);
return dt.ToString("yyyy-MM-dd");
}
}
由于未知原因,当我在 VS 中执行 Test Map 时,该脚本可以完美运行,它也可以在我的 DEV 环境中运行,但是当我将它部署在 UAT 上时,我收到了以下错误消息:
一般异常:执行转换时遇到错误 XXX。错误:转换失败..
我已经尝试使用TryParse() 或TryParseExact(),但映射行为仍然相同。从事 DEV 和测试映射,但不从事 UAT。
编辑
我从错误中捕获了 InnerException: System.Reflection.TargetInvocationException:调用的目标已引发异常。 ---> System.FormatException:字符串未被识别为有效的日期时间。 在 System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles 样式) 在 System.Convert.ToDateTime(字符串值) 在 System.Xml.Xsl.CompiledQuery.Script1.ConvertCompletedDate(String param)
所以问题是输入值,但我只在 UAT 环境下工作。此错误不会在 DEV 上引发。我检查了使用的 .NET 框架,它们在两个环境中都是相同的。
谁能告诉我如何将 18/11/2021 转换为有效的 DateTime 格式?
【问题讨论】:
-
那么 inputDate 的值是多少?您是否检查了 UAT 服务器与 DEV 上的日期/时间设置。您可能希望使用 ToDateTime(String, IFormatProvider) 重载来确保它使用的是您期望的格式
-
还可以尝试在其周围放置一个 try/catch 并在 catch 块中按原样输出 inputDate 以帮助调试。
-
InputDate 值:17/11/2021,我已经记录它以进行调试。我在这个脚本 functoid 中使用的代码已经在其他映射中使用,这些映射在 UAT 上运行良好,所以这不是设置问题。我已经尝试过 ToDateTime(String, IFormatProvider),同样的错误。 try/catch 没有提供有关错误的更多信息。
-
你确定它在那个 functoid 上失败了吗?错误消息没有说明清楚。
-
我通过删除 functoid 进行了测试,并且在没有它的情况下进行了转换。
标签: biztalk biztalk-2013