【问题标题】:Transformation failed BizTalk转换失败 BizTalk
【发布时间】: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


【解决方案1】:

我终于发现我的TryParseExact() 不好。

如果您遇到此类错误并且问题涉及日期时间,答案是 @Shar1er80 的回复 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-15
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多