<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="de" xmlns="http://www.w3.org/2005/Atom">
  <title>Aku's AX Blog</title>
  <link rel="alternate" type="text/html" href="http://blog.ak-home.net/" />
  <link rel="self" href="http://blog.ak-home.net/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2008-11-05T19:06:49.62075+01:00</updated>
  <author>
    <name>Axel Kühn</name>
  </author>
  <subtitle>...feel the spirit of Microsoft Dynamics AX</subtitle>
  <id>http://blog.ak-home.net/</id>
  <generator uri="http://www.dasblog.net" version="1.9.6264.0">DasBlog</generator>
  <entry>
    <title>Dynamics AX 2009 AIF - Aufruf der Dokumentkorrelierung im Dokumentverlauf</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,0b55aa90-c644-4505-9fa7-5a99d7c4a2d0.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,0b55aa90-c644-4505-9fa7-5a99d7c4a2d0.aspx</id>
    <published>2008-11-05T19:06:49.62075+01:00</published>
    <updated>2008-11-05T19:06:49.62075+01:00</updated>
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <category term="Dynamics Ax/HowTo" label="Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cHowTo.aspx" />
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <category term="Dynamics AX/AIF" label="Dynamics AX/AIF" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cAIF.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Microsoft Dynamics AX 2009 bietet die Möglichkeit, den Verlauf eines Dokuments, welches
über das AIF exportiert oder importiert wurde zu betrachten.<br />
Dies war auch schon mit Microsoft Dynamics AX 4.0 möglich.
</p>
        <p>
Über die Maske "Dokumentverlauf" können alle Dokumente/Nachrichten eingesehen werden,
welche über das AIF verarbeitet wurden.<br />
Über den Button "Korrelation" ist es sogar möglich, die von der Verarbeitung (schreiben,
ändern, lesen, etc.) betroffenen Datensätze anzuzeigen.
</p>
        <p>
        </p>
        <p>
          <img src="http://blog.ak-home.net/content/binary/AIFFehler_Maske2.jpg" border="0" />
        </p>
        <p>
So ist es zumindest in der Theorie.<br />
In der Praxis sieht es leider etwas anders aus. Nach einem Klick auf den Button "Korrelation"
öffnet sich leider nicht wie erwartet die Maske "Dokumentkorrelierung".<br />
Stattdessen wird der Debugger (wenn installiert) geöffnet und die Fehlermeldung
ausgegeben, dass ein Objekt nicht über die Methode "extendedTypeId" verfügt.
</p>
        <p>
          <img src="http://blog.ak-home.net/content/binary/AIFFehler2.jpg" border="0" />
        </p>
        <p>
So wie es scheint, hat sich in den Quellcode ein kleiner Fehler eingeschlichen, welcher
dazu führt, dass die Maske "Dokumentkorrelierung" niemals geöffnet werden kann.<br />
Nach einem Vergleich der Funktionalitäten zwischen Dynamics AX 4.0 und Dynamics AX
2009 kann dieses Verhalten (der Fehler) aber wie folgt beschrieben behoben werden.
</p>
        <ol>
          <li>
AOT öffnen und zu der Tabelle "AifCorrelation" navigieren. 
</li>
          <li>
Den Quelltext der Methode "displayEntityKey" anzeigen lassen bzw. diese für die Bearbeitung
öffnen. 
</li>
          <li>
Folgende Quelltextzeile suchen:<br /><font face="Courier New">dictField = new <strong>DictField</strong>(entityKey.parmTableId(),
enumerator.currentKey());</font></li>
          <li>
Dieses Zeile abändern in:<br /><font face="Courier New">dictField = new <strong>SySDictField</strong>(entityKey.parmTableId(),
enumerator.currentKey());</font></li>
        </ol>
        <p>
Nach dieser kleinen Quelltextänderung sollte alles wie erwartet funktionierten und
die Maske "Dokumentkorrelierung" mit den entsprechenden Datensätzen angezeigt werden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=0b55aa90-c644-4505-9fa7-5a99d7c4a2d0" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Microsoft Dynamics AX 2009, Windows Server 2008 und SQL Server 2008</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,3eb33918-8a0c-479f-b368-26ea77b0be46.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,3eb33918-8a0c-479f-b368-26ea77b0be46.aspx</id>
    <published>2008-10-12T17:43:26.9404672+02:00</published>
    <updated>2008-10-12T17:54:53.3691808+02:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <category term="Dynamics Ax/Administration" label="Dynamics Ax/Administration" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cAdministration.aspx" />
    <category term="SQL Server" label="SQL Server" scheme="http://blog.ak-home.net/CategoryView,category,SQL%2BServer.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Im wieder taucht in den Newsgroups und einschlägigen Foren die Frage auf, ob es möglich
ist, Dynamics AX 2009 unter Windows Server 2008 und/oder in Verbindung mit SQL Server
2008 zu betreiben.
</p>
        <p>
Die Antwort auf diese Frage lautet eigentlich „Ja“, zugleich aber auch „Nein“.
</p>
        <p>
Offiziell sind die beiden Produkte zwar noch nicht für die Verwendung mit Dynamics
AX 2009 freigegeben, aber prinzipiell funktioniert Dynamics AX 2009 auch mit dieser
Systemkonfiguration (Kernfunktionalität).<br />
Allerdings muss auch erwähnt werden, dass der eine oder andere Punkt bei der Installation
bzw. beim Betrieb von Dynamics AX 2009 mit Windows Server 2008 und/oder dem SQL Server
2008 für Verwirrung sorgen kann.
</p>
        <p>
So wird, nach erfolgreicher Installation der Basiskomponenten von Dynamics AX 2009
und anschließendem AOS Start, eine Fehlermeldung im Ereignisprotokoll von Windows
Server 2008 erzeugt, welche aussagt, dass Dynamics AX 2009 (genauer der AOS) das gewählte
Betriebssystem nicht unterstützt.
</p>
        <p>
          <img src="http://blog.ak-home.net/content/binary/Eventlog nach AOS start.jpg" border="0" />
        </p>
        <p>
Ungeachtet dieser Fehlermeldung, läuft der AOS Dienst von Dynamics AX 2009 unter Windows
Server 2008 ohne weitere Probleme. Unschön ist nur, dass diese Meldung bei jedem Start
des AOS erzeugt wird.
</p>
        <p>
Für die Verwendung des Enterprise Portals bzw. des Rolecenters muss beachtet werden,
dass wie im Installation Guide von Dynamics AX 2009 beschrieben, die Sharepoint Services
3.0 mit SP1 verwendet werden müssen, da frühere Versionen nicht richtig unter Windows
Server 2008 laufen.
</p>
        <p>
Ein weiterer Punkt der unbedingt beachtet werden sollte, sind die Reporting-Erweiterungen
von Dynamics AX 2009.<br />
Eine Installation der Reporting-Erweiterungen ist derzeit leider nur möglich, wenn
die Reporting Services des SQL Server 2005 in der Service Pack Version 2 verwendet
werden.<br />
Sollen die Reporting Services des SQL Server 2008 verwendet werden, scheitert es schon
an der Installation der Reporting-Erweiterungen von Dynamics AX 2009.<br />
Diese lassen sich in einer solchen Systemumgebung erst gar nicht installieren. Das
Setup wird durch eine entsprechende Fehlermeldung abgebrochen.
</p>
        <p>
          <img src="http://blog.ak-home.net/content/binary/Fehler_ReportingServices.jpg" border="0" />
        </p>
        <p>
Dies hat zur Folge, dass die Reporting Services des SQL Server 2008 nicht mit Dynamics
AX 2009 verwendet werden können.
</p>
        <p>
Gleiches gilt für die Analysis Extensions von Dynamics AX 2009 in Kombination mit
den Analysis Services des SQL Server 2008.<br />
Diese lassen sich zwar ohne Problem installieren, aber eine Verarbeitung der Cubes
ist nicht möglich, da diese auf Grund von Verarbeitungsfehlern abgebrochen wird.
</p>
        <p>
          <img src="http://blog.ak-home.net/content/binary/Cubeverarbeitung_fehler.jpg" border="0" />
        </p>
        <p>
Schlussendlich bedeutet dies, dass die Verwendung von Windows Server 2008 als Betriebssystem
für Dynamics AX 2009 keine Probleme bereiten sollte.
</p>
        <p>
Für die reinen Datenbankdienste von SQL Server 2008 trifft dies ebenfalls zu. In meinen
Test konnte ich keinerlei Probleme beim Betrieb mit Dynamics AX 2009 erkennen.<br />
Anderes gilt für die Reporting und Analysis Services von SQL Server2008. Deren Verwendung
ist leider noch nicht möglich und es müssen weiterhin die Reporting und Analysis Services
des SQL Server 2005 verwendet werden um alle möglichen Funktionalitäten von Dynamics
AX 2009 zur Verfügung stellen zu können.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=3eb33918-8a0c-479f-b368-26ea77b0be46" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Vortragsfolien des Dynamics Technical Airlift 2008 und Dynamics ERP-Launch </title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,def34208-06f0-465d-a783-2dc2b7edac1a.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,def34208-06f0-465d-a783-2dc2b7edac1a.aspx</id>
    <published>2008-10-03T17:14:32.75+02:00</published>
    <updated>2008-10-03T17:25:08.15625+02:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Im Microsoft Partner Portal stehen die Präsentationsfolien der Vorträge, die
beim Dynamics AX Technical Airlift 2008 sowie dem Dynamics ERP-Launch, gehalten
wurden zum download bereit.
</p>
        <p>
Die Präsentationsfolien können über folgenden Link gedownloaded werden.<br /><a href="https://partner.microsoft.com/germany/40082086">Microsoft Dynamics ERP-Launch
und Technical Airlift - Vortragsfolien</a></p>
        <p>
 
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=def34208-06f0-465d-a783-2dc2b7edac1a" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Dynamics Technical Airlift 2008 - Rückblick</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,b7194b65-1d38-4c94-9a5f-75460351f3a6.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,b7194b65-1d38-4c94-9a5f-75460351f3a6.aspx</id>
    <published>2008-09-12T16:45:45.421+02:00</published>
    <updated>2008-09-12T17:29:54.6875+02:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Am 9. September 2008 fand der Dynamics Technical Airlift 2008 in Fürstenfeldbruck
bei München statt. Wie auch schon im letzten Jahr, richtete sich die Veranstaltung
an die eher technisch ausgerichteten Personen (Consultants/Entwickler) aus der Dynamics-Gemeinde.
</p>
        <p>
Ich selbst durfte in diesem Jahr als ATE (Ask the Expert) an dieser Veranstaltung
teilnehmen.<br />
Der eine oder andere wird mich in dem orangen Poloshirt gesehen haben. :-)
</p>
        <p>
Insgesamt kann ich nur sagen, es war eine sehr gut organisierte Veranstaltung, auch
wenn einige Vorträge, für den einen oder anderen, nicht die gewünschte technische
Tiefe hatten.<br />
Auch der gemeinsame Informationsaustausch und die vielen Gespräche mit Personen
der Dynamics-Gemeinde haben die Veranstaltung positiv abgerundet.
</p>
        <p>
Da Meinungen ja bekanntlich weit auseinander gehen, möchte ich jeden einzelnen bitten,
seine Eindrücke und Meinungen zu dem Dynamics Technical Airlift 2008 zu schildern.<br />
Wer dies nicht "öffentlich", durch die Kommentarfunktion (<a href="http://blog.ak-home.net/CommentView,guid,b7194b65-1d38-4c94-9a5f-75460351f3a6.aspx#commentstart">hier</a>),
machen möchte, kann mir auch gerne eine Email schreiben (<a href="javascript:var e1='%61%6b%2d%68%6f%6d%65%2e%6e%65%74',e2='mailto: ', e3='%6b%75%65%68%6e';var e0=e2+e3+'%40'+e1+'?Subject=Comments on: Aku\'s Ax Blog';(window.location?window.location.replace(e0):document.write(e0));">Email
me</a>).
</p>
        <p>
