2017-04-06 125 views
-1

我使用在BizTalk地圖下面的腳本functoid將字符串轉換到日期時間擴展函數不能返回空值

public DateTime? ConvertOpenDate(string openDate) 
{ 
    DateTime oDate; 
    if (!DateTime.TryParseExact(openDate, "yyyy-MM-DD HH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out oDate)) 
    { 
     return null; 
    } 
    else 
    { 
     return oDate; 
    } 
} 

但它拋出錯誤說

擴展功能無法返回空值。

如何處理此問題。我將日期時間插入MS SQL DB

+0

我無法通過LinqPad中的快速測試來重現您的錯誤,但是您的日期格式字符串是錯誤的。使用小寫dd,而不是大寫DD在一個月的2位數日:https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx#ddSpecifier –

+0

大家好,這有與使用擴展方法無關。這是一個簡單的日期轉換。 –

+0

讓您的日期時間函數在轉換失敗時返回一個空字符串。在你的地圖中,檢查方法的返回值。如果它不爲空,則映射datetime字段,如果它爲空,則根本不發送日期元素。 –

回答

5

這是已知行爲:Known issues in BizTalk Server 2013,其解析爲「返回String.Empty或其他替代值以表示空方案」。

返回null不支持

症狀
當您從程序functoid返回空值,地圖失敗,您會收到以下一般性錯誤信息......

當您測試在Visual Studio中的相同地圖中,它提供了一個更具描述性的錯誤消息:
調用的目標引發了異常。擴展函數不能返回空值。

注意XslCompiledTransform類不支持從變換中調用的函數返回空值。

分辨率
返回String.Empty或其他替代值來表示空方案。如果需要,可以使用全局變量在多個函數中使空值可用。