AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: За рубежом > DAX auf Deutsch
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.06.2010, 01:05   #1  
Blog bot is offline
Blog bot
Участник
 
25,626 / 848 (80) +++++++
Регистрация: 28.10.2006
jinx: Dynamics AX AIF Webservices – Date, Time und Datetime Datentypen
Ein großer Vorteil des Application Integration Frameworks (AIF) gegenüber “selbstgeschriebene” Schnittstellen ist es, dass man sich über Dinge wie Datentyp-Mappingkeine Gedanken machen muss.
Das Application Integration Framework verfügt über die entsprechende Logik, um alleDynamic AX Datentypen automatisch in den jeweils gültigen XSD-Datentyp zu “mappen”(oder umgekehrt).

Zeiten, in denen sich der Entwickler zum Beispiel Gedanken machen musste, wie vieleNachkommastellen eine Zahl haben darf, oder welches Zeichen als Dezimaltrennzeichenverwendet werden muss, sind somit vorbei.
Da alle Daten die aus Dynamics AX exportiert oder nach Dynamics AX importiert werden,in einem XSD-Schema konformen XML-Dokument “transportiert” werden, und das AIF entsprechendesMapping bereits stellt, geschieht das Datentyp-Mapping automatisch.

Allerdings kann auf Seiten der Anwendung, welche über das Application IntegrationFramework (AIF) angebunden werden soll, ein wenig “Verwirrung” entstehen.
Durch die von Programmiersprache zu Programmiersprache durchaus unterschiedlichenDatentypen kann es vorkommen, dass Dynamics AX Datentypen nicht in dem erwartetenDatentyp der anderen Programmiersprache erscheinen.
Dies ist allerding kein “wirkliches” Problem des Application Integration Frameworks(AIF), sondern eher eine Frage, welche Datentypen eine Programmiersprache bereit stelltund wie diese in XSD-Datentypen “gemappt” werden.

Ein gutes Beispiel hierfür sind die Dynamics AX Datentypen “Date”, “Time” und “DateTime”(inklusive aller von diesen Basisdatentypen abgeleiteten EDT’s).

Ohne genauere Betrachtung liegt die Annahme nahe, dass ein DateTime Datentyp von DynamicsAX in einen DateTime Datentyp von z.B. C# “gemappt” wird.
Dies ist allerdings nicht richtig. Da nicht direkt zwischen Dynamics AX Datentyp undC# Datentyp gemappt wird, sondern immer von/zu einem XSD-Datentyp gemappt wird, wirdin C# eine neue Klasse hierfür erzeugt.

Ein wenig schwieriger wird es bei den beiden Dynamics AX Datentypen “Date” und “Time”.Für diese Datentypen wird z.B. in C# kein direkt vergleichbarer Datentyp bereit gestellt.
Diese Datentypen werden jeweils als C# DateTime Datentypen gemappt.

Das Mapping der Datentypen geschieht wie folgt:

Dynamics AX

XSD Schema

.NET (C#)

Date

xs:dateSystem.DateTime
Time

xs:timeSystem.DateTime
DateTime

xs:dateTimenew class
i.e. “AxdType_DateTime”
Da die beiden Dynamics AX Datentypen “Date” und “Time” in den C# Datentyp “DateTime”gemappt werden, kann an dieser Stelle leider ein kleines Problem entstehen.
In C# ist nun leider nicht mehr zu erkennen, um was für einen Dynamics AX Datentypes sich z.B. bei einem Feld handelt, und ob nun ein Datum oder eine Zeit in diesementhalten ist.

Oftmals entsteht diese Problem dadurch nicht, dass der jeweilige Business-Kontextdie Datentypverwendung entsprechend einschränkt und es somit teilweise egal ist obnun in ein Dynamics AX Date oder Time gemappt wird.
Ist es aber erforderlich zu wissen, um ob ein Feld nun den Dynamics AX Datentyp Dateoder Time hat, kann der generierte Code der Proxyklasse Aufschluss geben (oder dasXSD-Schema).

Durch die Angabe eines Serialisierungs-Attributes wird bestimmt, welcher “Teil” desDateTime Datentyps verwendet wird.
Für ein Feld, welches in einen Dynamics AX Date Datentyp gemappt wird, wird nur der“Datumsteil” in das XML-Dokument serialisiert.
Entsprechendes geschieht für einen Dynamics AX Time Datentyp.

Mapping eines C# Datetime Datentyps in einen Dynamics AX Date Datentyp (generierterCode der Proxyklasse):


1: [System.Xml.Serialization.XmlElementAttribute(DataType="date",IsNullable=true, Order=54)] 2: public System.NullableMyDateField { 3: get { 4: return this.myDateFieldField; 5: } 6: set { 7: this.myDateFieldField= value; 8: this.RaisePropertyChanged("MyDateField"); 9: } 10: }
.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }

