猿问

使用biztalk映射中的C#脚本中的ParseExact将字符串不识别为DateTime

地图的先前工作版本:

在此版本中,输入数据的类型为xs:date

地图的目标版本:

http://img2.mukewang.com/607a9afa0001ce7b08480321.jpg

在此版本中,我在平面文件中将数据类型更改为xs:string。我还添加了以下在新地图中突出显示的C#脚本:


public static System.DateTime MyConcat(string param1)

{   

    string[] formats = { "yyyy\\/MM\\/dd", "dd-MM-yyyy","yyyy-MM-dd", "dd\\/MM\\/yyyy" };

    return System.DateTime.ParseExact(param1, formats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None); 

}

http://img2.mukewang.com/607a9b090001675508680588.jpg

我将字符串'2018-03-15'传递给数据输入。


我得到的错误:


ABC.MW.BackEnds.CENTRAL.DocsInformacaoFinanceira.Balancete.Mappers.MapBalancete。错误:转换失败。---> System.Reflection.TargetInvocationException:调用的目标引发了异常。---> System.Xml.Xsl.XslTransformException:调用扩展功能'DateFormat'时发生错误。有关错误的完整说明,请参见InnerException。---> System.FormatException:无法将字符串识别为有效的DateTime。在System.DateTimeParse.ParseExact(String s,String format,DateTimeFormatInfo dtfi,DateTimeStyles样式)


从错误中我推断出问题是从字符串到日期时间的隐式转换。但是我不知道它可能在哪里发生。


我找到了错误的根源。这是上一个工作函数中的脚本调用的方法。


我认为xs:date和我的脚本返回的不是同一回事。


给出错误的函数代码:


 public string DateFormat(string value, string FormatoOrigem, string FormatoDestino)

        {

            DateTime myDate;


            if (string.IsNullOrEmpty(value))

                return ""; //myDate = DateTime.MinValue;

            else

                myDate = System.DateTime.ParseExact(value,

                                                FormatoOrigem,

                                                System.Globalization.CultureInfo.InvariantCulture);


            return myDate.ToString(FormatoDestino, System.Globalization.CultureInfo.InvariantCulture);

        }

调用该函数的脚本输入:

http://img1.mukewang.com/607a9b1f0001882208780543.jpg

慕妹3146593
浏览 219回答 2
2回答

白猪掌柜的

我们必须专门针对BizTalk运行时解决此问题。这DateFormat()是此错误的根源,因此您需要从那里开始。另外,请记住,有些时候DateTime是正确的,而返回String的时间是正确的。因此,许多人需要在某处更改返回类型。

万千封印

DateFormat函数参数是日期值和2种日期格式。脚本functoid进行的调用首先传递格式,最后传递值。当对方法ParseExact的调用使用格式而不是值时,这将导致函数DateFormat中的错误。
随时随地看视频慕课网APP
我要回答