Biztalk将Date映射到String

时间:2010-07-27 10:16:28

标签: mapping biztalk

我正在开发一个biztalk项目并使用地图来创建新消息。

现在我想将日期字段映射到字符串。

我以为我可以通过内联C#

的函数脚本以这种方式完成

public string convertDateTime(DateTime param) {   return System.Xml.XmlConvert.ToString(param,ÿyyyMMdd“); }

但这不起作用,我收到错误。我怎样才能在地图中进行转换?

这是Biztalk 2006项目。

5 个答案:

答案 0 :(得分:2)

如果没有错误的详细信息,您很难确定,但我确信您的地图失败了,因为BizTalk XSLT引擎中的所有参数都以字符串 1 传递

当我尝试运行您提供的内联C#函数时,我收到以下错误:

  

“System.String”类型的对象无法转换为“System.DateTime”类型

用以下内容替换你的内联C#:

public string ConvertDateTime(string param1)
{
    DateTime inputDate = DateTime.Parse(param1);
    return inputDate.ToString("yyyyMMdd");
}

请注意,参数类型现在是字符串,然后您可以将其转换为DateTime并执行字符串格式。

正如其他答案所暗示的那样,将这个辅助方法放入外部类中可能会更好 - 这样你就可以让你的代码在测试中来处理边缘情况,并且你也可以重用一些。


1 BizTalk XSLT中的所有参数都是字符串的事实可能是许多陷阱的来源 - 另一个常见的是数学计算。如果从脚本functoid返回数值,BizTalk将有助于将它们转换为字符串以将它们映射到出站模式,但不会如此有用地对结果值执行一些非常随机的舍入。在C#中自己将返回值转换为字符串将消除此风险并为您提供预期的结果。

答案 1 :(得分:1)

如果你正在使用映射器,你只需要一个Scripting Functiod(是的,使用内联C#),你应该可以这样做:

public string convertDateTime(DateTime param)
{
    return(param.ToString("YYYYMMdd");
}

据我所知,无论如何都不需要调用System.Xml命名空间。

答案 2 :(得分:0)

鉴于BizTalk中的地图是作为XSL样式表实现的,当将数据传递到msxsl脚本函数时,请注意该数据将是此table here Equivalent .NET Framework Class (Types)中的一种类型。您会注意到System.DateTime不在列表中。

对于xs:dateTime的解析,我通常获得/text()节点,然后从System.String解析参数:

<CreateDate>
    <xsl:value-of select="userCSharp:GetDateyyyyMMdd(string(s0:StatusIdChangeDate/text()))" />
</CreateDate>

然后是C#脚本

<msxsl:script language="C#" implements-prefix="userCSharp">
<![CDATA[
public System.String GetDateyyyyMMdd(System.String p_DateTime)
{
    return System.DateTime.Parse(p_DateTime).ToString("yyyyMMdd");
}
]]>

答案 3 :(得分:0)

我建议

public static string DateToString(DateTime dateValue)
{
    return String.Format("{0:yyyyMMdd}", dateValue);
}

您还可以创建一个外部Lib,它将提供更大的灵活性和可重用性:

public static string DateToString(DateTime dateValue, string formatPicture)
{
    string format = formatPicture;

    if (IsNullOrEmptyString(formatPicture)
    {
        format = "{0:yyyyMMdd}";
    }

    return String.Format(format, dateValue);
}

public static string DateToString(DateTime dateValue)
{
    return DateToString(dateValue, null);
}

我倾向于将内联脚本中使用的每个函数移动到外部lib中。 Iit将为您提供数据可能提供的所有边缘情况的经过良好测试的代码,因为它可以为这些外部lib函数创建测试,而很难对地图中的内联脚本进行良好的测试。

答案 4 :(得分:0)

此博客将解决您的问题。

http://biztalkorchestration.blogspot.in/2014/07/convert-datetime-format-to-string-in.html?view=sidebar

此致 AboorvaRaja 班加罗尔 918123339872