Mapping Biztalk将日期映射到字符串
我正在处理biztalk项目,并使用映射创建新消息 现在我想把一个日期字段映射成一个字符串 我想我可以用一个内嵌C的函数脚本这样做# 公共字符串convertDateTime(DateTime参数) { return System.Xml.XmlConvert.ToString(param,ÿyyyMMdd”); } 但这不起作用,我收到一个错误。我如何在地图中进行转换Mapping Biztalk将日期映射到字符串,mapping,biztalk,Mapping,Biztalk,我正在处理biztalk项目,并使用映射创建新消息 现在我想把一个日期字段映射成一个字符串 我想我可以用一个内嵌C的函数脚本这样做# 公共字符串convertDateTime(DateTime参数) { return System.Xml.XmlConvert.ToString(param,ÿyyyMMdd”); } 但这不起作用,我收到一个错误。我如何在地图中进行转换 这是一个Biztalk 2006项目。鉴于Biztalk中的映射是作为XSL样式表实现的,当将数据传递到msxsl脚本函数时,
这是一个Biztalk 2006项目。鉴于Biztalk中的映射是作为XSL样式表实现的,当将数据传递到
msxsl
脚本函数时,请注意,数据将是该函数中的等效.NET Framework类(类型)
中的一种类型。您将注意到System.DateTime
不在列表中
对于xs:dateTime
s的解析,我通常会获得/text()
节点,然后从系统中解析参数。String
:
<CreateDate>
<xsl:value-of select="userCSharp:GetDateyyyyMMdd(string(s0:StatusIdChangeDate/text()))" />
</CreateDate>
然后是C#脚本
如果您正在使用映射器,您只需要一个脚本函数(是的,使用内联C#),您应该能够执行以下操作:
public string convertDateTime(DateTime param)
{
return(param.ToString("YYYYMMdd");
}
据我所知,您无论如何都不需要调用System.Xml名称空间。我建议
public static string DateToString(DateTime dateValue)
{
return String.Format("{0:yyyyMMdd}", dateValue);
}
您还可以创建一个外部库,以提供更大的灵活性和可重用性:
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);
}
我倾向于将内联脚本中使用两次的每个函数移动到外部库中。Iit将为您的数据可能提供的所有边缘情况提供经过良好测试的代码,因为很容易为这些外部库函数创建测试,而很难在映射中的内联脚本上进行良好测试。如果没有错误的详细信息,您将看到ng很难确定,但我很确定您的映射失败了,因为BizTalk XSLT引擎中的所有参数都作为strings1传递 当我尝试运行类似于您作为内联C提供的函数时,会出现以下错误: “System.String”类型的对象无法转换为“System.DateTime”类型 将内联C#替换为以下内容:
public string ConvertDateTime(string param1)
{
DateTime inputDate = DateTime.Parse(param1);
return inputDate.ToString("yyyyMMdd");
}
请注意,参数类型现在是string,然后可以将其转换为DateTime并执行字符串格式
正如其他答案所建议的那样,最好将这个helper方法放入一个外部类中——这样您就可以对代码进行测试以处理边缘情况,并且还可以获得一些重用
1 BizTalk XSLT中的所有参数都是字符串这一事实可能是许多问题的根源——另一个常见问题是数学计算。如果您从脚本functoid返回数值,BizTalk将有助于将其转换为字符串以将其映射到出站架构,但不会有助于执行一些非常随机的rou在C#中自己将返回值转换为字符串将消除此风险并获得预期结果。此博客将解决您的问题 问候,, 阿博瓦拉贾 班加罗尔
+918123339872通常不允许仅链接答案,但显然链接给出了所述问题的解决方案,但如果您描述了解决方案过程并将链接声明为“完整”答案,则会更容易。
public string ConvertDateTime(string param1)
{
DateTime inputDate = DateTime.Parse(param1);
return inputDate.ToString("yyyyMMdd");
}