Mapping Biztalk将日期映射到字符串

Mapping Biztalk将日期映射到字符串,mapping,biztalk,Mapping,Biztalk,我正在处理biztalk项目,并使用映射创建新消息 现在我想把一个日期字段映射成一个字符串 我想我可以用一个内嵌C的函数脚本这样做# 公共字符串convertDateTime(DateTime参数) { return System.Xml.XmlConvert.ToString(param,ÿyyyMMdd”); } 但这不起作用,我收到一个错误。我如何在地图中进行转换 这是一个Biztalk 2006项目。鉴于Biztalk中的映射是作为XSL样式表实现的,当将数据传递到msxsl脚本函数时,

我正在处理biztalk项目,并使用映射创建新消息

现在我想把一个日期字段映射成一个字符串

我想我可以用一个内嵌C的函数脚本这样做#

公共字符串convertDateTime(DateTime参数) { return System.Xml.XmlConvert.ToString(param,ÿyyyMMdd”); }

但这不起作用,我收到一个错误。我如何在地图中进行转换


这是一个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");
}