Mapping eines C# Datetime Datentyps in einen Dynamics AX Time Datentyp (generierterCode der Proxyklasse):


1: [System.Xml.Serialization.XmlElementAttribute(DataType="time",IsNullable=true, Order=56)] 2: public System.NullableMyTimeField { 3: get { 4: return this.myTimeFieldField; 5: } 6: set { 7: this.myTimeFieldField= value; 8: this.RaisePropertyChanged("MyTimeField"); 9: } 10: }
.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }

Wie durch den generierten Code der Proxyklasse ersichtlich wird, wird nur der jeweilsbenötigte “Teil” eines C# Datetime Datentyps serialisiert/deserialisiert und somitverwendet.

Für einen Dynamics AX DateTime Datentyp wird bei Erstellung des Proxys eine neue Klassegeneriert. Somit kann der Dynamics AX Datentyp hierbei immer eindeutig identifiziertwerden.


1: [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.4016")] 2: [System.SerializableAttribute()] 3: [System.Diagnostics.DebuggerStepThroughAttribute()] 4: [System.ComponentModel.DesignerCategoryAttribute("code")] 5: [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.microsoft.com/dynamics/2008/01/documents/Customer")] 6: public partial class AxdType_DateTime: object, System.ComponentModel.INotifyPropertyChanged { 7: 8: private System.DateTimelocalDateTimeField; 9: 10: private bool localDateTimeFieldSpecified; 11: 12: private AxdEnum_TimezonetimezoneField; 13: 14: private bool timezoneFieldSpecified; 15: 16: private System.DateTimevalueField; 17: 18: [System.Xml.Serialization.XmlAttributeAttribute()] 19: public System.DateTimelocalDateTime ... 20: 21: [System.Xml.Serialization.XmlIgnoreAttribute()] 22: public bool localDateTimeSpecified... 23: 24: [System.Xml.Serialization.XmlAttributeAttribute()] 25: public AxdEnum_Timezonetimezone... 26: 27: [System.Xml.Serialization.XmlIgnoreAttribute()] 28: public bool timezoneSpecified... 29: 30: [System.Xml.Serialization.XmlTextAttribute()] 31: public System.DateTimeValue { 32: 33: public event System.ComponentModel.PropertyChangedEventHandlerPropertyChanged; 34: 35: protected void RaisePropertyChanged(string propertyName)... 36: }
.csharpcode, .csharpcode pre{ font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }

Dieses Verhalten ist nicht nur mit C# zu beobachten. Auch JAVA oder andere Programmiersprachenverhalten sich ähnlich und muss entsprechend berücksichtigt werden.


Es wird keine Haftung oder Gewährleistung auf die Richtigkeit der gemachten Angaben gegeben. Die Verwendung erfolgt auf eigene Gefahr. Copyright © Axel Kühn (Aku's AX Blog, http://blog.ak-home.net) and Mathias Füßler (jinx's AX Blog, http://starside.eu)

More...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
jinx: Dynamics AX – Macros und schließende Klammern Blog bot DAX auf Deutsch 0 05.06.2010 04:09
jinx: Dynamics AX AIF Webservices - Entwickeln und Testen Blog bot DAX auf Deutsch 0 28.02.2010 00:13
jinx: Dynamics AX – Query-Ranges und Filtereinstellungen des Benutzers Blog bot DAX auf Deutsch 0 04.02.2010 00:05
jinx: Dynamics AX – Batchserver, Berichte und Drucken in Dateien Blog bot DAX auf Deutsch 0 26.01.2010 04:05
jinx: Dynamics AX LookupForms – FindValue und Range auf gleichem Feld Blog bot DAX auf Deutsch 0 18.09.2009 03:13

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:12.