我正在开发一个biztalk项目并使用地图来创建新消息。
现在我想将日期字段映射到字符串。
我以为我可以通过内联C#
的函数脚本以这种方式完成public string convertDateTime(DateTime param) { return System.Xml.XmlConvert.ToString(param,ÿyyyMMdd“); }
但这不起作用,我收到错误。我怎样才能在地图中进行转换?
这是Biztalk 2006项目。
答案 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)
此博客将解决您的问题。
此致 AboorvaRaja 班加罗尔 918123339872