2014-06-12 63 views
1

我正在嘗試編寫一個.net類,它將一段xml轉換爲AX UtcDateTime類型。 該類用於入站轉換。AIF transfomrmations有效的UTCDateTime類型字符串格式是什麼?

原始的XML:

<DateTime> 
<Date>2014-06-12</Date> 
<Time>10:52:00</Time> 
<Zone>+02:00</Zone> 
</DateTime> 

我的結果XML導致在exeptionlog一個exeption:

「的值 '2014-06-12T12:52:00 + 02:00' 不是有效的UtcDateTime類型「。

我認爲AIF期望Z值在結尾,我不確定是否localDateTime是強制性的,或者如果毫秒是必需的。

我想知道如何格式化轉換後的xml中的UtcDateTime字段以便被AIF接受。

像這樣:

<MessageHeaderDateTime localDateTime="2014-06-12T10:52:00+02:00">2014-06-12T08:52:00Z</MessageHeaderDateTime> 

或像這樣:

<MessageHeaderDateTime localDateTime="2014-06-12T10:52:00.1108723+02:00">2014-06-12T08:52:00.1108723Z</MessageHeaderDateTime> 

或者其他的東西不見了?

我的代碼

DateTime netdttm = new DateTime(year, month, day, hour, minute, second, DateTimeKind.Utc); 
TimeSpan timespan = new TimeSpan(zhour, zminute, 0); 
DateTime netdttmoffset = netdttm.Subtract(timespan); 
datetime.Value = netdttmoffset; 
datetime.localDateTime = netdttmoffset.ToLocalTime(); 
datetime.localDateTimeSpecified = true; 

我使用了類似的appraoch的,我用utcnow的情況。

問題我,由於熱交換在我必須開發我的代碼的環境中發生混亂,所以測試可能性有限。所以我想確定格式。

謝謝你的幫助。

回答

2

我終於找到了它的工作。我的解決方案:如接受AX

//declare the AX utcdatetime type from the cs class generate with: 
//xsd C:\...\SharedTypes.xsd C:\..\AIFschema.xsd /Classes /Out:C:\location\of\csfile\ 
AxType_DateTime datetime = new AxType_DateTime(); 

//Ax store the time in GMT with an optional local time. My XML can have any timezone. 
datetime.timezone = AxdEnum_Timezone.GMT_COORDINATEDUNIVERSALTIME; 

//I set this to false as i am not interested in actually storing the local time. Plus AX fails over the formatting .net returns. 
datetime.timezoneSpecified = false; 

//{... left out code to retrieve the hours, minutes etc from my XML} 

//declare the .net datetime variable with the values from the xml: 
DateTime netdttm = new DateTime(year, month, day, hour, minute, second, millisecond, DateTimeKind.Utc); 
DateTime netdttmoffset = new DateTime(); 
// (optional field) <zone>+01:00</zone> 
if (message.Header.DateTime.Zone != null) 
{ 
    {... left out code to retrive zone offset info from xml} 

    TimeSpan timespan = new TimeSpan(zhour, zminute, 0); 
    netdttmoffset = netdttm.Subtract(timespan); 
} 
else //no zone, so datetime == GMT datetime. 
{ 
    netdttmoffset = netdttm; 
} 

datetime.Value = netdttmoffset; 
datetime.localDateTime = netdttmoffset.ToLocalTime(); 
//do not output to xml, or AX will fail over this. 
datetime.localDateTimeSpecified = false; 

結果XML片段:

<MessageHeaderDateTime>2014-07-30T16:41:10.001Z</MessageHeaderDateTime> 
+0

很高興聽到你好,你更新的問題! –

0
<dyn:StartDate>2014-06-22T00:00:00.000+02:00</dyn:StartDate> 

這種格式總是對我有用。 (注意毫秒)

+0

今天我添加了毫秒。太糟糕了,我仍然得到:'2013-12-28T14:15:00.001 + 01:00'的值不是有效的'UtcDateTime'類型。 – Steven

1

我發現這是更容易。如果您想要某個特定的日期時間,比如說2015年1月31日上午8點,要存儲在AX中,使其發生的.net代碼爲

DateTime utcDateTime = new DateTime(2015,1,31,8 ,0,0).ToUniversalTime();

 var workerStartDate = new AxdExtType_HcmEmploymentStartDateTime 
     { 
      Value = utcDateTime 
     }; 

產生將是XML是<WorkerStartDate> 2015-05-12T13:00:00Z </WorkerStartDate >,假設你是落後運行.NET代碼在計算機上GMT 5小時。 AX數據庫也會存儲值2015-05-12T13:00:00Z。

相關問題