Ich möchte auch die jenigen bitten, die nicht an dieser Veranstalltung teilgenommen
haben, mir ein kurzes "Feedback" zukommen zu lassen.<br />
Besonders die Erwartungen an eine solche Veranstaltung und/oder die Community
im Allgemeinen würden mich interessieren.
</p>
        <p>
Bitte beachtet, dass alle Kommentare erst durch mich "überprüft" werden müssen, bevor
sie angezeigt werden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=b7194b65-1d38-4c94-9a5f-75460351f3a6" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Microsoft Dynamics AX 2009 Dokumente / Whitepaper</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,7dc18fa7-b87f-40c5-a3e9-c034775e72b0.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,7dc18fa7-b87f-40c5-a3e9-c034775e72b0.aspx</id>
    <published>2008-08-30T14:53:37.027+02:00</published>
    <updated>2008-08-30T15:05:12.980125+02:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <category term="Dynamics AX/Dynamics AX 2009" label="Dynamics AX/Dynamics AX 2009" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2009.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Alle frei erhältlichen Dokumente über Microsoft Dynamixs AX 2009 stehen jetzt über
Windows Live SkyDrive für jedermann frei zur Verfügung.
</p>
        <p>
Vielen Dank an <a href="http://daxguy.blogspot.com/">Arijit Basu</a>, der sich die
Arbeit gemacht hat, diese dort zum downlaod zur Verfügung zu stelllen. 
</p>
        <p>
Mehr Informationen hierzu gibt es im <a href="http://daxguy.blogspot.com/2008/08/ax-2009-documents.html">Blog
von Arijit Basu</a>.
</p>
        <p>
Hier der "direkt" Link zu den Dokumenten: <a href="http://cid-0594e6dbf6c3ce94.skydrive.live.com/browse.aspx/AX%202009%20Documents">AX
2009 Documents</a></p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=7dc18fa7-b87f-40c5-a3e9-c034775e72b0" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Fehlermeldung beim Starten des Microsoft Dynamics AX Clients - Incompatible ext. version</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,17f8f32e-35e3-4050-942a-97d8577673b7.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,17f8f32e-35e3-4050-942a-97d8577673b7.aspx</id>
    <published>2008-08-30T13:39:27.589+02:00</published>
    <updated>2008-08-30T14:02:02.667625+02:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <category term="Dynamics Ax/Administration" label="Dynamics Ax/Administration" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cAdministration.aspx" />
    <category term="Dynamics Ax/HowTo" label="Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cHowTo.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Wie bereits im diesem Artikel "<a href="http://blog.ak-home.net/PermaLink,guid,689bbb74-5a5d-443e-967b-2313ab2736e4.aspx" rel="bookmark">Fehlermeldung
beim Starten des Microsoft Dynamics AX Clients</a>" beschrieben, kann es zu Fehlermeldungen
beim Starten des Dynamixs AX 4.0 Client kommen.
</p>
        <p>
Eine weitere Fehlermeldung, welche erzeugt werden kann ist "<font color="#ff0000">Incompatible
ext. version</font>".<br />
Es ist auch möglich, dass diese sogar mehrfach ausgegeben wird.
</p>
        <p>
Grund hierfür ist meist ein Problem mit der TAPI-Integartion des CRM Moduls, bzw.
genauer gesagt, ein Problem mit den eingestellten Wählregeln/Standorte der Windows
Telefon- und Modemoptionen.
</p>
        <p>
Die Behebung des Fehlers ist eigentlich ganz einfach.
</p>
        <ol>
          <li>
Wenn die TAPI-Integration nicht genutzt wird, kann diese deaktiviert werden.<br />
Wie dies genau geht kann in diesem Artikel "<a href="http://blog.ak-home.net/PermaLink,guid,689bbb74-5a5d-443e-967b-2313ab2736e4.aspx" rel="bookmark">Fehlermeldung
beim Starten des Microsoft Dynamics AX Clients</a>" nachgelesen werden.<br /><br /></li>
          <li>
Wenn die TAPI-Integration verwendet werden soll, muss ein neuer Standort in den
Windows Telefon- und Modemoptionen erstellt werden.<br />
Das Erstellen eines neuen Standorts erfolgt über "Start -&gt; Systemsteuerung -&gt;
Telefon- und Modemoptionen" auf dem jeweiligen Clientcomputer (pro Benutzer).<br />
Dort sollte, wenn vorhanden, ein bestehender Standort gelöscht werden und ein neuer
angelegt werden.</li>
        </ol>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=17f8f32e-35e3-4050-942a-97d8577673b7" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>MultiSelect und die DataSource-Methode research().</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,52c21c8f-5aa5-4d84-aa88-d640b80e9701.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,52c21c8f-5aa5-4d84-aa88-d640b80e9701.aspx</id>
    <published>2008-08-14T19:00:44.906+02:00</published>
    <updated>2008-08-17T14:23:00.8125+02:00</updated>
    <category term="Dynamics Ax/HowTo" label="Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cHowTo.aspx" />
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Wie bereits in diesem Artikel <a href="http://blog.ak-home.net/PermaLink,guid,c1798182-de60-4146-85ed-06035d74c6c6.aspx">"Auswahl
von mehreren Datensätzen in einem Grid-Control (MultiSelect)"</a> beschrieben, kann
für ein Grid-Control die Eigenschaft MultiSelect gesetzt werden, womit es ermöglicht
wird, dass mehrere Datensätze für eine weitere Verarbeitung ausgewählt werden können.
</p>
        <p>
Dies Funktioniert solange, bis &lt;DataSource&gt;_ds.research() aufgerufen wird. Dieser
Aufruf hat zur Folge, dass die Daten der DataSource neu geladen werden und somit auch
die Selektierung verworfen wird.
</p>
        <p>
