Der Microsoft Dynamics AX2012 R3 bietet uns von hause aus schon einige Web Service mit deren Hilfe wir Daten aus dem AX konsumieren können. Hier bei möchte ich den QueryService Web Service hervorheben. Mit diesem lassen sich sowohl statische Querys aus dem AX ausführen als auch eigen Querys die in der Applikation definiert werden.
Hierdurch ist es uns möglich schnell und recht unkomplizierter Daten aus dem Microsoft AX 2012 R3 in einer App für Windows 8.1 oder Windows Phone 8.1 zu präsentieren.
hier ein kleines Beispiel für eine AX Query Ausführung:
Information zur Entwicklung von Windows Store, Windows Phone App und ASP.NET MVC Anwendungen
Posts mit dem Label Microsoft Dynamics AX2012 R3 werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Microsoft Dynamics AX2012 R3 werden angezeigt. Alle Posts anzeigen
Dienstag, 23. September 2014
Dienstag, 15. Juli 2014
Meine Blogs jetzt auch als App für Windows 8.1 und Windows Phone 8.1
Hallo zusammen,
hier jetzt auch mal ein Praktisches Beispiel für ein Universal-App für Windows 8.1 und Windows Phone 8.1 Apps. Ihr könnt nun meine Blogs auch über dies App folgen und seit so immer auf dem laufenden.
Ich könnt die App im Windows Store unter dem folgenden Link beziehen:
Windows 8.1
http://apps.microsoft.com/windows/app/ccs-blogreader/26d01b75-35e9-437f-8ac8-44eb8584538a
Windows Phone 8.1
http://www.windowsphone.com/s?appid=120d63f1-c3d4-4364-a1f6-0891cc93c8b6
hier jetzt auch mal ein Praktisches Beispiel für ein Universal-App für Windows 8.1 und Windows Phone 8.1 Apps. Ihr könnt nun meine Blogs auch über dies App folgen und seit so immer auf dem laufenden.
Ich könnt die App im Windows Store unter dem folgenden Link beziehen:
Windows 8.1
http://apps.microsoft.com/windows/app/ccs-blogreader/26d01b75-35e9-437f-8ac8-44eb8584538a
Windows Phone 8.1
http://www.windowsphone.com/s?appid=120d63f1-c3d4-4364-a1f6-0891cc93c8b6
Dienstag, 10. Juni 2014
Verwende von AX2012 Query Service aus Windows Store App
Mit Hilfe des AX2012 Web Service QueryService können direkt aus einer App das Ergebnis eines Query des AOT verwendet werden ( siehe hierzu: http://technet.microsoft.com/en-us/library/gg847959.aspx ) leider habe ich in den ganzen Beispielen die es im TechLab oder MSDN gibt keins gefunden was auch für eine Windows Store App und Windows 8.1 funktioniert. Jedoch konnte man Auch hier schnell die Funktionen umschrieben um es unter Windows 8.1 als Store App zu Verwendern.
Hier ein kleines Beispiel mit deren Hilfe man zu Beispiel Bestands Informationen ermittelt kann. Ich verwende hierfür eine Hilfsklasse DynamicAXConnector mit deren Hilfe ich auch dynamisch die Endpoint Adressen der Web Service steuern kann.
Listing DynamicAXConnector:
namespace DynamicAXConnectorExampel { public class DynamicAXConnector : IDisposable { #region Fields private string username = string.Empty; private string domainName = string.Empty; private string password = string.Empty; private string aosServer = string.Empty; private int port = 0; private WCFAdapters adapter; private AXQueryService.QueryServiceClient queryClient; #endregion #region Constructor public DynamicAXConnector(string username, string password, string aosServer, int wcfPort, WCFAdapters adapter) { this.aosServer = aosServer; this.adapter = adapter; this.port = wcfPort; this.password = password; string[] dom = username.Split('\\'); if (dom.Length > 0) { this.domainName = dom[0]; this.username = dom[1]; } } #endregion #region Methods public async Task> GetInventSummary() { ObservableCollection ret = new ObservableCollection (); try { EndpointAddress adr = this.NewEndPointAddress("QueryService", "DynamicsAx/Services/QueryService"); this.queryClient = new AXQueryService.QueryServiceClient(AXQueryService.QueryServiceClient.EndpointConfiguration.QueryServiceEndpoint, adr); this.queryClient.ClientCredentials.Windows.ClientCredential.Domain = this.domainName; this.queryClient.ClientCredentials.Windows.ClientCredential.UserName = this.username; this.queryClient.ClientCredentials.Windows.ClientCredential.Password = this.password; AXQueryService.ExecuteStaticQueryRequest req = new ExecuteStaticQueryRequest(); req.queryName = "ANXWin8InventSummary"; req.paging = null; AXQueryService.ExecuteStaticQueryResponse res = await this.queryClient.ExecuteStaticQueryAsync(req); List list = res.ExecuteStaticQueryResult.Nodes; ret = BoInventSummary.FetchDataByQueryService(list, "ANXWin8InventSummary"); } catch (Exception) { throw; } return ret; } public void Dispose() { this.client = null; this.response = null; } private EndpointAddress NewEndPointAddress(string addressHeader, string serviceName) { string uri = string.Empty; if (this.port == 0) { this.port = 8101; } switch (adapter) { case WCFAdapters.NetTcp: uri = string.Format("net.tcp://{0}:{1}/{2}", this.aosServer, (this.port + 100).ToString(), serviceName); break; case WCFAdapters.Http: uri = string.Format("http://{0}:{1}/{2}", this.aosServer, (this.port + 100).ToString(), serviceName); break; default: break; } EndpointIdentity id = new SpnEndpointIdentity(""); AddressHeader addressHeader1 = AddressHeader.CreateAddressHeader(addressHeader, uri, 1); AddressHeader[] addressHeaders = new AddressHeader[1] { addressHeader1 }; return new EndpointAddress(new Uri(uri), id, addressHeaders); } #endregion } }
public static ObservableCollectionFetchDataByQueryService(List list, string queryName) { ObservableCollection result = new ObservableCollection (); foreach (XElement item in list.Elements(queryName).Elements("InventTable")) { BoInventSummary bob = new BoInventSummary(); bob.ItemId = (string)item.Element("ItemId").Value; bob.Name = (string)item.Element("NameAlias").Value; foreach (XElement unit in list.Elements(queryName).Elements("InventTableModule")) { bob.UnitId = (string)unit.Element("UnitId").Value; break; } decimal physicalInvent = 0; decimal reservPhysical = 0; foreach (XElement sum in list.Elements(queryName).Elements("InventSum")) { if (((string)sum.Element("ItemId").Value).Equals((string)item.Element("ItemId").Value)) { physicalInvent += Convert.ToDecimal(sum.Element("PhysicalInvent").Value); reservPhysical += Convert.ToDecimal(sum.Element("ReservPhysical").Value); } } bob.PhysicalInvent = physicalInvent; . . . bob.ReservPhysical = reservPhysical; result.Add(bob); } return result; }
Abonnieren
Posts (Atom)