Ein Beispiel wie es nicht funktioniert:
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">void</span> clicked() 
<br />
{ <br />
   CustTable custTable; <br />
   ; <br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   for</span> (custTable <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> CustTable_ds.getFirst(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">true</span>)
? CustTable_ds.getFirst(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">true</span>)
: CustTable_ds.cursor(); <br />
        custTable; <br />
        custTable <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> CustTable_ds.getNext()) <br />
   { <br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">      //do
something with custTable </span><br />
      info(custTable.accountNum);<br />
      </span>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">custTable_ds.research();   </span>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"> <br />
   } 
<br />
}</span>
        </p>
        <p>
Es gilt also genau zu beachten zu welchem Zeitpunkt bzw. an welcher Stelle im Quelltext
die Methode &lt;DataSource&gt;_ds.research() aufgerufen wird.
</p>
        <p>
Weiterhin kann es zu Problemen beim MultiSelect kommen, wenn in den Methoden der DataSource
ein Aufruf von &lt;DataSource&gt;_ds.research() erfolgt.<br />
Normalerweise werden die DataSource-Methoden für jeden selektierten Datensatz ausgeführt.
Wenn aber innerhalb einer der Methoden, wie z.B. Delete(), wird diese Methode nur
für den ersten ausgewählten Datensatz ausgeführt und dann ein Research ausgeführt,
was wie schon beschrieben zu einem Verwerfen der Selektierung führt.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=52c21c8f-5aa5-4d84-aa88-d640b80e9701" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Numerische Nummernkreise im Eigenbau</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,be8bfbd5-e4ac-4858-8c19-9d45aaa37220.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,be8bfbd5-e4ac-4858-8c19-9d45aaa37220.aspx</id>
    <published>2008-08-08T16:38:44.968+02:00</published>
    <updated>2008-08-08T16:47:50.359375+02:00</updated>
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <category term="Dynamics Ax/Programmierung, Dynamics Ax/HowTo" label="Dynamics Ax/Programmierung, Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung%2c%2BDynamics%2BAx%2cHowTo.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Microsoft Dynamics AX verwendet für eindeutige Kennungswerte (Id’s) die eingebauten
Nummernkreise, für welche ein Feld vom Typ „String“ benötigt wird. Dies macht auch
Sinn, da Nummernkreise in Dynamics AX oft ein oder mehrere alphanumerische Zeichen
enthalten. Natürlich können auch rein nummerische Nummernkreise mit diesem „Framework“
erstellt werden.
</p>
        <p>
Allerdings sind die Nummernkreise im Dynamics AX Standard nicht ganz optimal bei der
Verwendung von einem rein nummerischen Nummernkreisen. Dies fängt z.B. schon beim
Datentyp an, der für das ID-Feld der Tabelle verwendet werden muss. Bedingt dadurch,
dass ein Feld vom Typ „String“ verwendet werden muss, belegt dieses Feld unnötig viel
Speicher in der Datenbank. Weiterhin gestalten sich Sortierungen, Rechenoperationen,
etc. erheblich schwieriger.
</p>
        <p>
Diese Probleme können umgangen werden, wenn für das ID-Feld der Datentyp „Integer“
oder „Int64“ verwendet wird. Leider kann nun nicht mehr das Nummernkreis-Framework
des Dynamics AX Standards verwendet werden, da dies den Datentyp „String“ für ein
ID-Feld vorschreibt.
</p>
        <p>
Es muss also ein eigenes, kleines Nummernkreis-Framework oder ein eigener Nummernkreis
geschrieben werden, der die Verwendung des Datentyps „Integer“ für ID-Felder ermöglicht.
Dies hört sich zuerst schwierig an, da Dinge wie fortlaufende Nummernvergabe oder
die Wiederverwendung von freien Nummern (Löchern im Nummernkreis) berücksichtigt werden
sollten.
</p>
        <p>
Es ist aber ganz und gar nicht schwierig, eine eigene Nummernkreisfunktionalität zu
erstellen. Das einzige was hierfür benötigt wird ist eine entsprechen aufgebaute Select-Abfrage.
</p>
        <p>
Die nächste Nummer eines Nummernkreises ist immer die zuletzt vergebenen Nummer (höchste)
+ 1.
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   Aku_TestTable
t1;<br />
   ;<br />
   select maxof(ID) from t1;<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   return</span> t1.ID <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> 1;</span>
        </p>
        <p>
Etwas schwieriger wird es, wenn auch die frei gewordenen Nummern des Nummernkreises
wieder vergeben/verwendet werden sollen. Dann muss immer die kleinste Id aus der Tabelle
gesucht werden, für die es keinen Datensatz in der Tabelle gibt. Gibt es kein "Nummernloch",
muss die nächst höchste Nummer vergeben werden.
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   Aku_TestTable
t1;<br />
   Aku_TestTable t2;<br />
   ;<br />
   select minof(ID) from t1 notexists join t2 where t2.ID == (t1.ID <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> 1);<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   return</span> t1.ID <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> 1;</span>
        </p>
        <p>
Um diese ein wenig zu verdeutlichen, kann eine beispielhafte Implementierung eines
eigenen Nummernkreises in diesem <a href="http://blog.ak-home.net/content/binary/SharedProject_AKU_OwnIntNumberSeq.rar">Demoprojekt
"SharedProject_AKU_OwnIntNumberSeq"</a> angesehen und runter geladen werden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=be8bfbd5-e4ac-4858-8c19-9d45aaa37220" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Label von Tabellenfeldern</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,2f0fff4f-35ef-4399-9f21-9d2c4498b653.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,2f0fff4f-35ef-4399-9f21-9d2c4498b653.aspx</id>
    <published>2008-07-16T08:28:11+02:00</published>
    <updated>2008-07-16T08:48:51.8517102+02:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Die Benamung von Tabellenfeldern erfolgt über Labels, die in der Feldeigenschaft "Label"
festgelegt werden.<br />
Diese Benamung wird immer angezeigt, wenn das Feld in der Applikation angezeigt wird.
Es gibt in den Eigenschaften der Tabellenfelder noch die Eigenschaft "GroupPrompt",
die die Benamung in Masken festlegt, wenn das Feld innerhalb einer Gruppe angezeigt
wird. 
</p>
        <p>
          <img src="http://starside.eu/content/binary/Feldeigenschaften.JPG" border="0" />
        </p>
        <p>
Die hinterlegte Benamung in der Eigenschaft GroupPrompt wird immer dann verwendet,
wenn das Feld in einer Gruppe dargestellt wird. Das können Tabellenfeldgruppen oder
Gruppen, die in Forms erzeugt wurden, sein.
</p>
        <p>
          <img src="http://starside.eu/content/binary/AnsichtinForm.JPG" border="0" />
        </p>
        <img width="0" height="0" src="http://starside.eu/cptrk.ashx?id=1dd0527d-3adf-4177-b1de-99f8681890c1" />
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=2f0fff4f-35ef-4399-9f21-9d2c4498b653" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Fehlermeldung beim Starten des Microsoft Dynamics AX Clients</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,689bbb74-5a5d-443e-967b-2313ab2736e4.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,689bbb74-5a5d-443e-967b-2313ab2736e4.aspx</id>
    <published>2008-07-10T20:13:05.9375+02:00</published>
    <updated>2008-07-10T20:24:55.328125+02:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <category term="Dynamics Ax/Administration" label="Dynamics Ax/Administration" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cAdministration.aspx" />
    <category term="Dynamics Ax/HowTo" label="Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cHowTo.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Manchmal ist es möglich, dass beim Starten des Microsoft Dynamics AX 4.0 Clients eine
oder meherer Fehlermeldungen in einem Infolog-Fenster ausgegeben werden.
</p>
        <p>
Diese Fehlermeldung könnten z.B. "Corrupted ini file" sein.
</p>
        <p>
Die große Frage ist nun, woher kommt diese Fehlermeldung bzw. wodurch wird diese erzeugt.<br />
Leider ist die Fehlermeldung, welche im Ereignisprotokoll gefunden werden kann,
meist auch nicht besonders hilfreich.
</p>
        <p>
Sollten solche, eher unerklärlichen Fehlermeldungen beim Starten des Dynamics AX Client
ausgegeben werden, lohnt sich oft ein Blick in die Systemkonfiguration, welche über
Verwaltung, Einstellungen, System, Konfiguration aufgerufen werden kann.
</p>
        <p>
Der Grund für diese Fehlermeldung könnte die aktivierte Telefonieintegration des CRM
Moduls sein.<br />
Wird diese deaktiviert, sollte die Fehlermeldung nicht mehr erzeugt werden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=689bbb74-5a5d-443e-967b-2313ab2736e4" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Microsoft Dynamics AX 2009 Enterprise Portal Entwicklung Samples</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,1d00947d-ff17-471a-8e06-7ed13640c46d.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,1d00947d-ff17-471a-8e06-7ed13640c46d.aspx</id>
    <published>2008-06-26T19:46:58.765625+02:00</published>
    <updated>2008-06-26T19:56:04.578125+02:00</updated>
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <category term="Dynamics AX / Programmierung / Enterprise Portal" label="Dynamics AX / Programmierung / Enterprise Portal" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2B%2c%2BProgrammierung%2B%2c%2BEnterprise%2BPortal.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
In der Screencast Sektion von Channel 9 hat Mey Meenakshisundaram 6 Screencasts über
die Entwicklung mit dem Enterprise Portal veröffentlicht.
</p>
        <p>
          <a id="ctl00_MainPlaceHolder_Starter_TitleLink" title="Permalink" href="http://channel9.msdn.com/posts/meysun/Microsoft-Dynamics-AX-2009--Creating-simple-List-Page-in-Enterprise-Portal/">Microsoft
Dynamics AX 2009 – Creating simple List Page in Enterprise Portal</a>
          <br />
This how-to video demonstrates how to create a simple List Page in Enterprise Portal
using AxGridView control.
</p>
        <p>
          <a id="ctl00_MainPlaceHolder_Starter_TitleLink" title="Permalink" href="http://channel9.msdn.com/posts/meysun/Microsoft-Dynamics-AX-2009--Creating-simple-Task-Page-in-Enterprise-Portal/">Microsoft
Dynamics AX 2009 – Creating simple Task Page in Enterprise Portal</a>
          <br />
This how-to video demonstrates how to create a simple Task Page in Enterprise Portal
using AxForm control.
</p>
        <p>
          <a id="ctl00_MainPlaceHolder_Starter_TitleLink" title="Permalink" href="http://channel9.msdn.com/posts/meysun/Microsoft-Dynamics-AX-2009--Creating-simple-TunnelWizard-Page-in-Enterprise-Portal/">Microsoft
Dynamics AX 2009 – Creating simple Tunnel(Wizard) Page in Enterprise Portal</a>
          <br />
This how-to video demonstrates how to create a simple Tunnel(Wizard) Page in Enterprise
Portal using ASP.net Wizard control and EP AxForm control.
</p>
        <p>
          <a id="ctl00_MainPlaceHolder_Starter_TitleLink" title="Permalink" href="http://channel9.msdn.com/posts/meysun/Microsoft-Dynamics-AX-2009--Calling-X-classes-in-Enterprise-Portal-User-Controls-in-C/">Microsoft
Dynamics AX 2009 – Calling X++ classes in Enterprise Portal User Controls in C#</a>
          <br />
This how-to video demonstrates how to create a simple X++ Class in AOT and create
a C# proxy for this class and call it in Enterprise Portal user control written in
C#.
</p>
        <p>
          <a id="ctl00_MainPlaceHolder_Starter_TitleLink" title="Permalink" href="http://channel9.msdn.com/posts/meysun/Microsoft-Dynamics-AX-2009--Using-Record-Context-in-Enterprise-Portal/">Microsoft
Dynamics AX 2009 – Using Record Context in Enterprise Portal</a>
          <br />
Microsoft Dynamics AX developers will learn how to use record context in Enterprise
Portal. Record context is used to pass currently selected record information on a
page or Web part to another page or connected Web part. This how-to-video demonstrates
three ways of passing record context...
</p>
        <p>
          <a id="ctl00_MainPlaceHolder_Starter_TitleLink" title="Permalink" href="http://channel9.msdn.com/posts/meysun/Microsoft-Dynamics-AX-2009--Advanced-Grid-in-Enterprise-Portal-List-Page/">Microsoft
Dynamics AX 2009 – Advanced Grid in Enterprise Portal List Page</a>
          <br />
This how-to video demonstrates how to add ranges in dataset to restrict the data displayed
and the different options supported (open,hidden,locked). This also demonstrates how
to use display and edit methods defined in the table in the Grid.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=1d00947d-ff17-471a-8e06-7ed13640c46d" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Versionsverwaltung mit Visual SourceSafe - Vergleichen von Objektversionen</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,40c372cb-a0e8-4963-9627-dbcb08d37d7b.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,40c372cb-a0e8-4963-9627-dbcb08d37d7b.aspx</id>
    <published>2008-06-12T11:57:09.043+02:00</published>
    <updated>2008-06-18T19:34:26.1073754+02:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax/Administration" label="Dynamics Ax/Administration" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cAdministration.aspx" />
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <category term="Dynamics Ax/Programmierung, Dynamics Ax/HowTo" label="Dynamics Ax/Programmierung, Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung%2c%2BDynamics%2BAx%2cHowTo.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Wenn bei der Entwicklung mit Microsoft Dynamics AX 4.0 die Quellcodeverwaltung mittels
Visual SourceSafe 2005 eingeschaltet wurde, besteht die Möglichkeit einzelne Versionen
eines Objekts miteinander zu vergleichen.
</p>
        <p>
Hierbei kann es aber bei einer "ungünstigen" Konfiguration des lokal Repository-Verzeichnisses
sein, dass bei einem Vergleich von zwei Objektversionen die Fehlermeldung "<font color="#ff0000">Fehler:
Fortsetzen nicht möglich</font>" ausgegeben wird.
</p>
        <p>
Diese Fehlermeldung wird immer erzeugt, wenn sich das lokale Repository-Verzeichnis
und das Verzeichnis, in dem die temporären Internetdateien (Temporary Internet Files)
gespeichert werden, nicht auf der gleichen Partition (Datenträger) befinden.
</p>
        <p>
Beispiel:
</p>
        <p>
Ordner der Temporary Internet Files = C:\Dokumente und Einstellungen\UserXY\Lokale
Einstellungen\Temporary Internet Files<br />
Ordner des lokalen Repositories = D:\VSSRepository\Test
</p>
        <p>
-&gt; Die Fehlermeldung wird ausgegeben.
</p>
        <p>
Ordner der Temporary Internet Files = C:\Dokumente und Einstellungen\UserXY\Lokale
Einstellungen\Temporary Internet Files<br />
Ordner des lokalen Repositories = C:\VSSRepository\Test
</p>
        <p>
-&gt; Die Fehlermeldung wird nicht ausgegeben und der Versionvergleich funktioniert
problemlos.
</p>
        <p>
Dieses Problem wird durch ein <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8a1a68d8-db11-417c-91ad-02aab484776b&amp;displaylang=en">Update
für Visual SourceSafe 2005</a> behoben. Es empfiehlt sich, bei Verwendung der Quellcodeverwaltung
mit Visual SourceSafe 2005 als VC-System, dieses Update einzuspielen.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=40c372cb-a0e8-4963-9627-dbcb08d37d7b" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Sprechende Methodenparameter verwenden</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,d72bc5b6-75d0-49ef-85ed-0c650b258b47.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,d72bc5b6-75d0-49ef-85ed-0c650b258b47.aspx</id>
    <published>2008-06-11T20:50:59+02:00</published>
    <updated>2008-06-11T11:36:48.7779897+02:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">Die Eigenschaften von FormControls, wie
heightMode und widthMode werden im Form Designer über Enums gesetzt. Leider hat man
hier mittels X++ Probleme, denn es wird bei der Verwendung dieser Methoden nicht angegeben
um welchem Enum es sich handelt. Das hat zufolge, dass man immer wieder probieren
muss, um die gewünschte Eigenschaft richtig zu setzten. Desweiteren ist so auch der
Quellcode schlechter lesbar.<br /><br />
Der Aufruf sieht normal so aus:<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormControl.heightMode(1);<br /></span></p>
Besser ist es, wenn man sprechende Parameter mit dem richtigen Enum verwendet<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormControl.heightMode(FormHeight::ColumnHeight);</span></p>
Mögliche Optionen:<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormHeight::Auto<br />
FormHeight::ColumnHeight</span></p><br />
Ähnlich sieht der Parameter bei widthMode aus, nur wird hier der Enum FormWidth genutzt.<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormControl.witdthMode(FormWidth::ColumnHeight);</span></p>
Mögliche Optionen:<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormWidth::Auto<br />
FormWidth::ColumnHeight</span></p><br />
Wie schon bei den letzten beiden Eigenschaft kann man bei TopMode auch nur raten,
was mittels X++ übergeben werden muss.<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormControl.TopMode(0);</span></p>
Besser ist, wenn auch hier ein sprechender Parameter mit dem richtigen Enum verwendet
wird.<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormControl.TopMode(FormTop::Auto);</span></p><p>
Mögliche Optionen:<br /></p><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormTop::Auto<br />
FormTop::ButtomEdge<br />
FormTop::Center<br />
FormTop::TopEdge</span></p><p></p>
Bei FormGroupControls gibt es die Eigenschaft frameOptionButton, auch hier tritt dasselbe
Problem auf.<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormControl.frameOptionButton(0);</span></p>
Der Enum lautet hier FormFrameOptionButton und ermöglicht somit die korrekte Zuweisung
oder besser lesbaren Quellcode zu schreiben.<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormControl.frameOptionButton(FormFrameOptionButton::None);</span></p>
Mögliche Optionen:<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormFrameOptionButton::None<br />
FormFrameOptionButton::Hide<br />
FormFrameOptionButton::Check<br />
FormFrameOptionButton::Radio</span></p>
Es kommt nicht nur bei FormControls zu dieser Art von Problemen. Bei QueryRanges gibt
es die Eigenschaft Status, auch hier kann es beim Setzen zu Schwierigkeiten dieser
Eigenschaft mittels X++ kommen.<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">QueryBuildRange.Status(0);</span></p>
Besser ist auch hier den sprechenden Parameter mit dem Richtigen Enum zu verwenden.<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">QueryBuildRange.Status(RangeStatus::Hidden);</span></p>
Mögliche Optionen:<br /><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">RangeStatus::Hidden<br />
RangeStatus::Locked<br />
RangeStatus::Open</span></p>
Das waren erstmal die Sachen, die mir noch in Erinnerung sind. Es gibt wahrscheinlich
einige andere Stellen, bei denen es Schwierigkeiten bereitet, den richtigen Parameter
zu wählen. 
<br />
Ich habe mit den genannten Enums bisher positive Erfahrungen sammeln können, ob es
aber wirklich die Richtigen sind, wird man wohl nicht in Erfahrung bringen können.<br /><br /><p></p><img width="0" height="0" src="http://starside.eu/cptrk.ashx?id=28c1e506-885e-49c5-af6c-526eed878d8e" /><img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=d72bc5b6-75d0-49ef-85ed-0c650b258b47" /><br /><hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Technische Informationen über Microsoft Dynamics AX 2009 im Internet</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,38d95169-c598-4123-ae48-77d75e0c9a9e.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,38d95169-c598-4123-ae48-77d75e0c9a9e.aspx</id>
    <published>2008-06-06T15:30:27.263375+02:00</published>
    <updated>2008-06-06T15:41:57.857125+02:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <category term="Dynamics Ax/Administration" label="Dynamics Ax/Administration" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cAdministration.aspx" />
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
So nach und nach erscheinen immer mehr Informationen über die Version 2009 von
Dynamics AX im Internet.<br />
Hier eine Liste der bereits verfügbaren Quellen:
</p>
        <p>
          <a href="http://www.microsoft.com/dynamics/ax/using/ax_installationinfo.mspx">Install
Microsoft Dynamics AX 2009</a> (Informationen zur Installtion von Dynamics AX
2009)
</p>
        <p>
          <a href="http://www.microsoft.com/dynamics/ax/using/default.mspx">Using Microsoft
Dynamics AX 2009</a> (Allgemeine Informationen zu Dynamics AX 2009)<a></a></p>
        <p>
          <a href="http://msdn.microsoft.com/en-us/library/aa496071.aspx">Microsoft Dynamics
AX 2009 SDK</a>
        </p>
        <p>
          <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7B80DC17-BCF0-4AF5-A4D0-81ABA51F8002&amp;displaylang=en">What's
new for Microsoft Dynamics AX 2009</a> (Änderungen/Neuerungen als download)
</p>
        <p>
          <a href="http://blogs.msdn.com/epblog/">The Microsoft Dynamics AX Enterprise Portal
Blog</a> (Informationen über das EP, direkt vom MS EP Team)
</p>
        <p>
 
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=38d95169-c598-4123-ae48-77d75e0c9a9e" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Werte der Systemfelder eines Datensatzes setzen </title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,92d3dd05-07a6-446f-b2f4-20e5fd09ff1e.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,92d3dd05-07a6-446f-b2f4-20e5fd09ff1e.aspx</id>
    <published>2008-05-29T21:36:51.359+02:00</published>
    <updated>2008-05-29T22:06:32+02:00</updated>
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <category term="Dynamics Ax/HowTo" label="Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cHowTo.aspx" />
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Für jede Tabelle können Systemfelder wie Erstellt von, Geändert von, Erstellungsdatum,
Erstellungszeit oder Änderungsdatum von Dynamics AX aktiviert werden.<br />
Diese Felder werden durch Dynamics AX automatisch gefüllt. Wird zum Beispiel ein neuer
Datensatz erzeugt, füllt Dynamics AX die Systemfelder mit den entsprechenden
Daten.
</p>
        <p>
Es gibt aber Situationen wo man selber Einfuß auf die Werte dieser Felder nehmen
muss. Ein Beispiel hierfür könnte eine Datenübernahme sein, bei der die Informationen
über den Ersteller oder das Erstellungsdatum des Datensatzes nicht verloren gehen
dürfen.
</p>
        <p>
Wie dies gehen kann zeigt dieses kleine Beispiel:
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">YourTable
table;<br />
;<br />
ttsbegin;<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">//can
only be called on server tier. -&gt; method must be executed on server tier.</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> SkipAOSValidationPermission().assert();<br />
table.skipAosValidation(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">true</span>);<br /><br />
table.YourField <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Value"</span>;<br /><br />
table.overwriteSystemfields(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">true</span>);<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">//set
your own values for the system fields.</span><br />
table.(fieldnum(Table1, ModifiedDate)) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> today() <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">-</span> 2;<br />
table.(fieldnum(Table1, CreatedDate)) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> today() <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">-</span> 5;<br />
table.(fieldnum(Table1, CreatedBy)) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"TEST"</span>;<br /><br />
table.insert();<br />
ttscommit;<br /><br />
table.skipAosValidation(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">false</span>);</span>
        </p>
        <p>
Allerdings können die Systemfelder nur beim Erstellen eines neuen Datensatzes "von
Hand" festgelegt werden.
</p>
        <p>
Wie das Ändern von Werten der Systemfelder bei bereits bestehenden Datensätzen geht
demonstriert die Klasse "BatchRun", Methode "runJob" und "finishJob".<br />
Kurz gesagt wird genau genommen der Datensatz nicht geändert, sondern es werden nur
die Daten des bestehenden Datensatzes in den neuen Datensatz kopiert (mit newBuffer
= oldBuffer.data()) und dann wie bereits beschrieben die Systemfelder mit eigenen
Werten befüllt. Dann wird der bestehnde Datensatz gelöscht und der neue Datensatz
in die Datenbank geschrieben.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=92d3dd05-07a6-446f-b2f4-20e5fd09ff1e" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Weitere Informationen über Dynamics AX 2009</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,1f632e0d-a23a-4af5-a132-b22349291676.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,1f632e0d-a23a-4af5-a132-b22349291676.aspx</id>
    <published>2008-05-19T20:41:46.187+02:00</published>
    <updated>2008-05-19T22:42:01.46875+02:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
So nach und nach sind immer mehr Informationen über die nächste Version von Microsoft
Dynamics AX im Internet erhältlich, die einen ersten Einblick in das verschaffen,
was alles an Neuerungen mit Dynamics AX 2009 kommt.
</p>
        <p>
          <a href="https://mvp.support.microsoft.com/profile/Arijit.Basu">Arijit Basu</a> hat
in seinem <a href="http://daxguy.blogspot.com/2008/05/ax-2009-quick-overview.html">Blog</a> einen
Artikel über einige der Änderungen gepostet.<br />
Der Artikel beschreibt unter Anderem die Änderungen am Benutzerinterface, das
neue Role Center, die neuen Workflow-Features sowie die Erweiterungen
am Enterprise Portal.
</p>
        <p>
Weiterhin ist auf <a href="http://channel9.msdn.com/Showpost.aspx?postid=405045">Channel9</a> ist
ein <a href="http://channel9.msdn.com/Showpost.aspx?postid=405045">Video</a> zu
finden, welches das Enterprise Portal von Dynamics AX 2009 und dessen System-Architektur erläutert.<br />
Es wird gezeigt, wie eigene Controls (mit ASP.NET) für das Enterprise Portal erstellt
werden können und wie diese in das Enterprise Portal sowie das Role-Center eingebunden
werden können.<br /></p>
        <p>
 
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=1f632e0d-a23a-4af5-a132-b22349291676" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Speichern von Optionswerten</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,f4d824f5-434d-4b51-8bdb-671182f66cd5.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,f4d824f5-434d-4b51-8bdb-671182f66cd5.aspx</id>
    <published>2008-05-05T21:53:48.84025+02:00</published>
    <updated>2008-05-05T22:04:31.637125+02:00</updated>
    <category term="Dynamics Ax/HowTo" label="Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cHowTo.aspx" />
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <category term="Dynamics Ax/Programmierung, Dynamics Ax/HowTo" label="Dynamics Ax/Programmierung, Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung%2c%2BDynamics%2BAx%2cHowTo.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Häufig werden Optionen (Ja/Nein-Fragen) in Microsoft Dynamics AX durch ein CheckBox
Control und einem entsprechendem Feld einer Tabelle abgebildet. 
</p>
        <p>
Ein gutes Beispiel hierfür ist die Maske „Lagerparameter“, Reiter „Lagerungsdimensionen“.
Hier kann eingestellt werden, welche Lagerungsdimension wo im System angezeigt werden
soll. Zur Speicherung der gewählten Einstellungen wird die Tabelle „InventDimSetupGrid“
verwendet. Diese Tabelle enthält für jede Option jeweils ein Feld (abgeleitet vom
Enum „NoYes“).<br />
Diese Art der Speicherung von Optionswerten ist sicherlich sehr leicht zu verstehen
und auch sehr einfach zu erstellen. Da aber für jede Option ein Feld in der Tabelle
angelegt werden muss, kann dies relativ zeitaufwendig sein.
</p>
        <p>
Es besteht aber die Möglichkeit, Optionswerte in nur einem Feld zu speichern. Diese
Art der Speicherung kann unter Umständen sogar als die elegantere angesehen werden,
da z.B. für einen Datensatz weniger Speicher in der Datenbank benötigt wird.
</p>
        <p>
Um dies zu realisieren, wird als erstes ein Feld vom Typ „int“ in der Tabelle benötigt.
Dieses Feld dient als Datenspeicher für alle benötigten Optionswerte (Ja oder Nein).
Jedes Bit dieses „int“ Feldes stellt genau einen Optionswert und somit eine Option
dar. Um nun die gewählten Werte der Optionen speichern zu können, müssen diese mit
Bit-Operationen (right / left shift, binary and, etc.) in das „int“ Feld geschrieben
werden.
</p>
        <p>
          <img src="http://blog.ak-home.net/content/binary/TableBrowser.jpg" border="0" />
          <br />
Das Feld "bitMask" wird in dieser Darstellung als Datenspeicher der Optionswerte verwendet.
</p>
        <p>
          <img src="http://blog.ak-home.net/content/binary/Maske.jpg" border="0" />
          <br />
Auf einer Maske werden alle Optionen als einzelne CheckBoxen bereit gestellt.
</p>
        <p>
Da diese Art der Speicherung in Dynamics AX nicht besonders oft verwendet wird und
Quellcode oft mehr sagt als (nur) ein langer Artikel, habe ich ein kleines „Tutorial“
erstellt, um die benötigten Schritte zu beschreiben.
</p>
        <a href="http://blog.ak-home.net/content/binary/SharedProject_AKU_EnumControl_Frm.rar">SharedProject_AKU_EnumControl_Frm.rar
(2,03 KB)</a>
        <p>
Eine Erklärung aller Bit-Operatoren ist im <a href="http://msdn2.microsoft.com/en-us/library/aa870833.aspx">Microsoft
Dynamics AX Developer Center</a> zu finden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=f4d824f5-434d-4b51-8bdb-671182f66cd5" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>"How Do I" - Videos (Webcasts) im Microsoft Dynamics AX Developer Center</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,f99cee2d-936e-4d86-93df-dca440272c57.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,f99cee2d-936e-4d86-93df-dca440272c57.aspx</id>
    <published>2008-05-02T15:06:10.184+02:00</published>
    <updated>2008-05-02T15:19:44.543375+02:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Im <a href="http://msdn.microsoft.com/en-us/dynamics/ax/cc507280.aspx">Microsoft Dynamics
AX Developer Center</a> wurde für Dynamics AX Entwickler eine neue Webcast Serie gestartet.
</p>
        <p>
Auszug:
</p>
        <p>
"On this page you will find videos designed for all Microsoft Dynamics AX developers,
from the novice to the professional. New videos are added regularly, so check back
often."
</p>
        <p>
Derzeit ist nur ein Webcast über "Dynamics Links between parent and child Forms"
erhältlich.<br />
Gilt zu hoffen, dass in der nächsten Zeit noch weitere nützliche Webcast folgen.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=f99cee2d-936e-4d86-93df-dca440272c57" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Den Typ eines FormControls ermitteln.</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,094151fe-8484-4526-948b-72f278ff5f5d.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,094151fe-8484-4526-948b-72f278ff5f5d.aspx</id>
    <published>2008-04-28T22:10:53+02:00</published>
    <updated>2008-04-27T20:17:19.5625+02:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Wie kann man zur Laufzeit den FormControlType einer beliebigen FormControl ermitteln?
</p>
        <p>
Eine Methode auf der FormControl scheint nicht zu existieren, wie kann also der Typ
einer FormControl mittels X++ ermittelt werden?<br />
Mit Hilfe der Klasse SysFormRun ist dies möglich. 
</p>
        <p>
Hierzu ein kleines Stück Quellcode als Beispiel.<br /></p>
        <p>
          <span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;">FormControlType
formControlType;<br />
;<br />
formControlType <span style="font-size: 11px; color: red; font-family: Courier New; background-color: transparent;">=</span> SysFormRun::controlType(classidget(MeineFormBuildControl));</span>
        </p>
Sollte keine FormControl als Parameter übergeben werden, wir eine Fehlermeldung generiert.<br />
Nun kann entsprechend des ermittelten Types der FormControl weiter verfahren.<br /><br /><br /><br /><br /><p></p><img width="0" height="0" src="http://starside.eu/cptrk.ashx?id=bc0f691d-0567-4961-a5d4-0be6be4e2d18" /><img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=094151fe-8484-4526-948b-72f278ff5f5d" /><br /><hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Benutzen der Listbox und die Feinheiten</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,acd99671-b785-435e-8b4e-a1b6adb5588b.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,acd99671-b785-435e-8b4e-a1b6adb5588b.aspx</id>
    <published>2008-04-21T12:10:36+02:00</published>
    <updated>2008-04-21T09:28:11.328125+02:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font face="Verdana" size="2">Eine Listbox ist einfach erstellt. Entweder man benutzt
eine datengebundene Listbox, indem einfach die Datasource und DataField/ DataMethod
im FormControl festgelegt wird oder man befüllt die Listbox manuell.</font>
        </p>
        <p>
          <font face="Verdana" size="2">Das manuell befüllen der Listbox aus einem Tabellenfeld sieht
dann beispielsweise so aus:</font>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">void</span> initListBox()<br />
{<br />
counter elementCnt;<br />
str elementStr;<br />
;<br />
meineListBox.clear();<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">for</span> (elementCnt <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> 1;
elementCnt &lt;= conlen(Tabelle.ContainerFeld); elementCnt++)<br />
{<br />
meineListBox.add(onpeek(Tabelle.ContainerFeld, elementCnt));<br />
}<br />
}</span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">Über
die angegebene Methode werden alle Elemente des aktuellen Containers der Tabelle in
die Listbox übertragen.</font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">Hierbei
bin ich auf ein seltsames Verhalten der Listbox gestossen.<br />
Im aktuellen Fall ist die Darstellung der Listbox einwandfrei. Beim Datensatz wechsel
habe ich die Listbox mit den neuen Werten befüllen können. Alles war gut.</font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">Bis
auf die Tatsache, dass ich bei der Auswahl in der Listbox nicht das ausgewählt Element
angezeigt bekam. Es wurde immer das erste angezeigte Element der ListBox gewählt.</font>
          </span>
        </p>
        <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
          <font face="Verdana" color="#003300" size="2">
          </font>
          <p>
            <font face="Verdana" color="#003300" size="2">Grund hierfür war oder ist: Meine Listbox
befindet sich in einer FormGroupControl, bei der FormGroupControl war automatisch eine
DataSource hinterlegt. Das hat scheinbar zu Folge, dass das Event "SelectionChanged"
der Listbox ignoriert wurde und ich somit immer der erste Wert über</font>
          </p>
          <p>
            <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
              <font face="Verdana" color="#003300" size="2">
                <p>
                  <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">meineListBox.getText(meineListBox.selection());</span>
                </p>
              </font>
            </span>
            <font face="Verdana" color="#003300" size="2">erhalten habe.</font>
          </p>
          <p>
          </p>
          <p>
            <font face="Verdana" color="#003300" size="2">Nachdem die Datasource aus der FormGroupControl
entfernt wurde, funktionierte alles wieder wie erwartet und gewünscht.</font>
          </p>
          <p>
            <font face="Verdana" color="#003300" size="2">
              <br />
            </font>
          </p>
          <p>
          </p>
        </span>  
<p></p><img width="0" height="0" src="http://starside.eu/cptrk.ashx?id=7ccfda76-d59c-4ca0-88c9-01fc2dff72cd" /><img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=acd99671-b785-435e-8b4e-a1b6adb5588b" /><br /><hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Zugriff auf die Query, QueryRun und DataSource in einer Form</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,8ea1cc9f-1e16-4150-8087-3e603c18ed12.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,8ea1cc9f-1e16-4150-8087-3e603c18ed12.aspx</id>
    <published>2008-04-14T10:52:06+02:00</published>
    <updated>2008-04-14T11:27:51.953125+02:00</updated>
    <category term="Dynamics Ax/Programmierung, Dynamics Ax/HowTo" label="Dynamics Ax/Programmierung, Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung%2c%2BDynamics%2BAx%2cHowTo.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Um die FormDataSource einer Form anzusprechen benutzt man das Suffix <strong>_</strong>ds.
So erhält man in der Maske CustTable mit
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">CustTable_ds</span>
        </p>
        <p>
den Zugriff auf die FormDatasource der CustTable.
</p>
        <p>
Es gibt aber noch andere Suffixe, die nicht so häufig verwendet werden und mir bis
dato auch unbekannt waren.<br />
So erhält man mit dem Suffix <strong>_</strong>q oder <strong>_</strong>qr Zugriff
auf die Query oder QueryRun der aktuellen FormDataSource.
</p>
        <p>
Das heisst, das mit
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">CustTable_q</span>
        </p>
        <p>
die Query der FormDataSource CustTable und mit
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">CustTable_qr</span>
        </p>
        <p>
die QueryRun der FormDataSource CustTable direkt angesprochen wird.
</p>
        <p>
Hiermit kann man sich also verschiedene Deklarationen oder Zuweisungen sparen und
hat direkten Zugriff auf diese Objekte.
</p>
        <ul>
          <li>
FormDataSource = Zugriff auf den Datensatzpuffer</li>
          <li>
FormDataSouceName_DS = Zugriff auf FormDataSource</li>
          <li>
FormDataSourceName_Q = Zugriff auf Query der FormDataSource</li>
          <li>
FormDataSourceName_QR = Zugriff auf QueryRun der FormDataSource</li>
        </ul>
        <img width="0" height="0" src="http://starside.eu/cptrk.ashx?id=da2bc4b2-0863-42d1-9e30-3a36c680601c" />
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=8ea1cc9f-1e16-4150-8087-3e603c18ed12" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Produktionsaufträge per Quellcode erstellen</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,8245e6cb-2aa3-4ade-bc29-a7408bd6c157.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,8245e6cb-2aa3-4ade-bc29-a7408bd6c157.aspx</id>
    <published>2008-04-12T15:30:59.843+02:00</published>
    <updated>2008-04-12T15:56:55.671875+02:00</updated>
    <category term="Dynamics Ax/HowTo" label="Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cHowTo.aspx" />
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <category term="Dynamics Ax/Programmierung/API" label="Dynamics Ax/Programmierung/API" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung%2cAPI.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Das Erstellen von Produktionsaufträgen sollte an sich kein Problem darstellen. Leider
ist dem nicht ganz so.
</p>
        <p>
Anders als in anderen Modulen (z.B. Aufträge) von Dynamics AX, existiert hierfür keine
Klassenstruktur, welche die entsprechenden Funktionen bereit stellt.<br />
Der Dynamics AX Standard erstellt Produktionsaufträge immer über die Maske „ProdTableCreate“.
Es gibt aber Situationen, wo für die Erstellung eines Produktionsauftrages keine Maske
verwendet werden kann. Ein Beispiel hierfür könnte eine Schnittstelle sein, welche
über eine Textdatei die zu produzierenden Waren einließt und entsprechende Produktionsaufträge
im System generiert.
</p>
        <p>
Die Frage ist nun, wie erstellt man Produktionsaufträge per Quellcode, damit diese
auch „richtig“ im System erzeugt werden (inkl. Stückliste, Arbeitsplan und Lagerbuchung).
</p>
        <ul>
          <li>
Zuerst muss der Produktionsauftrag mit den Daten des zu produzierenden Artikels initialisiert
werden. 
</li>
          <li>
Weiterhin müssen Produktionsmenge und Lieferdatum festgelegt werden. 
</li>
          <li>
Ebenfalls sind die zu verwendende Stückliste und der Arbeitsplan zu definieren. 
</li>
          <li>
Und als letzter Schritt muss der Produktionsauftrag noch erzeugt werden.</li>
        </ul>
        <p>
Hierbei gilt es aber zu beachten, dass die Erstellung (Speichern in der Datenbank) nicht
mit der Methode „insert“ der Tabelle „ProdTable“ geschieht, sondern dass hierfür die
Klasse „ProdTableType“ und deren Methode „insert“ verwendet wird. Nur so wird die
entsprechende Lagerbewegung / Lagerbuchung im System erzeugt und wenn notwendig Referenzen
zu einem Verkaufsauftrag oder einer anderen Produktion hinterlegt.
</p>
        <p>
Um dies zu veranschaulichen ein kurzes Beispiel, in welchem ein neuer Produktionsauftrag
erstellt wird.
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">static</span>
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">void</span> CreateProductionOrder(Args
_args)<br />
{<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   
//Die zu produzierende Menge</span><br />
    ProdQtySched productionQty <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> 1;<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   
//Der zu produzierende Artikel</span><br />
    ItemId productionItem <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Artikelnummer"</span>;<br /><br />
    ProdTable prodTable;<br />
    InventTable inventTable;<br />
    ;<br />
    inventTable <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> InventTable::find(productionItem);<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   
//Initialisierung des Produktionsauftrags</span><br />
    prodTable.initValue();<br />
    prodTable.ItemId <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> inventTable.ItemId;<br />
    prodTable.initFromInventTable(inventTable);<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   
//Lieferdatum festlegen</span><br />
    prodTable.DlvDate <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> today();<br /><br />
    prodTable.QtySched <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> productionQty;<br />
    prodTable.RemainInventPhysical <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> prodTable.QtySched;<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   
//Die zu verwendende Stückliste und Arbeitsplan bestimmen</span><br />
    prodTable.initRouteVersion();<br />
    prodTable.initBOMVersion();<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   
//Produktionsauftrag erstellen</span><br />
    prodTable.type().insert();<br />
}</span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">Selbstverständlich
sind auch weitere Angaben bei der Erstellung des Produktionsauftrags möglich.<br />
Z.B. kann ein Produktionsauftrag auch aus einer Verkaufsauftragsposition erzeugt werden
(bei Verwendung der Methode "initFromSalesLine").</font>
          </span>
        </p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=8245e6cb-2aa3-4ade-bc29-a7408bd6c157" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Ein kurzer Einblick in SysDictClass</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,6932960f-ad94-4a70-92bc-08dac36a2d7e.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,6932960f-ad94-4a70-92bc-08dac36a2d7e.aspx</id>
    <published>2008-04-04T22:01:19+02:00</published>
    <updated>2008-04-04T09:24:41.687625+02:00</updated>
    <category term="Dynamics Ax/Programmierung, Dynamics Ax/HowTo" label="Dynamics Ax/Programmierung, Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung%2c%2BDynamics%2BAx%2cHowTo.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Mit Hilfe von SysDictClass kann man wertvolle Erkenntnisse über Klassen gewinnen und
abfragen.<br />
Ich habe einige Dinge, die ich am häufigsten gebrauche, anhand einfacher
Beispiele zusammengetragen.
</p>
        <p>
Dieses kleine Stück Quellcode ermittelt alle abgeleiteten Klassen der Klasse FormControl.<br /></p>
        <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
        </span>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SysDictClass
formCtrlClss;<br />
ListEnumerator listEnumerator;<br />
;<br /><br />
formCtrlClss <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> SysDictClass(classnum(FormControl));<br /><br />
listEnumerator <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> formCtrlClss.extendedBy().getEnumerator();<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">while</span> (listEnumerator.moveNext())<br />
{<br />
formCtrlClss <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> SysDictClass(listEnumerator.current());<br />
print formCtrlClss.name();<br />
}<br />
pause;</span>
        </p>
        <p>
Diese Funktionalität wird auch im Standard von Microsoft Dynamics AX verwendet, um
alle möglichen Funktionen der Stabelverarbeitung abzufragen/ zu ermitteln.
</p>
        <p>
Man kann natürlich auch ermitteln, von welcher Klasse(n) die aktuelle Klasse abgeleitet
ist.
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SysDictClass
dictClass <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> SysDictClass(classnum(SalesFormLetter_Invoice));<br />
;<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">while</span> (dictClass.extend())<br />
{<br />
dictClass <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> SysDictClass(dictClass.extend());<br />
print dictClass.name();<br />
}<br />
pause;</span>
        </p>
        <p>
Um zu ermitteln, ob eine Klasse von einer bestimmten Klasse abgeleitet wurde,
muss folgendes geschrieben werden.
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SysDictClass
dictClass <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> SysDictClass(classnum(SalesFormLetter_Invoice));<br />
;<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">//
Überprüfen ob die Klasse von der Klasse Object abgeleitet ist</span><br />
print dictClass.isExtending(classnum(Object));<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">//
Überprüfen ob die Klasse von der Klasse FormControl abgeleitet ist</span><br />
print dictClass.isExtending(classnum(FormControl));<br />
pause;</span>
        </p>
        <p>
Es kann auch auf die Methoden der Klasse zugegriffen werden.
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SysDictClass
dictClass <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> SysDictClass(classnum(SalesFormLetter_Invoice));<br />
;<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">//Statische
Methode der Klasse SalesFormLetter_Invoice aufrufen, wenn vorhanden</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span> (dictClass.hasStaticMethod(<span style="FONT-SIZE: 11px; COLOR: rgb(102,102,102); FONT-FAMILY: Courier New; BACKGROUND-COLOR: rgb(228,228,228)">"Description"</span>))<br />
print dictClass.callStatic(<span style="FONT-SIZE: 11px; COLOR: rgb(102,102,102); FONT-FAMILY: Courier New; BACKGROUND-COLOR: rgb(228,228,228)">"Description"</span>);<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">//Methode
der Klasse SalesFormLetter_Invoice aufrufen, wenn vorhanden</span><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span> (dictClass.hasObjectMethod(<span style="FONT-SIZE: 11px; COLOR: rgb(102,102,102); FONT-FAMILY: Courier New; BACKGROUND-COLOR: rgb(228,228,228)">"canGoBatchJournal"</span>))<br />
print dictClass.callObject(<span style="FONT-SIZE: 11px; COLOR: rgb(102,102,102); FONT-FAMILY: Courier New; BACKGROUND-COLOR: rgb(228,228,228)">"canGoBatchJournal"</span>,
dictClass.makeObject());<br /><br />
pause;</span>
        </p>
        <p>
Das ist nur ein Teil der Funktionen, die ich persönlich am Wichtigsten empfinde und hin
und wieder benötige.
</p>
        <p>
        </p>
        <img width="0" height="0" src="http://starside.eu/cptrk.ashx?id=b73cb36e-8ebe-4064-b3dd-36182a585129" />
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=6932960f-ad94-4a70-92bc-08dac36a2d7e" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Microsoft Most Valuable Professional [MVP] </title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,781c2379-5310-4589-a6bf-3861e09f0ac9.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,781c2379-5310-4589-a6bf-3861e09f0ac9.aspx</id>
    <published>2008-04-01T22:44:51.718+02:00</published>
    <updated>2008-04-01T23:11:04.4765932+02:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Heute habe ich eine Email erhalten, in der folgendes zu lesen war:
</p>
        <p>
          <span style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi; mso-ansi-language: DE; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">
            <font color="#000000">"...Herzlichen
Glückwunsch! Wir freuen uns, Ihnen den Microsoft MVP Award 2008 verleihen zu können..."</font>
          </span>
        </p>
        <p>
Mir wurde der MVP für Microsoft Dynamics AX verliehen. Wow!
</p>
        <p>
Ich möchte mich an dieser Stelle bei allen Teilnehmern der Microsoft Dynamics AX Community
bedanken, die es überhaupt ermöglich haben, dass mir dieser Titel verliehen wurde.<br />
Besonderen Dank möchte ich an <a href="http://axaptafreak.blogspot.com/">Helmut Wimmer</a> [axaptafreak] und <a href="http://starside.eu/">Mathias
Füßler</a> [jinx, meinen Co-Autor, oder bin ich seiner? :-)] aussprechen, die mich
immer tatkräftig unterstützt haben.
</p>
        <p>
Natürlich werde ich jetzt nicht aufhören, weiterhin Hilfestellung bei Fragen zum Thema
Dynamics AX zu geben. Ich sehe diese Auszeichnung als Ansporn, mich auch weiterhin
aktiv in der gesamten Dynamics AX Community zu beteiligen.
</p>
        <p>
 
</p>
        <p>
Nochmals, danke an euch alle. 
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=781c2379-5310-4589-a6bf-3861e09f0ac9" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Microsoft Dynamics AX Bücherliste</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,de1fbb3b-ae05-4cda-82d8-3b5f917e22e0.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,de1fbb3b-ae05-4cda-82d8-3b5f917e22e0.aspx</id>
    <published>2008-03-27T20:00:07.828125+01:00</published>
    <updated>2008-03-27T20:23:51.03125+01:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
In Foren, Newsgroups oder auch in persönlichen Gesprächen ergibt sich oft die Frage,
wo man anfangen soll/kann um den Umgang mit Microsoft Dynamics AX zu lernen.
</p>
        <p>
Gerade für Einsteiger oder Anfänger ist es machmal schwer, die Informationen zu finden,
die gerade benötigt werden. Dank der Dynamics AX Community, welche zum Glück
immer größer und besser wird, stellt das Internet mit seinen vielen Dynamics AX Blogs,
Foren, Newsgroups und nicht zuletzt dem Microsoft Dynamics AX Developer Center eine
sehr gut Informationsquelle dar.
</p>
        <p>
Trotzdem hört man oft die Frage, ob es denn keine Bücher über Microsoft Dynamics AX
gibt. Um etwas mehr Klarheit zu schaffen, welche Bücher über Microsoft Dynamics
AX erhältlich sind, hier eine Liste aller Bücher die mir bekannt sind:
</p>
        <ul>
          <li>
            <a href="http://www.amazon.de/Inside-Microsoft-Dynamics-4-0-Pro/dp/0735622574/ref=pd_bbs_sr_2?ie=UTF8&amp;s=books-intl-de&amp;qid=1206644319&amp;sr=8-2">Inside
Microsoft Dynamics AX 4.0</a>
          </li>
          <li>
            <a href="http://www.amazon.de/Quality-Assurance-Dynamics-AX-Based-Solutions/dp/1847192912/ref=sr_1_1?ie=UTF8&amp;s=books-intl-de&amp;qid=1206644428&amp;sr=8-1">Quality
Assurance for Dynamics AX-Based ERP Solutions</a>
          </li>
          <li>
            <a href="http://www.amazon.de/Dynamics-Guide-Microsoft-Axapta-aPress/dp/1590594894/ref=pd_bbs_sr_4?ie=UTF8&amp;s=books-intl-de&amp;qid=1206644319&amp;sr=8-4">Dynamics
AX. A Guide to Microsoft Axapta</a>
          </li>
          <li>
            <a href="http://www.amazon.de/Grundkurs-Microsoft-Dynamics-AX-4-0/dp/3834802522/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1206644319&amp;sr=8-1">Grundkurs
Microsoft Dynamics AX 4.0</a>
          </li>
          <li>
            <a href="http://www.amazon.de/Successfully-Implementing-Microsoft-Dynamics-Approach/dp/3540715924/ref=sr_1_6?ie=UTF8&amp;s=books&amp;qid=1206644319&amp;sr=8-6">Successfully
Implementing Microsoft Dynamics</a>
          </li>
          <li>
            <a href="http://www.amazon.de/Using-Microsoft-Dynamics-Andreas-Luszczak/dp/3834804827/ref=sr_1_7?ie=UTF8&amp;s=books&amp;qid=1206644319&amp;sr=8-7">Using
Microsoft Dynamics AX</a>
          </li>
          <li>
            <a href="http://www.amazon.de/Microsoft-Dynamics-Interview-Questions-Certification/dp/1603320040/ref=sr_1_8?ie=UTF8&amp;s=books-intl-de&amp;qid=1206644319&amp;sr=8-8">Microsoft
Dynamics Ax Interview Questions</a>
          </li>
          <li>
            <a href="http://www.amazon.de/Microsoft-Dynamics-5-0-Programming-Unleashed/dp/0672330105/ref=sr_1_5?ie=UTF8&amp;s=books-intl-de&amp;qid=1206644319&amp;sr=8-5">Microsoft
Dynamics Ax 5.0 Programming Unleashed</a>
          </li>
        </ul>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=de1fbb3b-ae05-4cda-82d8-3b5f917e22e0" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>FormControls zur Laufzeit verschieben</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,d378ef13-cad7-4c7a-a0ef-f23610b7591e.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,d378ef13-cad7-4c7a-a0ef-f23610b7591e.aspx</id>
    <published>2008-02-27T20:40:13+01:00</published>
    <updated>2008-02-27T11:00:47.4333224+01:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p class="MsoNormal">
Ich habe die Erfahrung gemacht, dass FormControls, die zur Laufzeit direkt auf dem
Design der Form erzeugt wurden, sich meisst am rechten Rand befinden.
</p>
        <p class="MsoNormal">
Sollen diese FormControls nun aber nicht am Rechten, sondern am Linken Rand erscheinen,
kann man dieses natürlich schon beim Erzeugen dieser Controls mittels <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><br /></span></p>
        <p class="MsoNormal">
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormGroupControl.leftMode(FormLeft::LeftEdge)</span>  
<br /></p>
        <p class="MsoNormal">
festlegen.
</p>
        <p class="MsoNormal">
Die Probleme treten dann auf, wenn mehrere FormControls erzeugt werden und diese
am Linken Rand erscheinen sollen.
</p>
        <p class="MsoNormal">
Werden nun alle FormControls mit FormControl.leftMode(FormLeft::leftEdge) an den Linken
Rand verschoben, erhält man dann unter Umständen erstaunliche Ergebnisse – nur nicht
die Gewünschten.
</p>
Mit Hilfe der Methode 
<p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FormControl.moveControl(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">int</span> _controlId
[, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">int</span> _insertAfterId <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> 0])</span></p></span><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"></span>kann
jedes Control an eine beliebige Stelle verschoben werden. Der Übergabeparameter ist
hier die ID des zu verschiebenen FormControls. Diese Methode ist nur bei Container
Controls, wie FormGroupControl, FormGridControl oder auf dem Design der Form verfügbar. 
</p><p></p><p class="MsoNormal">
Wird nur 
</p><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">ÜbergeordneteFormControl.moveControl(ControlIDderzuveschiebenenControl)</span></p>
verwendet, wird das Control nur nach links (an die erste Position des Übergeordneten
Controls) verschoben. 
<p></p><p class="MsoNormal"></p><p>
Soll das FormControl hinter einem bestimmten FormControl innerhalb desselben übergeordneten
FormControls platziert werden, wird<span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><br /></span></p><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Übergeordnete.moveControl(ControlIDderzuveschiebenenControl,
ControlIDhinterDerdieControlangefügtwerdensoll)</span></p><p>
benutzt.
</p><p>
Mit .moveControl() können auch FormControls in das übergeordnete Control eingefügt
werden, die vorher nicht in dem übergeordneten Control enthalten waren. 
</p><p></p><p class="MsoNormal">
Anbei eine einfache Form, die schon ein FromGroupControl mit zwei Controls enthält,<span>  </span>bei
der zur Laufzeit zwei neue Controls hinzugefügt werden und die mittels Button nach
links verschoben werden. 
</p><p></p><a href="http://starside.eu/content/binary/FormDynamicControlsMove.zip">FormDynamicControlsMove.zip
(2,55 KB)</a><img width="0" height="0" src="http://starside.eu/cptrk.ashx?id=190cfc3e-8336-4bff-9210-112146e6ea68" /><img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=d378ef13-cad7-4c7a-a0ef-f23610b7591e" /><br /><hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Neues Buch über Microsoft Dynamics AX</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,4ef00beb-a231-49ed-ad4c-fa435a81a9cc.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,4ef00beb-a231-49ed-ad4c-fa435a81a9cc.aspx</id>
    <published>2008-02-12T20:10:36.093+01:00</published>
    <updated>2008-02-12T20:19:52.96875+01:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
In Kürze soll ein neues Buch über Microsoft Dynamics AX erscheinen. Im Schwerpunkt
soll es sich mit dem Thema Qualitätssicherung beschäftigen. Titel des Buchs ist "Quality
Assurance for Dynamics AX-Based ERP Solutions".
</p>
        <p>
Ein Auszug der einzelnen Themenpunkte:
</p>
        <li>
Customization Best Practices backed by theory 
</li>
        <li>
Learn rapidly how to test Dynamics AX applications 
</li>
        <li>
Verify Industry Builder Initiative-compliance of ERP software 
</li>
        <li>
Get ready-made testing templates 
</li>
        <li>
Code, design, and test a quality Dynamics AX-based ERP solution 
<p>
 
</p><p>
Genaueres über das Buch kann man <a href="http://www.packtpub.com/quality-assurance-for-dynamics-ax-based-erp-solutions/book#indetail">hier</a> erfahren.
</p></li>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=4ef00beb-a231-49ed-ad4c-fa435a81a9cc" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Microsoft Dynamics AX API – Teil 4 „Buchen von Bestellungen“</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,249a12dc-34c1-4dea-9abf-6e42217f4e0d.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,249a12dc-34c1-4dea-9abf-6e42217f4e0d.aspx</id>
    <published>2008-01-26T15:12:18.946+01:00</published>
    <updated>2008-01-26T15:20:39.493375+01:00</updated>
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <category term="Dynamics Ax/Programmierung/API" label="Dynamics Ax/Programmierung/API" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung%2cAPI.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Das Buchen von Bestellungen in Microsoft Dynamics AX geschieht über die Klasse „PurchFormLetter“
bzw. einer ihrer konkretisierten (abgeleiteten) Klassen. Jeder Buchungstyp (z.B. Bestätigung
oder Rechnung) ist durch eine eigene Klasse abgebildet, welche von der Basisklasse
„PurchFormLetter“ abgeleitet ist (siehe Abbildung).
</p>
        <p>
          <img src="http://blog.ak-home.net/content/binary/PurchFormLetter.gif" border="0" />
        </p>
        <p>
Abbildung 1 - Klassenhierarchie der Klasse „PurchFormLetter“
</p>
        <p>
Vergleicht man die Klassenhierarchie der „PurchFormLetter“ Klassen mit der Klassenhierarchie
der „SalesFormLetter“ Klassen, so ist zu erkennen, dass auch das Buchen von Bestellungen
vom Prinzip her genau so funktioniert wie das Buchen von Aufträgen (Vergleiche hierzu: <a href="http://blog.ak-home.net/PermaLink,guid,5cb22557-acb4-41ec-9546-c65d681e3a3d.aspx">Microsoft
Dynamics AX API – Teil 3 „Buchen von Aufträgen“</a>).
</p>
        <p>
Deswegen sind auch für das Buchen von Bestellungen im Wesentlichen nur zwei Schritte
notwendig.
</p>
        <ol>
          <li>
Über die Methode „construct“ der Klasse „PurchFormLetter“ ein dem Buchungstyp einsprechendes
Objekt erzeugen. 
</li>
          <li>
Über den Aufruf der Methode „update“ die Bestellung buchen.</li>
        </ol>
        <p>
Hierzu ein Beispiel (Buchen des Lieferscheins für eine Bestellung):
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">static</span>
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">void</span> PurchPostPackingSlip(Args
_args)<br />
{<br />
   PurchFormLetter purchFormLetter;<br />
   PurchTable purchTable;<br />
   PurchId purchId;<br />
   Num packingSlipId;<br />
   ;<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //Angabe
der Bestellung, für welche der Lieferschein gebucht werden soll.</span><br />
   purchId <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"00244_049"</span>;<br />
   purchTable <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> PurchTable::find(purchId);<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //Bestimmen
des Buchungstyps durch Angabe des DocumentStatus (Lieferschein).</span><br />
   purchFormLetter <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> PurchFormLetter::construct(DocumentStatus::PackingSlip);<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //Festlegen
der externen Lieferscheinnummer.</span><br />
   packingSlipId <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"EXT-100155L"</span>;<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //Buchen
des Lieferscheins.</span><br />
   purchFormLetter.update(purchTable,<br />
                          packingSlipId,<br />
                          SystemDateGet(),<br />
                          PurchUpdate::All,<br />
                          AccountOrder::Auto,<br />
                          NoYes::No,<br />
                          NoYes::No,<br />
                          NoYes::No,<br />
                          NoYes::No);<br />
}</span>
        </p>
        <p>
Einziger Unterschied zu den Auftragsbuchen ist, dass bei der Buchung einer Bestellung
die „externe“ Nummer des Belegs (Lieferscheinnummer, Rechnungsnummer, etc.) angegeben
werden muss.
</p>
        <p>
Analog zu den Auftragsbuchen, sind auch beim Buchen von Bestellungen umfangreichere
oder etwas speziellere Buchungsszenarien möglich (Vergleiche hierzu: <a href="http://blog.ak-home.net/PermaLink,guid,5cb22557-acb4-41ec-9546-c65d681e3a3d.aspx">Microsoft
Dynamics AX API – Teil 3 „Buchen von Aufträgen“</a>).
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=249a12dc-34c1-4dea-9abf-6e42217f4e0d" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Neues über Microsoft Dynamics AX 5.0, oder wird es doch Microsoft Dynamics AX 2009?</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,d5aa029e-7fd7-4e0d-b274-f0dc5b223c1f.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,d5aa029e-7fd7-4e0d-b274-f0dc5b223c1f.aspx</id>
    <published>2008-01-17T20:07:08.062+01:00</published>
    <updated>2008-01-17T20:38:12.765625+01:00</updated>
    <category term="Allgemein" label="Allgemein" scheme="http://blog.ak-home.net/CategoryView,category,Allgemein.aspx" />
    <category term="Dynamics Ax" label="Dynamics Ax" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://blogs.msdn.com/aeremenk/about.aspx">Alexei Eremenko</a> hat auf seinem <a href="http://blogs.msdn.com/aeremenk/default.aspx">Blog</a> einige
Artikel über die kommende Version von Microsoft Dynamics AX und dessen neue Features
veröffentlicht. Da diese leider in Russich geschrieben sind, hier eine kurze Zusammenfassung:
</p>
        <ul>
          <li>
Aus Microsoft Dynamics AX 5.0 wird Microsoft Dynamics AX 2009. 
</li>
          <li>
Geänderte Benutzeroberfläche (Office 2007 Style, inkl. Ribbon's). 
</li>
          <li>
Neue "Funktion" Rollcenter, die dem Benutzer schnellen Zugriff auf die, für seine
Arbeit, relevanten Daten geben soll.   
</li>
          <li>
Unterstützung des UNION Befehl's für SQL Abfragen, bei Verwendung der Query-Klassen. 
</li>
          <li>
Neuer Exception-Typ "DublicateKeyException" zur Ausnahmebehandlung wenn ein Datensatz
schon besteht. 
</li>
          <li>
Die SQL DML bulk Anweisungen erlauben die Verwendung von Inner- und Outer-Joins. 
</li>
          <li>
Zugriff auf das Ergebnis der "update_recordset" Anweisung, um zu bestimmen wie viele
Datensätze durch die Operation geändert wurden. 
</li>
          <li>
CrossCompany-Unterstützung für Datenbankabfragen (Daten aus unterschiedlichen Mandaten
können in einer SQL Anweisung behandelt werden).</li>
        </ul>
        <p>
Wer die orginalen Artikel einmal selber lesen möchte, findet die einzelnen Blog-Posts
hier:<br />
(Die Links verweisen auf die Übersetzung der Artikel ins Englische) 
</p>
        <ul>
          <li>
            <a href="http://64.233.179.104/translate_c?hl=de&amp;langpair=ru%7Cen&amp;u=http://blogs.msdn.com/aeremenk/archive/2008/01/14/7108028.aspx">What's
new in Microsoft Dynamics AX 2009?</a>
          </li>
          <li>
            <a href="http://64.233.179.104/translate_c?hl=de&amp;langpair=ru%7Cen&amp;u=http://blogs.msdn.com/aeremenk/archive/2008/01/15/7118429.aspx">DAX
2009, which in conjunction with the new database?</a>
          </li>
          <li>
            <a href="http://64.233.179.104/translate_c?hl=de&amp;langpair=ru%7Cen&amp;u=http://blogs.msdn.com/aeremenk/archive/2008/01/16/7128142.aspx">DAX
2009, working with several companies</a>
          </li>
        </ul>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=d5aa029e-7fd7-4e0d-b274-f0dc5b223c1f" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Berichte - Standardfunktionen beim Überschreiben der Fetch Methode</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,9affcaa3-31b0-4c2a-a0d3-5d2bb786b48e.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,9affcaa3-31b0-4c2a-a0d3-5d2bb786b48e.aspx</id>
    <published>2008-01-15T11:30:17+01:00</published>
    <updated>2008-01-15T11:28:53.28125+01:00</updated>
    <category term="Dynamics Ax/Programmierung, Dynamics Ax/HowTo" label="Dynamics Ax/Programmierung, Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung%2c%2BDynamics%2BAx%2cHowTo.aspx" />
    <content type="html">&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Wird in einem
Bericht die Fetch Methode überschrieben sollte man drauf achten, dass&amp;nbsp;die Standardfunktionen
auch noch richtig funktionieren. Ein gutes Beispiel hier sind die Einstellungen im
Seitenbereich.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://starside.eu/content/binary/ReportOptionSeitenbereich.JPG" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Wird in der Fetch
Methode nicht super() aufgerufen und mit einer individuellen Abfrage gearbeitet, welche
die Daten dem Bericht übergibt, werden die Einstellungen in der Gruppe "Seitenbereich"
meist ignoriert. Es werden dann zwar nur die angebenden Seiten gedruckt, die Abfrage
wird aber weiter durchgeführt. Das führt dann dazu, dass immer abgewartet werden muss
bis die komplette Abfrage ausgeführt wurde, obwohl man evtl. nur einen kleinen Bruchteil
der Daten (wie z.B. die erste Seite) benötigt.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Das kann man ganz
einfach verhindern indem in der Fetch Methode abgefragt wird, ob die Daten an den
Bericht gesendet wurden. Hierzu wird die send(...) Methode benutzt.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/span&gt; boolean
fetch()&lt;br&gt;
{&lt;br&gt;
Query queryBuild;&lt;br&gt;
QueryRun queryRunBuild;&lt;br&gt;
InventTrans iTrans;&lt;br&gt;
;&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; (&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;this&lt;/span&gt;.prompt())&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;queryBuild &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;this&lt;/span&gt;.query();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;queryRunBuild &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; QueryRun(queryBuild);&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&lt;/span&gt; (queryRunBuild.next())&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;iTrans &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; queryRunBuild.get(tablenum(InventTrans));&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//
Wurde der aktuelle Datensatz ausgeben&lt;/span&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&lt;/span&gt; (!&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;this&lt;/span&gt;.send(iTrans))&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;true&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
}&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;return&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;true&lt;/span&gt;;&lt;br&gt;
}&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Es muss also immer
überprüft werden, ob die Daten gedruckt werden oder nicht. Das passiert mit:&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; (!&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;this&lt;/span&gt;.send(meineDaten))&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;true&lt;/span&gt;;&lt;/span&gt;
&lt;/span&gt;&gt;
&lt;img width="0" height="0" src="http://starside.eu/cptrk.ashx?id=9cec65cc-a38d-4767-8f6d-e0bcca1d2e1c"&gt;&lt;img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=9affcaa3-31b0-4c2a-a0d3-5d2bb786b48e" /&gt;
&lt;br /&gt;
&lt;hr /&gt;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)</content>
  </entry>
  <entry>
    <title>Auswahl von mehreren Datens&amp;auml;tzen in einem Grid-Control (MultiSelect)</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,c1798182-de60-4146-85ed-06035d74c6c6.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,c1798182-de60-4146-85ed-06035d74c6c6.aspx</id>
    <published>2008-01-02T21:39:57+01:00</published>
    <updated>2008-01-02T22:50:35.772125+01:00</updated>
    <category term="Dynamics Ax/HowTo" label="Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cHowTo.aspx" />
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Für ein Grid-Control kann über die Einstellung "MultiSelect" gesteuert werden, od
dieses Control die Auswahl von mehr als einem Datensatz erlaubt.
</p>
        <p>
Gültige Einstellungen sind:<br />
Yes - Es können mehrere Datensätze ausgewählt werden.<br />
No - Es kann immer nur ein Datensatz ausgewählt werden.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/67f84a96e997_1389C/GridSelectedOneRecord_2.jpg">
            <img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="82" alt="GridSelectedOneRecord" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/67f84a96e997_1389C/GridSelectedOneRecord_thumb.jpg" width="244" border="0" />
          </a>
          <br />
Auswahl eines Datensatzes
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/67f84a96e997_1389C/GridSelectedMultipleRecords_2.jpg">
            <img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="115" alt="GridSelectedMultipleRecords" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/67f84a96e997_1389C/GridSelectedMultipleRecords_thumb.jpg" width="244" border="0" />
          </a>
          <br />
Auswahl mehrerer Datensätze
</p>
        <p>
Zugriff auf die aktuelle Selektion (einer oder mehrere) erhält man wie folgt beschrieben:
</p>
        <p>
Ist nur ein Datensatz markiert, bzw. soll mit einfacher Auswahl gearbeitet werden
(MultiSelect = No), kann der ausgewählte Datensatz über den aktuellen DataSource-Cursor
der Grid-Control DataSource ermittelt werden.<br />
Der DataSource-Cursor steht immer auf dem zu letzt ausgewählten Datensatz eines Grid-Control's.
</p>
        <p>
Beispiel:
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">void</span> clicked()<br />
{<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //CustTable
ist die DataSource des Grid-Controls </span><br />
   ;<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //Datenoperationen
für den Datensatz ausführen.</span><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //Do
something....</span><br />
   info(CustTable.AccountNum);   <br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //Angezeigte
Datensätze im Grid Control aktualisieren</span><br />
   element.lockWindowUpdate(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">true</span>);<br />
   CustTable_ds.research();<br />
   element.lockWindowUpdate(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">false</span>);<br />
}<br /></span>
        </p>
        <style type="text/css">.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; }
</style>
        <p>
Soll eine Mehrfachauswahl möglich sein, reicht der Zugriff auf den aktuellen DataSource-Cursor
nicht mehr aus. Um alle ausgewählten Datensätze der DataSource zu erhalten, muss diese
mit einer Schleife unter Verwendung der Methoden "getFirst" und "getNext" durchlaufen
werden. Hilfreich hierbei ist die Methode "anyMarked", mit welcher ermittelt werden
kann ob mehrere Datensätze ausgewählt sind oder nicht.
</p>
        <p>
Auch hierfür ein Beispiel:
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">void</span> clicked()<br />
{<br />
   CustTable selectedCustTable;<br />
   Common currentRecord;<br />
   ;<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   if</span> (CustTable_ds.anyMarked()) <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">//Es
sind meherer Datensätze selektiert.</span><br />
   {<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">      //Ersten
selektierten Datensatz ermitteln.</span><br />
      selectedCustTable <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> CustTable_ds.getFirst(1);<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">      while</span>(selectedCustTable)<br />
      {<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">         //Datenoperationen
für den Datensatz ausführn.</span><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">         //Do
something....</span><br />
         info(selectedCustTable.AccountNum);<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">         //Nächsten
selektieren Datensatz ermitteln.</span><br />
         selectedCustTable <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> CustTable_ds.getNext();<br />
      }<br />
   }<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   else</span><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">//Nur
ein Datensatz ist selektiert.</span><br />
   {<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">      //Selektierten
Datensatz ermitteln.</span><br />
      currentRecord <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> CustTable_ds.cursor().data();<br />
      selectedCustTable <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> CustTable_ds.cursor();<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">      //Datenoperationen
für den Datensatz ausführen.</span><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">      //Do
something....</span><br />
      info(selectedCustTable.AccountNum);<br />
   }<br /><br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">   //Angezeigte
Datensätze im Grid Control aktualisieren   </span><br />
   element.lockWindowUpdate(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">true</span>);<br />
   CustTable_ds.research();<br />
   CustTable_ds.findRecord(currentRecord);<br />
   CustTable_ds.refresh();<br />
   element.lockWindowUpdate(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">false</span>);<br />
}<br /></span>
        </p>
        <div class="wlWriterSmartContent" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:88a38c7a-9239-4f4e-bead-9888f3b5b81a" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">
          <p>
Der Quellcode des Beispiels:<br /></p>
        </div>
        <a href="http://blog.ak-home.net/content/binary/Form_GridSelectedRecords.xpo">Form_GridSelectedRecords.xpo
(6.2 KB)</a>
        <p>
        </p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=c1798182-de60-4146-85ed-06035d74c6c6" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Debuggen von Queries</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,35e4fcc9-ee88-4407-bd10-6fb758baac84.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,35e4fcc9-ee88-4407-bd10-6fb758baac84.aspx</id>
    <published>2007-12-27T15:40:11.827375+01:00</published>
    <updated>2007-12-27T16:01:15.046125+01:00</updated>
    <category term="Dynamics Ax/HowTo" label="Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cHowTo.aspx" />
    <category term="Dynamics Ax/Programmierung" label="Dynamics Ax/Programmierung" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung.aspx" />
    <category term="Dynamics Ax/Tools" label="Dynamics Ax/Tools" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cTools.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Von Zeit zu Zeit ist es hilfreich sich den Abfragebefehl, der durch eine Query erzeugt
wird, zur Laufzeit anzusehen.
</p>
        <p>
Leider unterstützt der Debugger von Microsoft Dynamics AX das Debuggen von Querys
nicht. Ein Datenbanktrace durchzuführen ist auch nicht immer sinnvoll, da man
durch das Traceprotokoll keine direkte "Verbindung" von Abfragebefehl und Query einsehen
kann.
</p>
        <p>
Einen Workaround hierfür gibt es aber.
</p>
        <p>
Die Methode "toString" einer Query DataSource gibt den Abfragbefehl, der durch die
Query an die Datenbank geschickt wird, zurück. Dieser kann dann, durch die statischen
Methoden des "Debug" Objekts, im Debuggers ausgegeben bzw. angezeigt werden.
</p>
        <p>
Ein Beispiel:
</p>
        <p>
debug::printDebug(query.dataSourceTable(tablenum(CustTable)).toString())
</p>
        <p>
Weiterhin ist unter <a href="http://www.axaptapedia.com/DEV_QueryBrowser">http://www.axaptapedia.com/DEV_QueryBrowser</a> ein
Tool für die Analyse von Querys erhältlich. Dieses Tool funktioniert ähnlich wie der
Tablebrowser von Dynamics AX. Mit dem Tool können nicht nur der Abfragebefehl, der
durch eine Query erstellt wird, sondern auch die von der Query ermittelten Daten
betrachtet und ausgewertet werden.
</p>
        <p>
Eine ausreichende Beschreibung zur Verwendung des Tool's ist ebenfalls auf Axaptapedia
(siehe Link weiter oben) zu finden.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=35e4fcc9-ee88-4407-bd10-6fb758baac84" />
        <br />
        <hr />
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)
</div>
    </content>
  </entry>
  <entry>
    <title>Quellcodeverwaltung mit Dynamics AX 5.0</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/