<?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>2012-03-31T14:06:38.993125+02: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>The Microsoft Dynamics Most Influential People Top 100 List for 2012&amp;ndash;Voting has started</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,55a04a89-e654-471a-98c1-535476b946a7.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,55a04a89-e654-471a-98c1-535476b946a7.aspx</id>
    <published>2012-03-31T13:56:37.165+02:00</published>
    <updated>2012-03-31T14:06:38.993125+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>
Wie auch in den vergangenen Jahren, wurde auf <a href="http://www.dynamicsworld.co.uk/">DynamicsWorld</a> das
Voting der Top 100 Most Influential People Top 100 for 2012 gestartet.<br />
Da wir alle von und mit der Community leben, würde ich mich sehr freuen, wenn viele
von Euch an dem Voting teilnehmen.
</p>
        <p>
Ja, auch ich stehe dieses Jahr wieder auf der Voting-Liste.<br />
Somit hätte ich auch nicht dagegen, wenn die eine oder andere Stimme auf mich fallen
würde. <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smiley" src="http://blog.ak-home.net/content/binary/Windows-Live-Writer/The-Microsoft-Dynamics-Most-Influential-_C22F/wlEmoticon-smile_2.png" /></p>
        <p>
Hier der Link zum Voting:
</p>
        <p>
          <a href="http://www.dynamicsworld.co.uk/top-100-voting-starts-now/">Top 100 Voting
Starts Now</a>
        </p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=55a04a89-e654-471a-98c1-535476b946a7" />
        <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>Masken pro Unternehmenskonto unterschiedlich färben</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,18ebdb1b-5bd1-4117-a569-74114c5701eb.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,18ebdb1b-5bd1-4117-a569-74114c5701eb.aspx</id>
    <published>2011-12-12T20:23:53.441+01:00</published>
    <updated>2011-12-12T20:37:36.737875+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" />
    <category term="Dynamics AX/Dynamics AX 2012" label="Dynamics AX/Dynamics AX 2012" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2012.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>
Viele kennen sicherlich das von <a href="http://daxguy.blogspot.com/2010/04/ax-environment-information-on-ui-simple.html">Arijit
Basu</a> geschrieben Add-On für Dynamics AX 2009, welches es ermöglicht, in jeder
Maske einen farbigen Balken einzublenden um auf einfach Art und Weise sehen zu können
in welchem Unternehmenskonto gerade gearbeitet wird.
</p>
        <p>
Heute hat Palle Agermark in seinem Blog dieses nette Add-On auch für Dynamics
AX 2012 veröffentlicht. 
</p>
        <p>
Mehr Informationen zu dem Add-On sind im Blog von <a href="http://palleagermark.blogspot.com/2011/12/color-code-forms-in-ax-2012-depending.html?spref=fb">Palle
Agermark</a> zu finden.<br /><strong><a href="http://palleagermark.blogspot.com/2011/12/color-code-forms-in-ax-2012-depending.html?spref=fb">Color
code forms in AX 2012, depending on environment/company</a></strong></p>
        <p>
Bleibt nur zu sagen:
</p>
        <p>
          <strong>Thanks...great job. :-)</strong>
        </p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=18ebdb1b-5bd1-4117-a569-74114c5701eb" />
        <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>Bearbeiten der Sicherheitsrollen nicht m&amp;ouml;glich?</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,b19e5fe8-6c7d-43cd-8538-390ecec6c1e0.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,b19e5fe8-6c7d-43cd-8538-390ecec6c1e0.aspx</id>
    <published>2011-12-11T19:42:08.40975+01:00</published>
    <updated>2011-12-11T19:42:08.40975+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" />
    <category term="Dynamics AX/Dynamics AX 2012" label="Dynamics AX/Dynamics AX 2012" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2012.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>
In Dynamics AX 2012 können die im Standard mitgelieferten Sicherheitsrollen normalerweise
über den den Menüpunkt „Systemverwaltung-&gt;Einstellungen-&gt;Sicherheit-&gt;Sicherheitsrollen“
den eigenen Bedürfnissen angepasst werden.<br />
Leider kann es vorkommen, dass die hierfür benötigten Menüoptionen (Neu, Löschen,
Hinzufügen, etc.) nicht auswählbar sind.
</p>
        <p>
Es gibt hierbei eine kleine Einschränkungen welche beachtet werden muss. Sicherheitsrollen
können nur über diesen Menüpunkt angelegt oder verändert werden, wenn die Versionskontrolle
deaktiviert ist.<br />
Sobald man die Versionskontrolle aktiviert ist das Bearbeiten der Sicherheitsrollen
nur noch über die Entwicklungsumgebung (AOT) möglich.
</p>
        <p>
Es ist aber gut denkbar, dass man hiermit ausschließen möchte, dass während der Entwicklung
Rollen oder Aufgaben über 2 Wege gleichzeitige bearbeitet werden können.<br />
Der Menüpunkt zur Bearbeitung der Sicherheitsrollen ist in erster Linie für Administratoren
gedacht um die Sicherheitsrollen administrieren zu können.<br />
Entwickler, welche Sicherheitsrollen anpassen, um z.B. den Zugriff auf neu Funktionen
(Anpassungen) zu ermöglichen, führen diese normalerweise in der Entwicklungsumgebung
(AOT) aus, damit diese zusammen mit der Anpassung ausgeliefert werden können.
</p>
        <p>
Leider kann es zu Unstimmigkeiten kommen, wenn gleichzeitig über den AOT und die Maske
von Dynamics AX eine Bearbeitung der Rollen erfolgt. 
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=b19e5fe8-6c7d-43cd-8538-390ecec6c1e0" />
        <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 Information Source - Beta</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,1f52708a-d863-4171-ac85-0e34e532648f.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,1f52708a-d863-4171-ac85-0e34e532648f.aspx</id>
    <published>2011-11-19T16:22:59.843+01:00</published>
    <updated>2011-11-19T16:24:58.125+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" />
    <category term="Dynamics AX/Dynamics AX 2012" label="Dynamics AX/Dynamics AX 2012" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2012.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/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>
Zeitgleich mit der Dynamics AX Technical Conference in Nizza wurde ein neues Portal
zu Dynamics AX veröffentlicht.
</p>
        <p>
          <a href="http://informationsource.dynamics.com/rfpservicesonline/">Microsoft Dynamics
Information Source</a>
        </p>
        <p>
Das Information Source enthält derzeit folgende Informationen:
</p>
        <ul>
          <li>
Eine Bibliothek mit Videos, Dokumenten und Guidelines welche einzelne Bereich der
Anwendung beschreiben 
</li>
          <li>
Eine Art von Q&amp;A Fragenkatalog 
</li>
          <li>
Tools und Hilfsmittel rund um Dynamics AX</li>
        </ul>
        <p>
Hier ist aus meiner Sicht besonders das <a href="http://technet.microsoft.com/en-us/library/hh378080.aspx">Application
Analysis Tool for Microsoft Dynamics AX</a> zu nennen, welches eine breite Analyse
des AX Systems ermöglicht.<br />
Auch im Technet ist eine Dokumentation zu diesen Tools zu finden.
</p>
        <p>
          <a href="http://technet.microsoft.com/en-us/library/hh378081.aspx">Microsoft Dynamics
Information Source [AX 2012] - Technet</a>
        </p>
        <p>
Es ist schön zu sehen, dass immer mehr Informationen zu Dynamics AX veröffentlicht
werden und dass auch endlich eine Vielzahl an Tools bereits steht, welche die tägliche
Arbeit mit Dynamics AX aus Sicht eines Beraters, Entwicklers und IT-Mitarbeiters erheblich
vereinfachen. Für den Zugriff auch das Information Source von Microsoft wird ein bestehender
PartnerSource oder CustomerSource benötigt.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=1f52708a-d863-4171-ac85-0e34e532648f" />
        <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>Kumulatives Update 2 f&amp;uuml;r Microsoft Dynamics AX 2012</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,4971404e-90ec-4bcb-87a5-6f7b4881b9fb.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,4971404e-90ec-4bcb-87a5-6f7b4881b9fb.aspx</id>
    <published>2011-11-19T16:01:39.546875+01:00</published>
    <updated>2011-11-19T16:01:39.546875+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" />
    <category term="Dynamics AX/Dynamics AX 2012" label="Dynamics AX/Dynamics AX 2012" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2012.aspx" />
    <category term="Dynamics AX/Updates" label="Dynamics AX/Updates" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cUpdates.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Nachdem kurz nach dem Release von Dynamics AX 2012 das erste Update (CU1) von Microsoft
bereit gestellt wurde, ist nun auch das zweite Update verfügbar.<br />
Das kumulative Update 2 für Dynamics AX 2012 (CU2) kann über die Hilfe uns Support
Seite von Microsoft bezogen werden.
</p>
        <p>
          <a href="http://support.microsoft.com/kb/2606916">Kumulatives Update 2 für Dynamics
AX 2012</a>
        </p>
        <p>
Wie auch schon das CU1, kann auch das CU2 mittels “Slipstream-Installation” bei der
Installation von Dynamics AX 2012 für z.B. neue Clients mit installiert werden.<br />
Nähere Informationen wie eine “Slipstream-Installation” ausgeführt wird, kann im Microsoft
Dynamics AX Technical Support Blog nachgelesen werden.
</p>
        <p>
          <a href="http://blogs.msdn.com/b/emeadaxsupport/archive/2011/08/22/how-can-i-slipstream-cumulative-updates-for-ax-2012-as-part-of-a-new-installation.aspx">How
can I slipstream Cumulative Updates for AX 2012 as part of a new installation</a>
        </p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=4971404e-90ec-4bcb-87a5-6f7b4881b9fb" />
        <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 2012 is now on the market</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,319161c3-a1bb-45e9-8d27-1d2e4ab90b0e.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,319161c3-a1bb-45e9-8d27-1d2e4ab90b0e.aspx</id>
    <published>2011-08-04T13:05:51.891+02:00</published>
    <updated>2011-08-04T18:05:19.7665+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>
Lange haben wir mit Spannung gewartet. Nun hat das Warten eine Ende. 
</p>
        <p>
Die neue Version von Microsoft Dynamics AX, Dynamics AX 2012, ist seit dem 01. August
2011 verfügbar.
</p>
        <p>
Mehr Informationen und die entsprechende Ankündigung ist hier zu finden:<br /><a href="https://community.dynamics.com/b/theedge/archive/2011/08/01/drum-roll-please-microsoft-dynamics-ax-2012-is-now-on-the-market.aspx">Drum
Roll Please… Microsoft Dynamics AX 2012 is now on the market!</a></p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=319161c3-a1bb-45e9-8d27-1d2e4ab90b0e" />
        <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>Einen Datensatz in einem Tabellenfeld einer anderen Tabelle speichern</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,f0ddb444-5f09-4970-9d63-e909bf24edf9.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,f0ddb444-5f09-4970-9d63-e909bf24edf9.aspx</id>
    <published>2011-02-07T19:59:20.554+01:00</published>
    <updated>2011-02-07T20:03:09.9950357+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/Dynamics AX 2009" label="Dynamics AX/Dynamics AX 2009" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2009.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>
Das Speichern eines Datensatzes in einem Tabellen-Feld ist an sich kein Problem.<br />
Aber leider ist dies eine der nicht so oft verwendeten Sachen in der Dynamics AX Entwicklung
und wird deshalb immer mal gerne wieder vergessen. :-)
</p>
        <p>
Wir haben also eine Tabelle mit einem Feld, welches einen Container als Datentyp hat.<br />
Weiterhin haben wir einen Datensatz welchen wir in diesem Feld speichern wollen.<br />
Wie bekommen wir nun den Datensatz in dem Feld gespeichert? Ein direkte Zuweisung
für hierbei leider zu einem Fehler.
</p>
        <p>
Für diese Operationen stellt der Dynamics AX Standard folgende Funktionen zur Verfügung:
</p>
        <ul>
          <li>
buf2con(common buffer) 
</li>
          <li>
con2buf(container c, common buffer)</li>
        </ul>
        <p>
          <u>
            <strong>Schreiben des Datensatzes in das Tabellenfeld</strong>
          </u>
        </p>
        <p>
Die Funktion “buf2Con” wandelt eine Datensatz in einen Container, welcher entsprechend
in dem Tabellen-Feld gespeichert werden kann.
</p>
        <p>
          <strong>
            <u>Lesen des Datensatzes aus dem Tabellenfeld</u>
          </strong>
        </p>
        <p>
Die Funktion “con2buf” wandelt einen Container (genauer dessen Inhalt) wieder zu einem
Datensatz um.
</p>
        <p>
Allerdings sollte bei der Verwendung dieser beiden Funktionen immer bedacht werden,
dass Änderungen an Tabellen, von denen Datensätze auf diese Art gespeichert werden
zu Problemen führen können.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=f0ddb444-5f09-4970-9d63-e909bf24edf9" />
        <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 SP1 und Microsoft SharePoint 2010</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,04e0b6b3-76c1-4e98-8d58-6a3d5bd407d4.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,04e0b6b3-76c1-4e98-8d58-6a3d5bd407d4.aspx</id>
    <published>2010-08-16T21:25:44.604+02:00</published>
    <updated>2010-08-16T21:28:14.5188657+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/Dynamics AX 2009" label="Dynamics AX/Dynamics AX 2009" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2009.aspx" />
    <category term="Dynamics AX/Enterprise Portal" label="Dynamics AX/Enterprise Portal" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cEnterprise%2BPortal.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Wie im Blog des Dynamics AX Sustained Engineering Teams zu lesen ist, wird der neue
SharePoint Server, Microsoft SharePoint 2010, nun auch von Dynamics AX 2009 SP1 unterstützt.
</p>
        <p>
Es wird allerdings empfohlen, dass Hotfix Rollup 5 zu installieren.
</p>
        <p>
Genauere Details können dem Blog des <a href="http://blogs.technet.com/b/dynamicsaxse/">Dynamics
AX Sustained Engineering Teams</a> oder im “<a href="http://blogs.msdn.com/b/solutions/">Solutions
Monkey</a>” Blog entnommen werden:
</p>
        <p>
          <a href="http://blogs.technet.com/b/dynamicsaxse/archive/2010/08/12/new-compatibility-testing-result-august-2010.aspx">Artikel
im Blog des Dynamics AX Sustained Engineering Teams</a>
        </p>
        <p>
          <a href="http://blogs.msdn.com/b/solutions/archive/2010/08/13/microsoft-sharepoint-2010-foundation-compatibility-mode-support-with-dynamics-ax-2009-service-pack-1-enterprise-portal.aspx">Artikel
im “Solutions Monkey” Blog</a>
        </p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=04e0b6b3-76c1-4e98-8d58-6a3d5bd407d4" />
        <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>Assistent für AIF-Dokumentendienste und Tabellen mit InventDimId</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,adfe4c38-e6c3-47b3-a644-930be36f1a04.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,adfe4c38-e6c3-47b3-a644-930be36f1a04.aspx</id>
    <published>2010-08-05T21:30:32.39+02:00</published>
    <updated>2010-08-05T21:32:31.6527413+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/AIF" label="Dynamics AX/AIF" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cAIF.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" />
    <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>
Mit Microsoft Dynamics AX 2009 wird für die Erstellung neuer dokumentenbasierter AIF-Services
ein Tool/Wizard mitgeliefert, der so genannte “Assistent für AIF-Dokumentendienste”,
welcher den Entwickler bei der Erstellung eines neuen AIF-Services unterstützt.
</p>
        <p>
Wie dieser Wizard verwendet wird, kann zum Beispiel in der MSDN nachgelesen werden:
</p>
        <p>
          <a href="http://msdn.microsoft.com/en-us/library/aa609947.aspx">How to: Create a Service
Using the AIF Document Service Wizard</a>
          <br />
          <a href="http://msdn.microsoft.com/en-us/library/cc589855.aspx">Walkthrough: Creating
a Service Using the AIF Document Service Wizard</a>
        </p>
        <p>
In den meisten Fällen funktioniert dieser Wizard auch sehr gut und bietet somit eine
echte Entwicklungsunterstützung.<br />
Es gibt allerdings auch Fälle in denen der Wizard auf einen Fehler läuft, welche auf
den ersten Blick sehr schwer zu verstehen sind.
</p>
        <p>
Ein Beispiel hierfür sind Tabellen, die ein Feld beinhalten welches als Datentyp den
Extended Data Type “InventDimId” definiert hat.<br />
Wird beim Erstellen des Query-Objekts für den AIF-Service nicht darauf geachtet, dass
auch die Tabelle  InventDim mit entsprechender Relation in die Query aufgenommen
wird, erzeugt der Wizard eine Fehlermeldung.
</p>
        <p>
Wird folgende Query für den neuen AIF-Service angelegt und diese für die Generierung
des AIF-Service verwendet
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/AssistentfrAIFDokumentendiensteundTabell_12592/AxdQueryNotWorking.jpg" target="_blank">
            <img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="AxdQueryNotWorking" border="0" alt="AxdQueryNotWorking" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/AssistentfrAIFDokumentendiensteundTabell_12592/AxdQueryNotWorking_thumb.jpg" width="240" height="244" />
          </a>
        </p>
        <p>
erzeugt der Assistent für AIF-Dokumentendienste folgenden Fehler:
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/AssistentfrAIFDokumentendiensteundTabell_12592/AifWizardError.jpg" target="_blank">
            <img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="AifWizardError" border="0" alt="AifWizardError" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/AssistentfrAIFDokumentendiensteundTabell_12592/AifWizardError_thumb.jpg" width="244" height="104" />
          </a>
        </p>
        <p>
Um diesem Problem aus dem Weg zu gehen, muss die Tabelle “InventDim” mit in die Query
aufgenommen werden, selbst wenn diese für den Dokumentkontext nicht von Bedeutung
ist.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/AssistentfrAIFDokumentendiensteundTabell_12592/AxdQueryWorking.jpg" target="_blank">
            <img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="AxdQueryWorking" border="0" alt="AxdQueryWorking" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/AssistentfrAIFDokumentendiensteundTabell_12592/AxdQueryWorking_thumb.jpg" width="244" height="195" />
          </a>
        </p>
        <p>
Anmerkung:<br />
An dieser Stelle soll auch auf den Punkt hingewiesen werden, dass der Assistent für
AIF-Dokumentendienste keinen vollständig funktionsfähigen AIF-Service erstellt.<br />
Es wird eher mehr das Grundgerüst des AIF-Service angelegt und der Entwickler muss
nach Ausführung des Wizards unter Anderem noch die benötigte Business-Logik ergänzen
um die gewünschte Funktionalität bereit stellen zu können.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=adfe4c38-e6c3-47b3-a644-930be36f1a04" />
        <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 AX AIF Webservices &amp;ndash; Date, Time und Datetime Datentypen</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,0af37380-886b-44e0-a6ec-ad04fc527ef8.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,0af37380-886b-44e0-a6ec-ad04fc527ef8.aspx</id>
    <published>2010-06-11T21:33:13.503+02:00</published>
    <updated>2010-06-11T21:34:49.9886929+02:00</updated>
    <category term=".NET" label=".NET" scheme="http://blog.ak-home.net/CategoryView,category,.NET.aspx" />
    <category term=".NET/Compact Framework" label=".NET/Compact Framework" scheme="http://blog.ak-home.net/CategoryView,category,.NET%2cCompact%2BFramework.aspx" />
    <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/AIF" label="Dynamics AX/AIF" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cAIF.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" />
    <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/.NET" label="Dynamics Ax/Programmierung/.NET" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cProgrammierung%2c.NET.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ein großer Vorteil des Application Integration Frameworks (AIF) gegenüber “selbst
geschriebene” Schnittstellen ist es, dass man sich über Dinge wie Datentyp-Mapping
keine Gedanken machen muss.<br />
Das Application Integration Framework verfügt über die entsprechende Logik, um alle
Dynamic AX Datentypen automatisch in den jeweils gültigen XSD-Datentyp zu “mappen”
(oder umgekehrt).
</p>
        <p>
Zeiten, in denen sich der Entwickler zum Beispiel Gedanken machen musste, wie viele
Nachkommastellen eine Zahl haben darf, oder welches Zeichen als Dezimaltrennzeichen
verwendet werden muss, sind somit vorbei.<br />
Da alle Daten die aus Dynamics AX exportiert oder nach Dynamics AX importiert werden,
in einem XSD-Schema konformen XML-Dokument “transportiert” werden, und das AIF entsprechendes
Mapping bereits stellt, geschieht das Datentyp-Mapping automatisch.
</p>
        <p>
Allerdings kann auf Seiten der Anwendung, welche über das Application Integration
Framework (AIF) angebunden werden soll, ein wenig “Verwirrung” entstehen.<br />
Durch die von Programmiersprache zu Programmiersprache durchaus unterschiedlichen
Datentypen kann es vorkommen, dass Dynamics AX Datentypen nicht in dem erwarteten
Datentyp der anderen Programmiersprache erscheinen.<br />
Dies ist allerding kein “wirkliches” Problem des Application Integration Frameworks
(AIF), sondern eher eine Frage, welche Datentypen eine Programmiersprache bereit stellt
und wie diese in XSD-Datentypen “gemappt” werden.
</p>
        <p>
Ein gutes Beispiel hierfür sind die Dynamics AX Datentypen “Date”, “Time” und “DateTime”
(inklusive aller von diesen Basisdatentypen abgeleiteten EDT’s).
</p>
        <p>
Ohne genauere Betrachtung liegt die Annahme nahe, dass ein DateTime Datentyp von Dynamics
AX in einen DateTime Datentyp von z.B. C# “gemappt” wird.<br />
Dies ist allerdings nicht richtig. Da nicht direkt zwischen Dynamics AX Datentyp und
C# Datentyp gemappt wird, sondern immer von/zu einem XSD-Datentyp gemappt wird, wird
in C# eine neue Klasse hierfür erzeugt. 
</p>
        <p>
Ein wenig schwieriger wird es bei den beiden Dynamics AX Datentypen “Date” und “Time”.
Für diese Datentypen wird z.B. in C# kein direkt vergleichbarer Datentyp bereit gestellt.<br />
Diese Datentypen werden jeweils als C# DateTime Datentypen gemappt.
</p>
        <p>
Das Mapping der Datentypen geschieht wie folgt:
</p>
        <table border="0" cellspacing="0" cellpadding="0" width="600">
          <tbody>
            <tr height="20">
              <td width="198" align="middle">
                <p align="center">
                  <strong>Dynamics AX</strong>
                </p>
              </td>
              <td width="198" align="middle">
                <p align="center">
                  <strong>XSD Schema</strong>
                </p>
              </td>
              <td width="202" align="middle">
                <p align="center">
.<strong>NET (C#)</strong></p>
              </td>
            </tr>
            <tr height="20">
              <td width="198" align="middle">
                <p align="center">
Date
</p>
              </td>
              <td width="198" align="middle">
xs:date</td>
              <td width="202" align="middle">
System.DateTime</td>
            </tr>
            <tr height="20">
              <td width="198" align="middle">
                <p align="center">
Time
</p>
              </td>
              <td width="198" align="middle">
xs:time</td>
              <td width="202" align="middle">
System.DateTime</td>
            </tr>
            <tr height="20">
              <td width="198" align="middle">
                <p align="center">
DateTime
</p>
              </td>
              <td width="199" align="middle">
xs:dateTime</td>
              <td width="203" align="middle">
new class<br />
i.e. “AxdType_DateTime”</td>
            </tr>
          </tbody>
        </table>
        <p>
          <br />
Da die beiden Dynamics AX Datentypen “Date” und “Time” in den C# Datentyp “DateTime”
gemappt werden, kann an dieser Stelle leider ein kleines Problem entstehen.<br />
In C# ist nun leider nicht mehr zu erkennen, um was für einen Dynamics AX Datentyp
es sich z.B. bei einem Feld handelt, und ob nun ein Datum oder eine Zeit in diesem
enthalten ist.
</p>
        <p>
Oftmals entsteht diese Problem dadurch nicht, dass der jeweilige Business-Kontext
die Datentypverwendung entsprechend einschränkt und es somit teilweise egal ist ob
nun in ein Dynamics AX Date oder Time gemappt wird.<br />
Ist es aber erforderlich zu wissen, um ob ein Feld nun den Dynamics AX Datentyp Date
oder Time hat, kann der generierte Code der Proxyklasse Aufschluss geben (oder das
XSD-Schema).
</p>
        <p>
Durch die Angabe eines Serialisierungs-Attributes wird bestimmt, welcher “Teil” des
DateTime Datentyps verwendet wird.<br />
Für ein Feld, welches in einen Dynamics AX Date Datentyp gemappt wird, wird nur der
“Datumsteil” in das XML-Dokument serialisiert.<br />
Entsprechendes geschieht für einen Dynamics AX Time Datentyp.
</p>
        <p>
Mapping eines C# Datetime Datentyps in einen Dynamics AX Date Datentyp (generierter
Code der Proxyklasse):
</p>
        <p>
        </p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>[System.Xml.Serialization.XmlElementAttribute(DataType=<span class="str">"date"</span>,
IsNullable=<span class="kwrd">true</span>, Order=54)]</pre>
          <pre>
            <span class="lnum"> 2: </span>
            <span class="kwrd">public</span> System.Nullable&lt;System.DateTime&gt;
MyDateField {</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span> get {</pre>
          <pre>
            <span class="lnum"> 4: </span>
            <span class="kwrd">return</span>
            <span class="kwrd">this</span>.myDateFieldField;</pre>
          <pre class="alt">
            <span class="lnum"> 5: </span> }</pre>
          <pre>
            <span class="lnum"> 6: </span> set {</pre>
          <pre class="alt">
            <span class="lnum"> 7: </span>
            <span class="kwrd">this</span>.myDateFieldField
= <span class="kwrd">value</span>;</pre>
          <pre>
            <span class="lnum"> 8: </span>
            <span class="kwrd">this</span>.RaisePropertyChanged(<span class="str">"MyDateField"</span>);</pre>
          <pre class="alt">
            <span class="lnum"> 9: </span> }</pre>
          <pre>
            <span class="lnum"> 10: </span>}</pre>
        </div>
        <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>
        </p>
        <p>
Mapping eines C# Datetime Datentyps in einen Dynamics AX Time Datentyp (generierter
Code der Proxyklasse):
</p>
        <p>
        </p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>[System.Xml.Serialization.XmlElementAttribute(DataType=<span class="str">"time"</span>,
IsNullable=<span class="kwrd">true</span>, Order=56)]</pre>
          <pre>
            <span class="lnum"> 2: </span>
            <span class="kwrd">public</span> System.Nullable&lt;System.DateTime&gt;
MyTimeField {</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span> get {</pre>
          <pre>
            <span class="lnum"> 4: </span>
            <span class="kwrd">return</span>
            <span class="kwrd">this</span>.myTimeFieldField;</pre>
          <pre class="alt">
            <span class="lnum"> 5: </span> }</pre>
          <pre>
            <span class="lnum"> 6: </span> set {</pre>
          <pre class="alt">
            <span class="lnum"> 7: </span>
            <span class="kwrd">this</span>.myTimeFieldField
= <span class="kwrd">value</span>;</pre>
          <pre>
            <span class="lnum"> 8: </span>
            <span class="kwrd">this</span>.RaisePropertyChanged(<span class="str">"MyTimeField"</span>);</pre>
          <pre class="alt">
            <span class="lnum"> 9: </span> }</pre>
          <pre>
            <span class="lnum"> 10: </span>}</pre>
        </div>
        <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>
        </p>
        <p>
Wie durch den generierten Code der Proxyklasse ersichtlich wird, wird nur der jeweils
benötigte “Teil” eines C# Datetime Datentyps serialisiert/deserialisiert und somit
verwendet.
</p>
        <p>
Für einen Dynamics AX DateTime Datentyp wird bei Erstellung des Proxys eine neue Klasse
generiert. Somit kann der Dynamics AX Datentyp hierbei immer eindeutig identifiziert
werden.
</p>
        <p>
        </p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>[System.CodeDom.Compiler.GeneratedCodeAttribute(<span class="str">"System.Xml"</span>, <span class="str">"2.0.50727.4016"</span>)]</pre>
          <pre>
            <span class="lnum"> 2: </span>[System.SerializableAttribute()]</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span>[System.Diagnostics.DebuggerStepThroughAttribute()]</pre>
          <pre>
            <span class="lnum"> 4: </span>[System.ComponentModel.DesignerCategoryAttribute(<span class="str">"code"</span>)]</pre>
          <pre class="alt">
            <span class="lnum"> 5: </span>[System.Xml.Serialization.XmlTypeAttribute(Namespace=<span class="str">"http://schemas.microsoft.com/dynamics/2008/01/documents/Customer"</span>)]</pre>
          <pre>
            <span class="lnum"> 6: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">partial</span>
            <span class="kwrd">class</span> AxdType_DateTime
: <span class="kwrd">object</span>, System.ComponentModel.INotifyPropertyChanged {</pre>
          <pre class="alt">
            <span class="lnum"> 7: </span>
          </pre>
          <pre>
            <span class="lnum"> 8: </span>
            <span class="kwrd">private</span> System.DateTime
localDateTimeField;</pre>
          <pre class="alt">
            <span class="lnum"> 9: </span>
          </pre>
          <pre>
            <span class="lnum"> 10: </span>
            <span class="kwrd">private</span>
            <span class="kwrd">bool</span> localDateTimeFieldSpecified;</pre>
          <pre class="alt">
            <span class="lnum"> 11: </span>
          </pre>
          <pre>
            <span class="lnum"> 12: </span>
            <span class="kwrd">private</span> AxdEnum_Timezone
timezoneField;</pre>
          <pre class="alt">
            <span class="lnum"> 13: </span>
          </pre>
          <pre>
            <span class="lnum"> 14: </span>
            <span class="kwrd">private</span>
            <span class="kwrd">bool</span> timezoneFieldSpecified;</pre>
          <pre class="alt">
            <span class="lnum"> 15: </span>
          </pre>
          <pre>
            <span class="lnum"> 16: </span>
            <span class="kwrd">private</span> System.DateTime
valueField;</pre>
          <pre class="alt">
            <span class="lnum"> 17: </span>
          </pre>
          <pre>
            <span class="lnum"> 18: </span> [System.Xml.Serialization.XmlAttributeAttribute()]</pre>
          <pre class="alt">
            <span class="lnum"> 19: </span>
            <span class="kwrd">public</span> System.DateTime
localDateTime ... </pre>
          <pre>
            <span class="lnum"> 20: </span>
          </pre>
          <pre class="alt">
            <span class="lnum"> 21: </span> [System.Xml.Serialization.XmlIgnoreAttribute()]</pre>
          <pre>
            <span class="lnum"> 22: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">bool</span> localDateTimeSpecified... </pre>
          <pre class="alt">
            <span class="lnum"> 23: </span>
          </pre>
          <pre>
            <span class="lnum"> 24: </span> [System.Xml.Serialization.XmlAttributeAttribute()]</pre>
          <pre class="alt">
            <span class="lnum"> 25: </span>
            <span class="kwrd">public</span> AxdEnum_Timezone
timezone...</pre>
          <pre>
            <span class="lnum"> 26: </span>
          </pre>
          <pre class="alt">
            <span class="lnum"> 27: </span> [System.Xml.Serialization.XmlIgnoreAttribute()]</pre>
          <pre>
            <span class="lnum"> 28: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">bool</span> timezoneSpecified...</pre>
          <pre class="alt">
            <span class="lnum"> 29: </span>
          </pre>
          <pre>
            <span class="lnum"> 30: </span> [System.Xml.Serialization.XmlTextAttribute()]</pre>
          <pre class="alt">
            <span class="lnum"> 31: </span>
            <span class="kwrd">public</span> System.DateTime
Value {</pre>
          <pre>
            <span class="lnum"> 32: </span>
          </pre>
          <pre class="alt">
            <span class="lnum"> 33: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">event</span> System.ComponentModel.PropertyChangedEventHandler
PropertyChanged;</pre>
          <pre>
            <span class="lnum"> 34: </span>
          </pre>
          <pre class="alt">
            <span class="lnum"> 35: </span>
            <span class="kwrd">protected</span>
            <span class="kwrd">void</span> RaisePropertyChanged(<span class="kwrd">string</span> propertyName)...</pre>
          <pre>
            <span class="lnum"> 36: </span>}</pre>
        </div>
        <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>
        </p>
        <p>
Dieses Verhalten ist nicht nur mit C# zu beobachten. Auch JAVA oder andere Programmiersprachen
verhalten sich ähnlich und muss entsprechend berücksichtigt werden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=0af37380-886b-44e0-a6ec-ad04fc527ef8" />
        <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 AX &amp;ndash; Macros und schlie&amp;szlig;ende Klammern</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,50123879-0bcb-46ed-8323-00510cb4dfa9.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,50123879-0bcb-46ed-8323-00510cb4dfa9.aspx</id>
    <published>2010-06-04T19:10:52.017+02:00</published>
    <updated>2010-06-04T20:27:04.9604542+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/Dynamics AX 2009" label="Dynamics AX/Dynamics AX 2009" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2009.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>
Macros werden innerhalb von Dynamics AX z.B. für die Best-Practice konforme Verwendung
von festen Zeichenfolgen innerhalb des X++ Quellcodes verwendet.<br />
An vielen Stellen im System finden sich Quellcodezeilen wie diese:
</p>
        <pre class="csharpcode">#define.MySimpleMacro(<span class="str">'The string value'</span>)</pre>
        <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>
Dies ist die am meist verwendete Art der Macrodefinition innerhalb von Dynamics AX.<br />
So weit, so gut.
</p>
        <p>
Es gibt allerdings Konstellationen von “Werten”, welche bei dieser Art der Macrodefinition
zu einer Fehlermeldung beim speichern führen.<br />
Es bei dieser Art der Macrodefinition z.B. nicht möglich, eine schließende Klammer
als Macrowert zu definieren.<br />
Dies ist auch so im <a href="http://msdn.microsoft.com/en-us/library/cc197110.aspx">MSDN </a>dokumentiert: <a title="http://msdn.microsoft.com/en-us/library/cc197110.aspx" href="http://msdn.microsoft.com/en-us/library/cc197110.aspx">http://msdn.microsoft.com/en-us/library/cc197110.aspx</a></p>
        <p>
Gerade bei der Verwendung von Regular Expressions (Regex) kann dies zu regelmäßiger
Verwirrung führen, da man gerne die weiteren Macrodefinitions-Möglichkeiten vergisst
und oder diese nicht so präsent sind.
</p>
        <p>
Die Syntax 
</p>
        <pre class="csharpcode">#define.Macroname(Wert)</pre>
        <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>
sollte eigentlich nur verwendet werden um (einfache) Konstanten innerhalb des Quellcodes
zu definieren.<br />
Für alle anderen Fälle und wenn ein Macro mit mehr als einer Zeile benötigt wird,
sollte folgende Syntax zu Definition eines Macros verwendet werden:
</p>
        <pre class="csharpcode">#localmacro.AnExample

<span class="rem">// Some statements
or text</span> #endmacro</pre>
        <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>
Die Verwendung von #localmacro anstelle eines "(einfachen) #define erlaubt es nun
auch mit schließenden Klammern als Macrowert zu arbeiten oder sogar ganze SQL oder
X++ Codeblöcke zu verwenden.<br />
Eine genauere Beschreibung von Dynamics AX Macros (deren Möglichkeiten und Einsatzgebiete)
ist im MSDN dokumentiert:
</p>
        <p>
          <a href="http://msdn.microsoft.com/en-us/library/cc197107.aspx">Macros in X++</a>
        </p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=50123879-0bcb-46ed-8323-00510cb4dfa9" />
        <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 TOP 100 MOST INFLUENTIAL PEOPLE - 2010</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,6f473764-75f6-4830-a2af-5415c0d04d1f.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,6f473764-75f6-4830-a2af-5415c0d04d1f.aspx</id>
    <published>2010-05-24T19:32:34.6934132+02:00</published>
    <updated>2010-05-24T19:32:34.6934132+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>
Wie auch schon im letzten Jahr, so wurde auch in diesem Jahr ein Voting durchgeführt,
um die Top 100 Liste der einflussreichsten Personen der Microsoft Dynamics Community
zu bestimmen.
</p>
        <p>
Zitat von <a href="http://www.dynamicsworld.co.uk">DynamicsWorld</a>:
</p>
        <p>
“<em>This year we received over 350 nominations and recommendations. Almost 10,000
votes were cast for the candidates on the shortlist.<br /><br />
More people than ever before took part in nominating, voting, and judging the list
for 2010 so we would like to say thank you to everyone who took the time to get involved.<br />
We limit our list to 100 names, and as the Microsoft Dynamics channel matures and
grows the competition for inclusion is becoming more evident and the judging becomes
more difficult.<br /><br />
But, the Top 100 is not focused on the best coders or the best consultants this event
is about recognizing the people who are responsible for leading the Microsoft Dynamics
channel, industry leaders, thought leaders, innovators, and bloggers.</em>”
</p>
        <p>
Ich fühle mich geehrt, auch in diesem Jahr, meinen Namen auf der Top 100 Liste lesen
zu können.<br />
In diesem Jahr sogar unter den Top 50.
</p>
        <p>
Zitat von <a href="http://www.dynamicsworld.co.uk">DynamicsWorld</a>:
</p>
        <p>
“<em><strong>30 Axel Kuhn </strong><br />
Axel is one of the leading Dynamics AX professionals in Germany and he has been involved
in many of the development demonstrations including Dynamics Technical Airlift in
Munich. As in the past year, the event was targeted at the more technical people (consultants
/ developers) from the Dynamics partner community (Dynamics AX, Dynamics NAV and Dynamics
CRM). Axel was allowed to participate again this year as ATE (Ask the Expert) in this
event and including me set in its own session, along with other experts, Axel is one
of the German Dynamics AX developers who have resisted the temptation to fall in to
the arms of SAP. Axel has achieved the MVP award for the last years. He has been a
regular contributor to the GLS layer for Germany and is involved in some of the largest
AX implementations; his blog blog.ak-home.net regularly has a readership of over 3000
AX developers and consultants.</em>”
</p>
        <p>
Die gesamte Liste der “<a href="http://www.dynamicsworld.co.uk/Top-100-List.php">Microsoft
Dynamics Top 100 most influent People</a>” kann <a href="http://www.dynamicsworld.co.uk/Top-100-List.php">hier</a> eingesehen
werden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=6f473764-75f6-4830-a2af-5415c0d04d1f" />
        <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>BP Error 283</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,10dcba46-fb0a-486d-85d5-d46ecca4e592.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,10dcba46-fb0a-486d-85d5-d46ecca4e592.aspx</id>
    <published>2010-05-05T14:51:06+02:00</published>
    <updated>2010-05-05T20:28:54.5335552+02:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
Bei der Überprüfung der Optimalen Verfahren kann es bei Objekten, die von SysPackable
abgeleitet sind (Bspw. RunBase, RunBaseBatch) zu folgendem Fehler kommen.<span style="color: Black; background-color: Transparent; font-family: Courier New; font-size: 11px;"><br /><br />
Nicht übereinstimmende Version bei gepacktem Container. Überprüfen Sie die Implementierung
der SysPackable-Schnittstelle.</span><br /><br />
Obwohl die Versionsnummer erhöht wurde kam es zu diesem Fehler, da der Quellcode nach
der Versionsnummer durchsucht wurde. Im aktuellen Fall sah der Quellcode so aus:<span style="color: Green; background-color: Transparent; font-family: Courier New; font-size: 11px;"><br /><br />
// #define.CurrentVersion(4)</span><span style="color: Black; background-color: Transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: Transparent; font-family: Courier New; font-size: 11px;"><br />
#define</span>.CurrentVersion(5)<br /><br /></span>Es wurde die alte Versionsnummer 4 ermittelt, da diese bei der Überprüfung
des Quellcodes als erstes gefunden wurde. 
<br />
Die Zeilen wurden getauscht und das Problem dadurch behoben, als Alternative einfach
die erste Zeile löschen.<br /><img width="0" height="0" src="http://starside.eu/cptrk.ashx?id=634e404f-4f5e-4bed-bff2-8dd1e91a2891" /><img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=10dcba46-fb0a-486d-85d5-d46ecca4e592" /><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) f&amp;uuml;r Dynamics AX</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,9b6a674c-097f-4b2c-b66e-3c51fdc282e4.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,9b6a674c-097f-4b2c-b66e-3c51fdc282e4.aspx</id>
    <published>2010-04-02T13:21:56.365+02:00</published>
    <updated>2010-04-02T13:47:37.8935118+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>
Gestern erhielt ich die Nachricht von Microsoft, dass ich für mein Engagement in der
Community und mein Wissen zu Dynamics AX als Microsoft Most Valuable Professional
(MVP) für das Jahr 2010 ausgezeichnet wurde.<br />
Ich fühle mich geehrt, diese Auszeichnung nun schon zum 3ten mal (in Folge) erhalten
zu haben und möchte mich bei Microsoft für diese erneute Auszeichnung herzlich bedanken.
</p>
        <p>
Mein Dank geht aber auch an alle Teilnehmer der Community.<br />
Ohne die Community und eure Teilnahme an ihr, wäre dies alles nicht möglich.
</p>
        <p>
Ich hoffe sehr, dass gerade die deutsche Dynamics AX Community, in den nächsten Monaten/Jahren
noch weiter wächst und alle Teilnehmer von ihr profitieren können.<br />
Persönlich freue mich schon sehr auf dieses Jahr und werde weiterhin in der Community
mit Artikeln, Blogs sowie in Foren und Newsgroups aktiv sein.
</p>
        <p>
Für das Jahr 2010 plane ich auch einige weitere Aktivitäten wie z.B. Webcast und Vorträge
zu Dynamics AX und würde mich freuen, wenn diese von der Community positiv angenommen
werden.<br />
Nähere Informationen hierzu werde ich veröffentlichen, sobald konkrete Termine feststehen.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=9b6a674c-097f-4b2c-b66e-3c51fdc282e4" />
        <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 AX Whitepaper &amp;ndash; Planen der Datenbankkonfiguration</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,b875db1e-b23d-426b-818a-433a80658f75.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,b875db1e-b23d-426b-818a-433a80658f75.aspx</id>
    <published>2010-03-25T22:01:51.755+01:00</published>
    <updated>2010-03-25T22:02:44.3730001+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/Administration" label="Dynamics Ax/Administration" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cAdministration.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" />
    <category term="Dynamics Ax/HowTo" label="Dynamics Ax/HowTo" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cHowTo.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 Microsoft Downloadcenter ist ein Whitepaper verfügbar, welches bei der Konfiguration
einer Microsoft Dynamics AX Datenbank unterstützen soll.
</p>
        <p>
Das Dokument kann als eine Art “Checkliste” angesehen werden, nach welcher einzelne
Konfigurationspunkte abgearbeitet werden können.
</p>
        <p>
Das <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ab4cd401-b366-4c1c-9a73-88c945ae8191&amp;displaylang=en">Whitepaper</a> kann
über folgenden Link bezogen werden:<br /><a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=ab4cd401-b366-4c1c-9a73-88c945ae8191&amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ab4cd401-b366-4c1c-9a73-88c945ae8191&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?FamilyID=ab4cd401-b366-4c1c-9a73-88c945ae8191&amp;displaylang=en</a></p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=b875db1e-b23d-426b-818a-433a80658f75" />
        <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 AX AIF Webservices &amp;ndash; Entwickeln und Testen</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,cb09a7f7-edac-451d-8abe-26145ed8cb05.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,cb09a7f7-edac-451d-8abe-26145ed8cb05.aspx</id>
    <published>2010-02-27T16:21:20.74+01:00</published>
    <updated>2010-02-27T16:40:47.3904998+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/AIF" label="Dynamics AX/AIF" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cAIF.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" />
    <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>
Beim Entwickeln und/oder Testen von AIF-Service, welche als Webservice bereit gestellt
werden, entstehen oftmals (mindestens) 2 Fragestellungen.
</p>
        <ol>
          <li>
Wie kann die Nachricht betrachtet werden, welche zwischen den System über den Webservice
ausgetauscht wird? 
</li>
          <li>
Wie lässt sich der Webservice-Aufruf debuggen?</li>
        </ol>
        <p>
Leider werden diese Fragen bei einer Suche im Internet oft mit “Geht nicht” beantwortet.<br />
Dies ist so allerdings nicht richtig.
</p>
        <p>
Es ist z.B. möglich, für alle Webserviceaufrufe eine Tracing-File zu erzeugen, welches
u.A. auch die Nachricht protokolliert, die von oder zu Dynamics AX geschickt wurde.<br />
Um das Tracing zu aktivieren müssen nur entsprechende Einstellungen in der web.config
des Webservices vorgenommen werden.
</p>
        <p>
Wie dies im Detail funktioniert beschreibt dieses kleine <a href="http://msdn.microsoft.com/en-us/library/cc967372.aspx">How-To</a> des
Microsoft Dynamics Developer Centers im MSDN.<br /><a title="http://msdn.microsoft.com/en-us/library/cc967372.aspx" href="http://msdn.microsoft.com/en-us/library/cc967372.aspx">http://msdn.microsoft.com/en-us/library/cc967372.aspx</a></p>
        <p>
Es ist ebenfalls möglich, die Webserviceaufrufe zu debuggen.
</p>
        <p>
Allerdings müssten hierfür einige Schritte beachtet werden, damit das Debuggen von
Webserviceaufrufen auch für X++ Code funktioniert.<br />
Eine detaillierte Anleitung hierzu ist am Ende des Whitepapers “<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=90388b14-fb8c-4633-a255-28ff7146c5b2">Tips
for Creating Services in Microsoft Dynamics AX 2009</a>” zu finden.<br /><a title="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=90388b14-fb8c-4633-a255-28ff7146c5b2" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=90388b14-fb8c-4633-a255-28ff7146c5b2">http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=90388b14-fb8c-4633-a255-28ff7146c5b2</a></p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=cb09a7f7-edac-451d-8abe-26145ed8cb05" />
        <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 AX &amp;ndash; Query-Ranges und Filtereinstellungen des Benutzers</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,cea0552b-b96e-48ba-884b-c82bd2538b07.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,cea0552b-b96e-48ba-884b-c82bd2538b07.aspx</id>
    <published>2010-02-03T20:49:23.887+01:00</published>
    <updated>2010-02-03T20:51:27.0423263+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/Dynamics AX 2009" label="Dynamics AX/Dynamics AX 2009" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2009.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>
Um Datensätze in Microsoft Dynamics AX, welche z.B. auf einer Maske angezeigt werden,
entsprechend seiner Anforderungen einzuschränken (zu filtern) muss die Query (Abfrageobjekt)
durch Erstellung von Ranges (Abfrageeinschränkungsobjekt) entsprechend “manipuliert”
werden.<br />
Hierfür wird z.B. die Query einer Maskendatenquell (DataSource) verwendet und für
diese eine neue Range definiert:
</p>
        <p>
Beispiel:
</p>
        <p>
        </p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="kwrd">public</span>
            <span class="kwrd">void</span> init()</pre>
          <pre>{</pre>
          <pre class="alt">    QueryBuildRange     range;</pre>
          <pre>    ;</pre>
          <pre class="alt">    super();</pre>
          <pre>
          </pre>
          <pre class="alt">    range = CustTable_ds.query().dataSourceTable(tablenum(CustTable)).addRange(fieldnum(CustTable, AccountNum));</pre>
          <pre>    range.<span class="kwrd">value</span>(<span class="str">"1101"</span>);</pre>
          <pre class="alt">}</pre>
        </div>
        <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>
        </p>
        <p>
Im Dynamics AX Standard kann ähnlicher X++ Quelltext in vielen Masken gefunden werden,
da dies der “Standard-Weg” zum Einschränken von Datensatzabfragen bei Masken oder
auch Reports ist.<br />
Ebenso wird dieses Vorgehen auch in den Schulungsunterlagen, in der Entwicklerhilfe
und anderen Stellen beschrieben.
</p>
        <p>
Leider hat dieses Vorgehen eine kleine aber teilweise sehr störende Beschränkung.<br />
Über diesen Weg ist es nicht möglich, alle Abfrageeinschränkungen welche durch X++
Quellcode “gesetzt” wurden und Einschränkungen, welche durch einen Benutzer mittels
der Standardfilterfunktion von Dynamics AX definiert wurden, zu berücksichtigen. Beim
einer Datenaktualisierung (Aufruf von DataSource.executeQuery) gehen die von einem
Benutzer definierten Abfrageeinschränkungen verloren. 
</p>
        <p>
Dies ist darin begründet, dass es nicht nur ein DataSoucre.query-Objekt, sondern auch
ein DataSource.queryrun().query-Objekt gibt.<br />
Diese beiden “Query-Objekte” sind jeweils unterschiedliche Objekte, bzw. Objektinstanzen.
</p>
        <p>
Das DataSource.query-Objekt ist das “Basisabfrageobjekt”, welches durch einen Benutzer,
mittels der Filterfunktionalität des Standards, nicht verändert werden kann (nur durch
X++ Code).<br />
Alle durch den Benutzer vorgenommenen Änderungen an der “Basisabfrage” werden in dem
Query-Objekt von DataSource-queryrun() “gespeichert”.<br />
Dies kann unter Anderem durch Betrachtung des SQL-Statements, welches durch ein Query-Objekt
bereit gestellt wird nachgewiesen werden.
</p>
        <p>
Beispiel:
</p>
        <p>
Aufruf einer Maske mit einer durch X++ Code modifizierten Abfrage (Query).<br />
Anmerkung: Beim Aufruf der Maske wird in der “Init-Methode” eine Range (CustGroup
= “10”) gesetzt.
</p>
        <pre class="csharpcode">range = CustTable_ds.query().dataSourceTable(tablenum(CustTable)).addRange(fieldnum(CustTable, CustGroup));
range.<span class="kwrd">value</span>(<span class="str">"10"</span>);</pre>
        <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>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXQueryRangesundFiltereinstellun_10B74/QueryVSQueryRunQuery_1.jpg" target="_blank">
            <img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="QueryVSQueryRunQuery_1" border="0" alt="QueryVSQueryRunQuery_1" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXQueryRangesundFiltereinstellun_10B74/QueryVSQueryRunQuery_1_thumb.jpg" width="244" height="110" />
          </a>
        </p>
        <p>
Durch den Benutzer wird nun mittels der Dynamics AX Standard-Filterfunktion die Abfrage
bzw. deren Einschränkung(en) angepasst/verändert.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXQueryRangesundFiltereinstellun_10B74/QueryVSQueryRunQuery_2.jpg" target="_blank">
            <img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="QueryVSQueryRunQuery_2" border="0" alt="QueryVSQueryRunQuery_2" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXQueryRangesundFiltereinstellun_10B74/QueryVSQueryRunQuery_2_thumb.jpg" width="244" height="111" />
          </a>
        </p>
        <p>
Hierdurch ist zu beobachten, das sich zwar das SQL-Statement des DataSource.queryrun().query-Objekts,
aber nicht das SQL-Statement des DataSoucre.query-Objekts ändert.<br />
Da bei einem Aufruf von DataSource.executeQuery allerdings immer das DataSource.query-Objekt
verwendet wird, gehen die durch den Benutzer gewählten Abfrageeinschränkungen verloren.
</p>
        <p>
Wie ist es nun aber möglich, die von einem Benutzer gewählten Abfrageeinschränkungen/Filtereinstellung
doch zu berücksichtigen?
</p>
        <p>
Da alle Abfrageeinschränkungen, welche von einem Benutzer gewählt wurden, in dem Query-Objekt
von DataSource.queryrun() “gespeichert” werden und somit auch im X++ Code zur Verfügung
stehen ist dies recht einfach.<br />
Es muss einfach das Query-Objekt von DataSource.queryrun() genommen werden, um die
gewünschten Ranges ergenzt werden und schließlich dass Query-Objekt der DataSource
überschrieben werden.
</p>
        <p>
Beispiel:
</p>
        <p>
Basis ist eine einfach Maske, welche alle Kundendatensätze anzeigt.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXQueryRangesundFiltereinstellun_10B74/ShowQuery_1.jpg" target="_blank">
            <img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="ShowQuery_1" border="0" alt="ShowQuery_1" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXQueryRangesundFiltereinstellun_10B74/ShowQuery_1_thumb.jpg" width="244" height="74" />
          </a>
        </p>
        <p>
Dieser Maske/Abfrage wird nun durch die Standard-Filterfunktion (Benutzerfilter) eine
neue Abfrageeinschränkung hinzugefügt (Kundennummer = 1101 und 2001).
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXQueryRangesundFiltereinstellun_10B74/ShowQuery_2.jpg" target="_blank">
            <img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="ShowQuery_2" border="0" alt="ShowQuery_2" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXQueryRangesundFiltereinstellun_10B74/ShowQuery_2_thumb.jpg" width="244" height="68" />
          </a>
        </p>
        <p>
        </p>
        <p>
Wie zuvor beschrieben, wird nun eine neue Abfrageeinschränkung mit X++ Code auf dem
Query-Objekt von DataSource.queryrun “gesetzt” und das Query-Objekt der DataSource
mit diesem überschrieben. 
</p>
        <p>
        </p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="kwrd">void</span> clicked()</pre>
          <pre>{</pre>
          <pre class="alt">    Query               query;</pre>
          <pre>    QueryBuildRange     range;</pre>
          <pre class="alt">    ;</pre>
          <pre>    super();</pre>
          <pre class="alt"> </pre>
          <pre>    query = CustTable_ds.queryRun().query();</pre>
          <pre class="alt"> </pre>
          <pre>    range = query.dataSourceTable(tablenum(CustTable)).addRange(fieldnum(CustTable, CustGroup));</pre>
          <pre class="alt">    range.<span class="kwrd">value</span>(<span class="str">"10"</span>);</pre>
          <pre> </pre>
          <pre class="alt">    CustTable_ds.query(query);</pre>
          <pre> </pre>
          <pre class="alt">    CustTable_ds.executeQuery();</pre>
          <pre>}</pre>
        </div>
        <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>
        </p>
        <p>
Dies hat zur Folge, dass die durch den Benutzer gewählten Abfrageeinschränkungen,
wie zu sehen, weiterhin berücksichtigt werden.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXQueryRangesundFiltereinstellun_10B74/AddRange_2.jpg" target="_blank">
            <img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="AddRange_2" border="0" alt="AddRange_2" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXQueryRangesundFiltereinstellun_10B74/AddRange_2_thumb.jpg" width="244" height="69" />
          </a>
        </p>
        <p>
Alternativ zur Verwendung der Abfrageeinschränkung (Range) “direkt” über das Query-Objekt
kann auch mit einem oder mehreren Filtern gearbeitet werden.<br />
Diese unterliegen im Gegensatz zu den Query-Objekt aber einigen Einschränkungen, sodass
diese nicht in jeder Situation verwendet werden können.
</p>
        <p>
Der folgende X++ Code zeigt, wie ein Filter gesetzt werden kann.
</p>
        <p>
        </p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="kwrd">void</span> clicked()</pre>
          <pre>{</pre>
          <pre class="alt">    Query               query;</pre>
          <pre>    QueryBuildRange     range;</pre>
          <pre class="alt">    ;</pre>
          <pre>    super();</pre>
          <pre class="alt"> </pre>
          <pre>    CustTable_ds.filter(fieldnum(CustTable, CustGroup), <span class="str">"10"</span>);</pre>
          <pre class="alt">}</pre>
        </div>
        <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>
        </p>
        <p>
Wird eine Abfrage auf diese Art und Weise eingeschränkt, ist der Aufruf von DataSource.executeQuery()
unnötig, da die Datenaktualisierung bereits im Hintergrund durch den Filter-Aufruf
durchgeführt wird.<br />
Filter einer DataSource funktionieren vom Prinzip her wie die Standardfilter, welche
durch einen Benutzer in Dynamics AX gesetzt werden können.<br />
Dies hat zur Folge, dass sich diese ebenfalls nur auf das Query-Objekt von DataSource.queryrun()
auswirken und somit DataSource.query nicht beeinflussen.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXQueryRangesundFiltereinstellun_10B74/Add_Filter.jpg" target="_blank">
            <img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Add_Filter" border="0" alt="Add_Filter" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXQueryRangesundFiltereinstellun_10B74/Add_Filter_thumb.jpg" width="244" height="68" />
          </a>
        </p>
        <p>
Mit der Methode DataSource.removeFilter können die gesetzten Filter wieder gelöscht
werden.<br />
Leider werden hierdurch alle gesetzten Filter gelöscht, sodass nach diesem Aufruf
unter Umständen einige bereits gesetzte Filter erneut gesetzt werden müssen, um das
gewünschte Abfrageergebnis zu erhalten.
</p>
        <p>
Welche der gezeigten Methoden, zum Einschränken von Abfragen, aber nun der beste oder
bessere Weg ist, muss von Fall zu Fall entschieden werden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=cea0552b-b96e-48ba-884b-c82bd2538b07" />
        <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 AX &amp;ndash; Batchserver, Berichte und Drucken in Dateien</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,2cd736a1-d273-4db7-ad73-9d80ab89c4ed.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,2cd736a1-d273-4db7-ad73-9d80ab89c4ed.aspx</id>
    <published>2010-01-25T21:04:57.23+01:00</published>
    <updated>2010-01-25T21:15:03.0313792+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" />
    <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/Dynamics AX 2009" label="Dynamics AX/Dynamics AX 2009" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2009.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>
Oftmals besteht die Anforderung, über einen Zeitgesteuerten Job (Batchjob), das Generieren
von statistischen Berichten, welche in einer Datei gespeichert werden soll, zu automatisieren.
</p>
        <p>
Microsoft Dynamics AX stellt hierfür die Möglichkeit bereit, jeden Bericht mithilfe
der Stapelverarbeitung zu einem definierten Zeitpunkt zu generieren und in einer Datei,
z.B. in einem Netzwerklaufwerk, bereit zu stellen.<br />
Soweit stellt dies kein Problem dar, da über den Standard von Dynamics AX diese Anforderung
ohne weiteres erfüllt werden kann.
</p>
        <p>
Leider wird hierbei oft vergessen, dass  der entsprechende Batchserver (AOS)
so konfiguriert werden muss, dass dieser das “Drucken auf dem Server” zulassen muss.<br />
Dies ist eine Einstellungsoption des Serverkonfigurations-Utilities.
</p>
        <p>
Weiterhin sollte bei der Angabe der Datei bzw. des Speicherortes der Datei immer ein
UNC-Pfad verwendet werden, da die eigentlich Ausführung des Berichtes und somit auch
die Erstellung der Datei über das Benutzerkonto des AOS-Dienstes geschieht.
</p>
        <p>
Dies bedingt auch, dass entsprechende Berechtigungen für das Dienstkonto des Batchservers
(AOS) für das freigegebene Verzeichnis vergeben werden müssen, damit die Datei und
somit der Bericht erfolgreich erstellt werden kann.
</p>
        <p>
Eine weiterführende <a href="http://blogs.msdn.com/emeadaxsupport/archive/2009/07/15/test.aspx">Beschreibung</a> hierzu
ist auch im <a href="http://blogs.msdn.com/emeadaxsupport/default.aspx">EMEA Dynamics
AX Support Blog</a> zu finden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=2cd736a1-d273-4db7-ad73-9d80ab89c4ed" />
        <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 AX &amp;ndash; Den Aufrufer des Aufrufers bestimmen</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,74734dd3-3ce8-4ad9-bc29-2503a0f866aa.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,74734dd3-3ce8-4ad9-bc29-2503a0f866aa.aspx</id>
    <published>2010-01-24T20:00:59.202+01:00</published>
    <updated>2010-01-24T20:02:34.5499947+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/Dynamics AX 2009" label="Dynamics AX/Dynamics AX 2009" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2009.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>
In Microsoft Dynamics AX wird das Args-Objekt dazu verwendet, Informationen z.B. an
eine aufzurufende Maske oder Klasse zu übergeben.
</p>
        <p>
Mittels des Args-Objektes ist es z.B. möglich, den auf einer Maske ausgewählten Datensatz
an die Aufzurufende (Unter)Maske zu übergeben, um mit diesem die Darstellung und/oder
Funktionen der Maske anzupassen.<br />
Oft wird dieses Vorgehen dazu verwendet, Abfragen (Queries) entsprechend einzugrenzen,
damit nur relevante Informationen verarbeitet werden.<br />
Eine beispielhafte Anforderung hierfür könnte sein, alle Aufträge des zuvor ausgewählten
Kunden in einer neuen Maske anzuzeigen.
</p>
        <p>
Manchmal ist aber notwendig, nicht nur den Aufrufer (oder den gewählten Datensatz),
sondern auch dessen Aufrufer zu kennen, um bestimme Funktionalitäten erstellen oder
implementieren zu können.<br />
Herbei kann es sein, dass der ausgewählter Datensatz über mehrere Aufrufebenen übergeben
werden muss und der direkte Aufrufer dennoch bekannt sein muss.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXDenAufruferdesAufrufersbestimm_10DB3/GetTheCallerOfTheCaller_Schema.jpg" target="_blank">
            <img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="GetTheCallerOfTheCaller_Schema" border="0" alt="GetTheCallerOfTheCaller_Schema" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXDenAufruferdesAufrufersbestimm_10DB3/GetTheCallerOfTheCaller_Schema_thumb.jpg" width="244" height="105" />
          </a>
        </p>
        <p>
Nehmen wir an, es existiert eine Hauptmaske, auf der ein Kundendatensatz ausgewählten
werden kann. Auf einer weiteren Maske (1. Maske), sollen nun alle Aufträge des ausgewählten
Kunden angezeigt werden. Diese Maske soll über die Hauptmaske aufgerufen werden. Über
eine 2. Maske, welche über die 1. Maske aufgerufen werden soll, sollen die Adressdaten
des Kunden angezeigt werden.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXDenAufruferdesAufrufersbestimm_10DB3/GetTheCallerOfTheCaller2_2.jpg" target="_blank">
            <img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="GetTheCallerOfTheCaller2" border="0" alt="GetTheCallerOfTheCaller2" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsAXDenAufruferdesAufrufersbestimm_10DB3/GetTheCallerOfTheCaller2_thumb.jpg" width="244" height="107" />
          </a>
        </p>
        <p>
Um nun die benötigten Information, ausgewählter Kunden in der Hauptmaske, auf der
2. Maske zur Verfügung zu haben, muss über das FormRun-Objekt der 1. Maske der Aufrufer
(Caller) dieser Maske bestimmt werden.
</p>
        <p>
Beispiel (Init-Methode der 2. Maske):
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="kwrd">public</span>
            <span class="kwrd">void</span> init()</pre>
          <pre>{</pre>
          <pre class="alt">    Object          callerDataSource;</pre>
          <pre>    FormRun         callerFormRun;</pre>
          <pre class="alt">    common          callerRecord;</pre>
          <pre>    common          callerRecordOfCallerRecord;</pre>
          <pre class="alt">    ;</pre>
          <pre>    super();</pre>
          <pre class="alt"> </pre>
          <pre>
            <span class="kwrd">if</span>(element.args() &amp;&amp; element.args().dataset())</pre>
          <pre class="alt">    {</pre>
          <pre>        callerRecord = element.args().record();</pre>
          <pre class="alt">        callerDataSource = callerRecord.dataSource();</pre>
          <pre>        callerFormRun = element.args().caller();</pre>
          <pre class="alt"> </pre>
          <pre>        callerRecordOfCallerRecord = callerFormRun.args().record();</pre>
          <pre class="alt"> </pre>
          <pre>        CtrlCallerTable.text(tableid2name(callerRecord.TableId));</pre>
          <pre class="alt">        CtrlCallerOdCallerTable.text(tableid2name(callerRecordOfCallerRecord.TableId));</pre>
          <pre>    }</pre>
          <pre class="alt">}</pre>
        </div>
        <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>
 
</p>
        <p>
        </p>
        <p>
Sicherlicht läßt sich das in dem Beispiel beschriebene Verhalten auch anders (oder
eleganter) Lösen. Dieses Beispiel wurde nur gewählt, um den Ablauf oder die notwendigen
Schritte zu demonstrieren, wie Aufrufer über mehrere Ebenen bestimmt werden können.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=74734dd3-3ce8-4ad9-bc29-2503a0f866aa" />
        <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 AX - Erstellen von Notizen</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,a0f445dc-1961-43b9-a7ff-fdfdbfb2cb86.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,a0f445dc-1961-43b9-a7ff-fdfdbfb2cb86.aspx</id>
    <published>2010-01-22T19:29:40.192+01:00</published>
    <updated>2010-01-22T19:31:37.957875+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/Dynamics AX 2009" label="Dynamics AX/Dynamics AX 2009" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2009.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>
Notizen, Dokumente oder Dateien werden in Dynamics AX mithilfe des “Dokumentenmanagement-Systems”
verwaltet.
</p>
        <p>
Zu jedem beliebigen Datensatz einer beliebigen Tabelle (z.B. CustTable -&gt; Debitoren)
können beliebig viele Notizen oder Dokumente hinterlegt werden.<br />
Per Benutzeroberfläche kann die entsprechende Funktionalität über die Menüleiste der
Masken aufgerufen werden.
</p>
        <p>
Das folgende Beispiel zeigt wie dies auch per Programmcode erfolgen kann:
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="kwrd">static</span>
            <span class="kwrd">void</span> AKU_CreateDocuRefNote(Args
_args)</pre>
          <pre>{</pre>
          <pre class="alt">    CustTable       custTable;</pre>
          <pre>    DocuRef         docuRef;</pre>
          <pre class="alt">    DocuType        docuType;</pre>
          <pre>    ;</pre>
          <pre class="alt">    custTable = CustTable::find(<span class="str">"1101"</span>);</pre>
          <pre>    docuType  = DocuType::find(<span class="str">"Note"</span>);</pre>
          <pre class="alt">
          </pre>
          <pre>
            <span class="kwrd">if</span>(custTable &amp;&amp; docuType)</pre>
          <pre class="alt">    {</pre>
          <pre>        docuRef.initValue();</pre>
          <pre class="alt">
          </pre>
          <pre>        docuRef.RefTableId   = custTable.TableId;</pre>
          <pre class="alt">        docuRef.RefRecId     = custTable.RecId;</pre>
          <pre>        docuRef.RefCompanyId = custTable.dataAreaId;</pre>
          <pre class="alt"> </pre>
          <pre>        docuRef.TypeId       = docuType.TypeId;</pre>
          <pre class="alt">
          </pre>
          <pre>        docuRef.Restriction  = DocuRestriction::External;</pre>
          <pre class="alt">
          </pre>
          <pre>        docuRef.Name         = <span class="str">"Name der Notiz"</span>;</pre>
          <pre class="alt">        docuRef.Notes        = <span class="str">"Text (Inhalt) der
Notiz"</span>;</pre>
          <pre>        docuRef.insert();</pre>
          <pre class="alt">    }</pre>
          <pre>}</pre>
        </div>
        <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>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=a0f445dc-1961-43b9-a7ff-fdfdbfb2cb86" />
        <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>Ermittlung des verbleibenden Kreditlimits</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,6395e9fa-5f88-4509-a72e-0df74954fddf.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,6395e9fa-5f88-4509-a72e-0df74954fddf.aspx</id>
    <published>2009-12-30T11:16:18.126+01:00</published>
    <updated>2009-12-30T11:17:48.8136158+01:00</updated>
    <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" />
    <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 Debitoren (Kunden) kann in Microsoft Dynamics AX ein Kreditlimit vergeben/eingestellt
werden.
</p>
        <p>
In der Auftragsmaske wird bei Anlage eines Auftrag (in Abhängigkeit der Kreditlimit-Einstellungen)
das verbleibende Kreditlimit berechnet und der Auftragswert gegen dieses geprüft.<br />
Bei Überschreitung des Kreditlimits wird eine entsprechende Warnung oder ein entsprechender
Fehler ausgegeben.
</p>
        <p>
Die Funktion zur Überprüfung des Kreditlimits kann auch manuell, durch  eine
entsprechende Funktion auf der Auftragsmaske, aufgerufen werden.
</p>
        <p>
Soll das verbleibende Kreditlimit mit X++ Code berechnet werden, muss leider eine
“Kleinigkeit” beachtet werden, die so auf den ersten Blick nicht immer ersichtlich
ist bzw. für Verwirrung sorgen kann.
</p>
        <p>
Die Berechnung des verfügbaren Kreditrahmens oder des verbleibenden Kreditlimits ist
durch die alleinige Angabe eines Debitors nicht möglich.<br />
Es muss immer ein entsprechender Auftrag “vorhanden” sein um diese auszuführen zu
können.
</p>
        <p>
Berechtigterweise stellt sich die Frage, wie das verbleibende Kreditlimit eines Debitors
berechnet werden kann, wenn keine “Beziehung” zu einem Auftrag besteht bzw. wenn kein
Auftrag angegeben werden kann.<br />
Hierfür muss ein kleiner “Trick” angewendet werden, der nichts anderes macht, als
einen neuen “SalesTable” Datensatz zu initialisieren, diesen aber nicht zu speichern.<br />
Ist der “SalesTable” Datensatz initialisiert kann mithilfe der beiden Klassen “SalesTotals”
und “CustCreditLimit” der verfügbare Kreditrahmen berechnet werden.
</p>
        <p>
Beispiel:
</p>
        <div class="csharpcode">
          <pre class="alt">    CustTable               custTable = CustTable::find(<span class="str">"1101"</span>);</pre>
          <pre>    CustCreditLimit         custCreditLimit;</pre>
          <pre class="alt">    SalesTotals             salesTotals;</pre>
          <pre>    SalesTable              salesTable;</pre>
          <pre class="alt">    AmountMST               balanceEstimate;</pre>
          <pre>    AmountMst               creditRemain;</pre>
          <pre class="alt">    ;</pre>
          <pre>    salesTable.CustAccount  = custTable.AccountNum;</pre>
          <pre class="alt">    salesTable.initFromCustTable();</pre>
          <pre> </pre>
          <pre class="alt">    salesTotals = SalesTotals::construct(salesTable);</pre>
          <pre>    salesTotals.calc();</pre>
          <pre class="alt"> </pre>
          <pre>    custCreditLimit = CustCreditLimit::construct(salesTable);</pre>
          <pre class="alt">    balanceEstimate = custCreditLimit.balanceEstimate();</pre>
          <pre>
            <span class="kwrd">if</span>(custCreditLimit.useEstimated())</pre>
          <pre class="alt">    {</pre>
          <pre>        creditRemain -= balanceEstimate;</pre>
          <pre class="alt">    }</pre>
          <pre> </pre>
          <pre class="alt">    creditRemain += conpeek(salesTotals.displayFieldsCurrency(CustTable.Currency), TradeTotals::posFreeValue());</pre>
          <pre> </pre>
          <pre class="alt"> </pre>
          <pre>    info(strfmt(<span class="str">"Verbleibendes Kreditlimit: %1"</span>, creditRemain));</pre>
        </div>
        <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>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=6395e9fa-5f88-4509-a72e-0df74954fddf" />
        <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 2009 - R&amp;uuml;ckblick</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,6fdc3bfb-c749-43ab-9f38-ee298c5ef6ff.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,6fdc3bfb-c749-43ab-9f38-ee298c5ef6ff.aspx</id>
    <published>2009-11-28T17:55:50.434+01:00</published>
    <updated>2009-11-30T09:36:11.2764834+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>
Am 23. und 24. November 2009 fand der Dynamics Technical Airlift 2009 im Hotel
The Westin Grand München Arabellapark in München statt.<br />
Wie auch schon im letzten Jahr, richtete sich die Veranstaltung an die eher technisch
ausgerichteten Personen (Consultants/Entwickler) aus der Dynamics-Partner-Gemeinde
(Dynamics AX, Dynamics NAV und Dynamics CRM). 
</p>
        <p>
          <table border="0" cellspacing="0" cellpadding="0" width="100%">
            <tbody>
              <tr>
                <td valign="top" width="70%">
                  <p>
Ich selbst durfte in diesem Jahr wieder als ATE (Ask the Expert) an dieser Veranstaltung
teilnehmen und mich u.a. in einer eigenen Session, zusammen mit den anderen Experten,
den Fragen der Teilnehmer “stellen”.
</p>
                  <p>
Wie schon in den letzten Jahren, gab es viele produktbezogene “Break-Out-Sessions”,
die sich in diesem Jahr erstmals nicht nur mit technischen Themen befassten.<br />
Insgesamt denke ich, dass es wieder eine gelungene Veranstaltung war. Sicherlich waren
einige Session für den einen oder anderen nicht in der gewünschte technische Tiefe,
lieferten aber einen guten "Know-How Refresh".<br />
Es ist meist auch schwer, mit einer speziellen Session oder einem speziellen
Thema, bei einer solch großen Veranstalltung, immer jeden ansprechen zu können.<br />
Ich hatte jedenfalls das Gefühl, dass, gerade für Einsteiger oder “Jung-Professionals”,
wirklich gute Themen behandelt wurden.
</p>
                  <p>
Durch den gemeinsamen Informationsaustausch, u.a. auch durch den ATE-Stand, und die
vielen Gespräche mit Personen aus der Dynamics-Gemeinde wurde die Veranstaltung positiv
abgerundet.
</p>
                </td>
                <td valign="top" width="30%" align="middle">
                  <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsTechnicalAirlift2009Rckblick_F6BA/ATE_AIrlift2009_2.jpg" target="_blank">
                    <img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="ATE_AIrlift2009" border="0" alt="ATE_AIrlift2009" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/DynamicsTechnicalAirlift2009Rckblick_F6BA/ATE_AIrlift2009_thumb.jpg" width="244" height="166" />
                  </a>
                </td>
              </tr>
            </tbody>
          </table>
        </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 2009 kurz zu schildern.<br />
Besonders die Meinungen über die “Ask-The-Expert Session”, welche am ersten Tag statt
fand würden mich interessieren.
</p>
        <p>
Wer dies nicht "öffentlich", z.B. durch die Kommentarfunktion 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 - Dynamics Airlift 2009';(window.location?window.location.replace(e0):document.write(e0));">Email
me</a>).<br />
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=6fdc3bfb-c749-43ab-9f38-ee298c5ef6ff" />
        <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 &amp;ndash; Den zuletzt ausgew&amp;auml;hlten Datensatz ermitteln</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,463091a5-37b1-4375-9b57-6501ff8a1962.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,463091a5-37b1-4375-9b57-6501ff8a1962.aspx</id>
    <published>2009-10-24T18:45:25.203+02:00</published>
    <updated>2009-10-24T18:46:45.796875+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/Dynamics AX 2009" label="Dynamics AX/Dynamics AX 2009" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2009.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>
In Microsoft Dynamics AX beziehen Masken ihre Daten, oder anders gesagt die Daten
welche sie anzeigen, über so genannte DataSources.<br />
In einer DataSource sind somit die aktuellen auf der Maske angezeigten Daten (lokal)
gespeichert.
</p>
        <p>
Zugriff auf den jeweils aktuell ausgewählten Datensatz erhält man üblicherweise über
genau diese DataSource.<br />
Der ausgewählte Datensatz kann unter anderem auch, z.B. durch ein MenuItem(Button),
an eine Funktion oder andere Maske übergeben werden.<br />
Hierfür muss nur die Eigenschaft “DataSource”, in diesem Beispiel des MenuItem(Button),
entsprechend eingestellt sein.
</p>
        <p>
Ist keine DataSource in den Eigenschaften hinterlegt wird immer die erste DataSource
der Query verwendet bzw. dessen aktiver Datensatz übergeben.<br />
In der Regel ist dies die DataSource, welche beim Erstellen der Maske als erstes hinzugefügt
oder erstellt wurde (Ausnahme ist hier eine eventuelle Manipulation der Query per
Programmcode).
</p>
        <p>
Dieses Vorgehen ist für 90% aller Fälle das wohl am besten geeignete Vorgehen und
wird in dieser Weise auch vom Dynamics AX Standard verwendet.<br />
Leider gibt es Anwendungsfälle, bei denen diese “starre Verbindung” von DataSource
und z.B. Button oder MenuItem nicht funktioniert, beziehungsweise nicht zum gewünschten
Ergebnis führt.
</p>
        <p>
Angenommen man hat eine Maske mit zwei DataSources (CustTable und SalesTable), deren
Daten über zwei Grids angezeigt werden, sowie einen Button, welcher eine Operation
mit dem zuletzt ausgewählten Datensatz (unabhängig von der DataSource) durchführen
soll.<br />
Wenn ein Datensatz der DataSource “CustTable” selektiert wurde, soll dieser verarbeitet
werden.<br />
Ist zuletzt ein Datensatz der DataSource “SalesTable” selektiert wurden, soll die
Operation mit diesem Datensatz erfolgen.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/MicrosoftDynamicsAXDenzuletztausgewhlten_10F66/Maske_2.jpg" target="_blank">
            <img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Maske" border="0" alt="Maske" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/MicrosoftDynamicsAXDenzuletztausgewhlten_10F66/Maske_thumb.jpg" width="187" height="244" />
          </a>
        </p>
        <p>
Bei dieser Anforderung ergibt sich das Problem, dass die Standardvorgehensweise zur
Abfrage des selektierten Datensatzes nicht funktioniert, da hierfür eine der DataSources
“direkt” angesprochen werden muss.<br />
Welche DataSource nun aber die “aktive” ist, lässt sich leider nicht ermitteln, da
standardmäßig jede DataSource einen “aktiven” Datensatz hat und somit eine Unterscheidung,
ob der Aufruf für die “CustTable” oder “SalesTable” erfolgen soll, nicht möglich ist.
</p>
        <p>
Über die Methode “docCursor” der Klasse FormRun bietet sich eine zweite Möglichkeit,
den aktiven (ausgewählten) Datensatz zu ermitteln.<br />
Dieses Vorgehen wird z.B. vom Dokumentenmangement (Form “DocuView”) verwendet, um
den zuletzt gewählten Datensatz zu ermitteln und somit die dem Datensatz zugeordneten
Dokumente anzuzeigen.
</p>
        <p>
Leider scheidet dieser Weg ebenfalls aus, da ein “Click” auf den Button zur Folge
hat, dass der jeweils aktive Datensatz der “Button-DataSource” durch die Methode “docCursor”
zurück geben wird.<br />
Dies ist soweit auch logisch, da ein Button immer einer DataSource zugeordnet ist
(entweder über Angabe in der entsprechenden Eigenschaft des Buttons oder, wenn nicht
festgelegt, die erste DataSource der Query). 
</p>
        <p>
Wie ist es nun aber möglich, dennoch den zuletzt selektierten (ausgewählten) Datensatz
zu ermitteln, wenn die im Standard verwendeten Wege nicht funktionieren?
</p>
        <p>
Um das gewünschte Ziel zu erfüllen (bestimmen, welcher der zuletzt selektierte Datensatz
ist) muss eine kleine funktionale Erweiterung der “Info” Klasse durchgeführt werden.
</p>
        <p>
Zuerst müssen in der “classDeclaration” der Klasse “Info” zwei neue Variablen/Buffer
zum Speichern des selektierten Datensatzes erstellt werden. 
<br /></p>
        <div class="csharpcode">
          <pre class="alt">final <span class="kwrd">class</span> Info
extends xInfo</pre>
          <pre>{</pre>
          <pre class="alt">    #SysTaskRecorderMacro</pre>
          <pre> </pre>
          <pre class="alt">    ObjectIdent         docuView;</pre>
          <pre>    ObjectIdent         lastActivatedForm;</pre>
          <pre class="alt"> </pre>
          <pre>    ...</pre>
          <pre class="alt"> </pre>
          <pre>
            <span class="rem">// New code --&gt; </span>
          </pre>
          <pre class="alt">    Common                  lastSelectedRecord;</pre>
          <pre>    Common                  selectedRecord;</pre>
          <pre class="alt">
            <span class="rem">//New code &lt;--</span>
          </pre>
          <pre> </pre>
          <pre class="alt">    #Define.CurrentVersion(1)</pre>
          <pre>}</pre>
          <pre> </pre>
        </div>
        <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>
Nun müssen noch einige neue Methoden für die Klasse “Info” erstellt werden, damit
die Variablen/Buffer geschrieben, abgefragt und gelöscht werden können.<br /></p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="kwrd">private</span>
            <span class="kwrd">void</span> setLastSelectedRecord(FormRun
_formRun)</pre>
          <pre>{</pre>
          <pre class="alt">    ;</pre>
          <pre>
            <span class="kwrd">if</span>(_formRun.docCursor())</pre>
          <pre class="alt">    {</pre>
          <pre>
            <span class="kwrd">if</span>(lastSelectedRecord)</pre>
          <pre class="alt">        {</pre>
          <pre>            lastSelectedRecord = selectedRecord;</pre>
          <pre class="alt">        }</pre>
          <pre>
            <span class="kwrd">else</span>
          </pre>
          <pre class="alt">        {</pre>
          <pre>
            <span class="rem">//Only get the record data, not the cursor</span>
          </pre>
          <pre class="alt">            lastSelectedRecord = _formRun.docCursor().data();</pre>
          <pre>        }</pre>
          <pre class="alt"> </pre>
          <pre>
            <span class="rem">//Only get the record data, not the cursor</span>
          </pre>
          <pre class="alt">        selectedRecord = _formRun.docCursor().data();</pre>
          <pre>    }</pre>
          <pre class="alt">}</pre>
        </div>
        <div class="csharpcode"> 
</div>
        <div class="csharpcode">
          <pre class="alt">
            <span class="kwrd">private</span>
            <span class="kwrd">void</span> clearLastSelectedRecord()</pre>
          <pre>{</pre>
          <pre class="alt">    ;</pre>
          <pre>    lastSelectedRecord.clear();</pre>
          <pre class="alt">    selectedRecord.clear();</pre>
          <pre>}</pre>
          <pre> </pre>
          <div class="csharpcode">
            <pre class="alt">common lastSelectedRecord()</pre>
            <pre>{</pre>
            <pre class="alt">    ;</pre>
            <pre>
              <span class="kwrd">return</span> lastSelectedRecord;</pre>
            <pre class="alt">}</pre>
          </div>
          <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>
        </div>
        <p>
 
</p>
        <p>
Zum Schluss müssen diese neu erstellten Methoden noch entsprechend in der Methode
“formNotify” aufgerufen werden.
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="kwrd">void</span> formNotify(FormRun
formRun,FormNotify <span class="kwrd">event</span>)</pre>
          <pre>{</pre>
          <pre class="alt">
            <span class="kwrd">switch</span> (<span class="kwrd">event</span>)</pre>
          <pre>    {</pre>
          <pre class="alt">
            <span class="kwrd">case</span> FormNotify::Activate:</pre>
          <pre>
            <span class="kwrd">this</span>.activate(formRun);</pre>
          <pre class="alt">
            <span class="kwrd">if</span> (docu)</pre>
          <pre>                docu.reSearch(formRun);</pre>
          <pre class="alt">
            <span class="rem">//New code --&gt;</span>
          </pre>
          <pre>
            <span class="kwrd">this</span>.setLastSelectedRecord(formRun);</pre>
          <pre class="alt">
            <span class="rem">//New code &lt;--</span>
          </pre>
          <pre>
            <span class="kwrd">break</span>;</pre>
          <pre class="alt">
            <span class="kwrd">case</span> FormNotify::DeActivate:</pre>
          <pre>
            <span class="kwrd">break</span>;</pre>
          <pre class="alt">
            <span class="kwrd">case</span> FormNotify::Open:</pre>
          <pre>
            <span class="kwrd">this</span>.open(formRun);</pre>
          <pre class="alt">
            <span class="kwrd">if</span> (docu)</pre>
          <pre>                docu.set(formRun);</pre>
          <pre class="alt">
            <span class="kwrd">break</span>;</pre>
          <pre>
            <span class="kwrd">case</span> FormNotify::Close:</pre>
          <pre class="alt">
            <span class="kwrd">this</span>.close(formRun);</pre>
          <pre>
            <span class="kwrd">if</span> (docu)</pre>
          <pre class="alt">                docu.clear(formRun);</pre>
          <pre>
            <span class="rem">//New code --&gt;</span>
          </pre>
          <pre class="alt">
            <span class="kwrd">this</span>.clearLastSelectedRecord();</pre>
          <pre>
            <span class="rem">//New code &lt;--</span>
          </pre>
          <pre class="alt">
            <span class="kwrd">break</span>;</pre>
          <pre>
            <span class="kwrd">case</span> FormNotify::RecordChange:</pre>
          <pre class="alt">
            <span class="kwrd">if</span> (docu)</pre>
          <pre>                docu.reSearch(formRun);</pre>
          <pre class="alt">
            <span class="rem">//New code --&gt;</span>
          </pre>
          <pre>
            <span class="kwrd">this</span>.setLastSelectedRecord(formRun);</pre>
          <pre class="alt">
            <span class="rem">//New code &lt;--</span>
          </pre>
          <pre> </pre>
          <pre class="alt">
            <span class="kwrd">if</span> (formRun.isWorkflowEnabled())</pre>
          <pre>            {</pre>
          <pre class="alt">
            <span class="rem">// only refresh controls if current
ds equals workflow data source</span>
          </pre>
          <pre>
            <span class="kwrd">if</span> (formRun.objectSet().name() == formRun.workflowDataSource().name())</pre>
          <pre class="alt">                    formRun.updateWorkflowControls();</pre>
          <pre>            }</pre>
          <pre class="alt"> </pre>
          <pre>
            <span class="kwrd">break</span>;</pre>
          <pre class="alt">
            <span class="kwrd">case</span> FormNotify::NoteClicked:</pre>
          <pre>
            <span class="kwrd">if</span> (docu)</pre>
          <pre class="alt">                docu.note(formRun);</pre>
          <pre>
            <span class="kwrd">break</span>;</pre>
          <pre class="alt">    }</pre>
          <pre>}</pre>
        </div>
        <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>
        <pre class="csharpcode">Durch diese kleine Codeänderung kann nun der zuletzt ausgewählte Datensatz, unabhängig von einer DataSource, abgefragt werden.<br /></pre>
        <div class="csharpcode">
          <pre class="alt">
            <span class="kwrd">void</span> clicked()</pre>
          <pre>{</pre>
          <pre class="alt">    Common      currentRecord;</pre>
          <pre>    DictTable   dictTable;</pre>
          <pre class="alt">    ;</pre>
          <pre>    super();</pre>
          <pre class="alt">
            <span class="rem">//Get the last selected record</span>
          </pre>
          <pre>    currentRecord = infolog.lastSelectedRecord();</pre>
          <pre class="alt"> </pre>
          <pre>    dictTable = <span class="kwrd">new</span> DictTable(currentRecord.TableId);</pre>
          <pre class="alt"> </pre>
          <pre>    setPrefix(tableid2name(currentRecord.TableId));</pre>
          <pre class="alt">    info(strfmt(<span class="str">"%1 - %2"</span>, currentRecord.(dictTable.titleField1()),
currentRecord.(dictTable.titleField2())));</pre>
          <pre>}</pre>
          <pre>
            <br />
Bezogen auf die zuvor beschrieben Anforderung könnte das Ergebnis so aussehen.</pre>
          <pre> </pre>
        </div>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/MicrosoftDynamicsAXDenzuletztausgewhlten_10F66/Maske_CustTable_2.jpg" target="_blank">
            <img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Maske_CustTable" border="0" alt="Maske_CustTable" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/MicrosoftDynamicsAXDenzuletztausgewhlten_10F66/Maske_CustTable_thumb.jpg" width="244" height="184" />
          </a>  <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/MicrosoftDynamicsAXDenzuletztausgewhlten_10F66/Maske_SalesTable_2.jpg" target="_blank"><img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Maske_SalesTable" border="0" alt="Maske_SalesTable" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/MicrosoftDynamicsAXDenzuletztausgewhlten_10F66/Maske_SalesTable_thumb.jpg" width="244" height="184" /></a></p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=463091a5-37b1-4375-9b57-6501ff8a1962" />
        <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>Vorsicht beim Ändern des Status von Stapelverarbeitungsaufträgen</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,d34c10cc-83a9-45fd-a24a-1ece9e40671d.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,d34c10cc-83a9-45fd-a24a-1ece9e40671d.aspx</id>
    <published>2009-10-19T20:41:39.625+02:00</published>
    <updated>2009-10-19T20:44:22.765625+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/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>
In Microsoft Dynamics AX existiert ein Feature, um Aufgaben (Jobs), welche durch entsprechende
Klassen bereit gestellt werden, zu planen und zu einem geplanten Zeitpunkt auszuführen.<br />
Dies wird in Dynamics AX als Stapelverarbeitung (Batch-Framework) bezeichnet.
</p>
        <p>
Jeder Stapelverarbeitungsauftrag verfügt über einen Status, der angibt, in welchem
“Zustand” sich der jeweilige Stapelverarbeitungsauftrag befindet.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/VorsichtbeimnderndesStatusvonStapelverar_11DAB/BatchJobs.jpg" target="_blank">
            <img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="BatchJobs" border="0" alt="BatchJobs" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/VorsichtbeimnderndesStatusvonStapelverar_11DAB/BatchJobs_thumb.jpg" width="244" height="81" />
          </a>
        </p>
        <p>
Über die Funktion, “Funktionen –&gt; Status ändern” kann dieser Status durch den Benutzer
geändert werden.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/VorsichtbeimnderndesStatusvonStapelverar_11DAB/BatchJobs_statusaendern_2.jpg" target="_blank">
            <img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="BatchJobs_statusaendern" border="0" alt="BatchJobs_statusaendern" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/VorsichtbeimnderndesStatusvonStapelverar_11DAB/BatchJobs_statusaendern_thumb.jpg" width="244" height="81" />
          </a>
        </p>
        <p>
Beim Auswählen des “neuen” Status ist leider ein wenig Vorsicht geboten, da bei einem
falschen Klick der gesamte Stapelverarbeitungsauftrag unbrauchbar gemacht werden kann.<br />
Drückt man zufällig nicht auf einen der durch die Maske angebotenen Werte, so wird
der Status der Stapelverarbeitungsauftrags gelöscht.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/VorsichtbeimnderndesStatusvonStapelverar_11DAB/BatchJobs_OhneStatus_2.jpg" target="_blank">
            <img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="BatchJobs_OhneStatus" border="0" alt="BatchJobs_OhneStatus" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/VorsichtbeimnderndesStatusvonStapelverar_11DAB/BatchJobs_OhneStatus_thumb.jpg" width="244" height="81" />
          </a>
        </p>
        <p>
Das unschöne hierbei ist, dass dieses “Status löschen “nicht mehr rückgängig gemacht
werden kann (jedenfalls nicht durch die Dynamics AX Masken).<br />
Bei dem Versuch, wieder einen korrekten Status zu vergeben (ebenfalls über die Funktion
“Status ändern”) wird leider nicht der gewünschte Status gesetzt, sondern eine Fehlermeldung
ausgegeben.
</p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/VorsichtbeimnderndesStatusvonStapelverar_11DAB/Fehlermeldung_BatchStatus.jpg" target="_blank">
            <img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Fehlermeldung_BatchStatus" border="0" alt="Fehlermeldung_BatchStatus" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/VorsichtbeimnderndesStatusvonStapelverar_11DAB/Fehlermeldung_BatchStatus_thumb.jpg" width="244" height="130" />
          </a>
        </p>
        <p>
Die einzige Möglichkeit, wieder eine korrekten Status zu setzten, besteht leider darin,
einen kleinen Job zu schreiben (mit X++), welcher den Status per Programmcode ändert.
</p>
        <p>
Ist gerade kein Entwickler “zur Hand”, besteht nur die Möglichkeit, den Stapelverarbeitungsauftrag
zu löschen und erneut anzulegen (dies kann aber von Fall zu Fall sehr aufwändig sein).
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=d34c10cc-83a9-45fd-a24a-1ece9e40671d" />
        <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 Hotfix Rollup 3 erschienen</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,b1d817ac-9fd1-4653-9994-3fc7cb02f4ec.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,b1d817ac-9fd1-4653-9994-3fc7cb02f4ec.aspx</id>
    <published>2009-10-01T08:48:49.625+02:00</published>
    <updated>2009-10-01T08:55:03.875+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/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>
Wie bereits an mehreren Stellen angekündigt, hat Microsoft das HotFix Rollup 3 für
Microsoft Dynamics AX 2009 (RTM und SP1) veröffentlicht.
</p>
        <p>
Alle Microsoft Dynamics AX Kunden und Partner können das Hotfix Rollup über das Customer
Source bzw. Partner Source beziehen.
</p>
        <p>
          <a href="https://mbs.microsoft.com/knowledgebase/KBDisplay.aspx?scid=kb$en-us$974407&amp;wa=wsignin1.0">HotFix
Rollup 3 für Dynamics AX 2009 RTM</a> (KB974407)
</p>
        <p>
          <a href="https://mbs.microsoft.com/knowledgebase/KBDisplay.aspx?scid=kb$en-us$974409&amp;wa=wsignin1.0">HotFix
Rollup 3 für Dynamics AX 2009 SP1</a> (KB974409)
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=b1d817ac-9fd1-4653-9994-3fc7cb02f4ec" />
        <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 AX LookupForms &amp;ndash; FindValue und Range auf gleichem Feld</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,337a6675-9f17-45f8-b620-c47081ec4e8e.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,337a6675-9f17-45f8-b620-c47081ec4e8e.aspx</id>
    <published>2009-09-17T22:48:11.656+02:00</published>
    <updated>2009-09-17T22:51:26.234375+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/Dynamics AX 2009" label="Dynamics AX/Dynamics AX 2009" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cDynamics%2BAX%2B2009.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>
In mehreren Artikeln wurde bereits beschrieben, wie LookupForms erstellt werden müssen,
um alle Funktionen bereit zu stellen, die auch durch einen Standard-Lookup bereit
gestellt werden.
</p>
        <p>
Ein guter <a href="http://axaptapedia.com/Lookup_Form">Artikel</a> ist zum Beispiel
auf <a href="http://axaptapedia.com">Axaptapedia</a> zu finden:<br /><a href="http://axaptapedia.com/Lookup_Form">http://axaptapedia.com/Lookup_Form</a></p>
        <p>
Leider wurde in diesem Artikel auf eine Kleinigkeit nicht hingewiesen, die allerdings
für sehr viel Verwirrung sorgen kann.
</p>
        <p>
Um beim Öffnen des Lookups den bereits eingetragenen Wert zu selektieren (in dem Control
der aufrufenden Maske), müssen wie in dem Artikel beschrieben, die Methoden „executeQuery“
und „init“ der DataSource der Lookup-Maske überschrieben werden.
</p>
        <p>
Beispiel:
</p>
        <p>
        </p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">void</span> executeQuery()
{ FormStringControl callerControl = SysTableLookup::getCallerStringControl(element.args());
; super(); xyz_ds.findValue(fieldnum(xyz,id),callerControl.text()); } <span class="kwrd">public</span><span class="kwrd">void</span> init()
{ Query q = <span class="kwrd">new</span> Query(); QueryBuildDataSource qbds; ; super();
qbds = q.addDataSource(tablenum(xyz)); qbds.orderMode(OrderMode::OrderBy); qbds.addSortField(fieldNum(xyz,some_other_field)); <span class="kwrd">this</span>.query(q);
} </pre>
        <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>
        </p>
        <p>
Es wird auch beschrieben, dass in der Methode “init” der Datasource eigene Ranges
oder Sortings definiert werden können.<br />
Dies ist soweit auch richtig, allerdings mit einer Ausnahme.
</p>
        <p>
Wird auf dem Feld, welches bei dem Aufruf von „Datasource.findValue“ in der Methode
„init“ angegeben wurde (sollte auch immer das Feld sein, dessen Wert durch den Lookup
ausgewählt wird), eine Range definiert, so funktioniert die Selektion des zuvor gewählten
Wertes nicht mehr und es wird immer der erste Wert im Lookup selektiert bzw. ausgewählt.
</p>
        <p>
Beispiel:
</p>
        <p>
        </p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">void</span> executeQuery()
{ FormStringControl callerControl = SysTableLookup::getCallerStringControl(element.args());
; super(); xyz_ds.findValue(fieldnum(xyz,id),callerControl.text()); } <span class="kwrd">public</span><span class="kwrd">void</span> init()
{ Query q = <span class="kwrd">new</span> Query(); QueryBuildDataSource qbds; QueryBuildRange
range; ; super(); qbds = q.addDataSource(tablenum(xyz)); qbds.orderMode(OrderMode::OrderBy);
qbds.addSortField(fieldNum(xyz,some_other_field)); range = qbds.addRange(fieldnum(xyz,id));
range.<span class="kwrd">value</span>(SysQuery::valueNot(&lt;someValue&gt;)); <span class="kwrd">this</span>.query(q);
} </pre>
        <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>
        </p>
        <p>
Dieses Verhalten lässt sich allerdings umgehen, wenn anstelle des Aufrufs von “DataSource.findValue”
in der „ExecuteQuery“ Methode der DataSource der Aufruf von „DataSoucre.findRecord“
verwendet wird.<br />
Hierfür muss aber der entsprechende Datensatz des zuvor oder bereits ausgewählten
Wertes ermittelt werden um diesen beim Aufruf von „DataSource.findRecord“ als Parameter
zu übergeben.
</p>
        <p>
Beispiel:
</p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">void</span> executeQuery()
{ FormStringControl callerControl; Xyz xyzRecord; ; callerControl = SysTableLookup::getCallerStringControl(element.args());
xyzRecord = Xyz::find(callerControl.text()); super(); xyz_ds.findRecord(xyzRecord);
} <span class="kwrd">public</span><span class="kwrd">void</span> init() { Query q
= <span class="kwrd">new</span> Query(); QueryBuildDataSource qbds; QueryBuildRange
range; ; super(); qbds = q.addDataSource(tablenum(xyz)); qbds.orderMode(OrderMode::OrderBy);
qbds.addSortField(fieldNum(xyz,some_other_field)); range = qbds.addRange(fieldnum(xyz,id));
range.<span class="kwrd">value</span>(SysQuery::valueNot(&lt;someValue&gt;)); <span class="kwrd">this</span>.query(q);
}</pre>
        <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>
Es muss also darauf geachtet werden, ob eine Einschränkung (Range) auf dem „ID-Feld“
benötigt wird oder nicht.
</p>
        <p>
Wird keine Einschränkung benötigt, kann, wie in dem Artikel auf Axaptapedia beschrieben,
mit „DataSource.findValue“ gearbeitet werden um den entsprechenden Datensatz zu selektieren.<br />
Wird aber eine solche Einschränkung benötigt, muss mit „DataSoucre.findRecord“ gearbeitet
werden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=337a6675-9f17-45f8-b620-c47081ec4e8e" />
        <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>Fehler beim Bereitstellen der ODC-Dateien</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,c81d98ab-1803-4da5-beae-cd03aa116b10.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,c81d98ab-1803-4da5-beae-cd03aa116b10.aspx</id>
    <published>2009-09-12T15:11:03.531+02:00</published>
    <updated>2009-09-17T22:52:00.5625+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/Administration" label="Dynamics Ax/Administration" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAx%2cAdministration.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>
Wird Microsoft Dynamics AX 2009 mit Windows Server 2008 und SQL Server 2008 installiert,
kann es zu einem Problem bei Bereitstellen der ODC-Dateien kommen. 
</p>
        <p>
Nach dem Aufruf der Funktion „ODC-Dateien bereitstellen“ meldet Dynamics AX 2009 einen
Fehler im Infolog. 
</p>
        <p>
        </p>
        <p>
          <a href="http://blog.ak-home.net/content/binary/WindowsLiveWriter/FehlerbeimBereitstellenderODCDateien_D429/ODC_Error_2.gif" target="_blank">
            <img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="ODC_Error" border="0" alt="ODC_Error" src="http://blog.ak-home.net/content/binary/WindowsLiveWriter/FehlerbeimBereitstellenderODCDateien_D429/ODC_Error_thumb.gif" width="244" height="18" />
          </a>
        </p>
        <p>
        </p>
        <p>
Diese Fehlermeldung wird ebenfalls im Ereignislog von Windows protokolliert. 
</p>
        <p>
        </p>
        <p>
Laut einem Artikel im EMEA Dynamics AX Support Blog ist hierfür ein Hot Fix erhältlich.<br /><a href="https://blogs.msdn.com/emeadaxsupport/archive/2009/04/23/unable-to-deploy-odc-files-to-enterprise-portal-even-after-installing-hotfix-kb960158.aspx">https://blogs.msdn.com/emeadaxsupport/archive/2009/04/23/unable-to-deploy-odc-files-to-enterprise-portal-even-after-installing-hotfix-kb960158.aspx</a></p>
        <p>
        </p>
        <p>
Wurde allerdings schon das Hot Fix Rollup 2 für Dynamics AX 2009 (SP1) installiert,
wird das beschriebene Hot Fix nicht mehr benötigt. 
</p>
        <p>
        </p>
        <p>
Um nun die ODC-Dateien erfolgreich bereitstellen zu können muss wie folgt vorgegangen
werden: 
</p>
        <ul>
          <li>
Das bereits installierte Enterprise-Portal muss aktualisiert werden<br />
(Verwaltung/Einstellungen/Internet/Enterprise Portal/Bereitstellungen verwalten/ Button
„Aktualisieren“ wählen) 
</li>
          <li>
Nun (sicherheitshalber) den IIS neu starten, z.B. durch Aufruf von „iisreset“ 
</li>
          <li>
Anschließend können die ODC-Dateien bereit gestellt werden.<br />
(Verwaltung/Einstellungen/Unternehmensanalyse/OLAP/Olap-Verwaltung/ Button „ODC-Dateien
bereitstellen“ wählen)</li>
        </ul>
        <p>
        </p>
        <p>
Ob das Bereitstellen der ODC-Dateien funktioniert hat, kann überprüft werden, indem
man kontrolliert, ob die entsprechende Bibliothek im SharePoint die ODC Dateien enthält.<br />
http://&lt;servername&gt;/websites/DynamicsAx/Data%20Connections/Forms/AllItems.aspx 
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=c81d98ab-1803-4da5-beae-cd03aa116b10" />
        <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>Kostenlose Dynamics AX Sprechstunde</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,c0d1ce07-183b-4f76-9429-79fdab005cf2.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,c0d1ce07-183b-4f76-9429-79fdab005cf2.aspx</id>
    <published>2009-09-03T16:06:30.218+02:00</published>
    <updated>2009-09-03T16:13:37.28125+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>
Ab sofort führt mein Arbeitgeber, die Firma AX Solutions GmbH, einmal in der Woche
(mittwochs 15:30 - 16:30 Uhr) eine kostenlose <a href="http://www.ax-solutions.de/kostenlose-experten-sprechstunde-zu-microsoft-dynamics-ax-.html">„Experten-Sprechstunde“</a> durch.
</p>
        <p>
Diese „Sprechstunde“ richtet sich an Microsoft Dynamics AX Bestandskunden sowie Interessenten
die Antworten auf bisher unbeantwortete Fragen oder einen Rat zu einer speziellen
Problemstellung suchen.
</p>
        <p>
Unter anderem werde auch ich diese Sprechstunden abhalten und versuchen nach besten
Wissen und Gewissen Rat zu geben. Sicherlich wird sich nicht jede Problemstellung
Ad-hoc lösen lassen. Ich bin aber sicher, dass der gemeinsame Dialog zumindest Lösungsoptionen
aufzeigen wird.
</p>
        <p>
Guter Rat ist Sprichwörtlich teuer. Diesmal aber nicht, denn die Dynamics AX
Sprechstunde ist kostenlos.<br />
Auf die sonst übliche Praxisgebühr in Höhe von 10,- EUR pro Quartal wird verzichtet.
:-)
</p>
        <p>
Da die Sprechstunden in einem 1:1 Gespräch durchgeführt werden, und möglichst vielen
Ratsuchenden die Möglichkeit gegeben werden soll diese zu nutzen, ist jede Sprechstunde
auf 60 Minuten begrenzt.
</p>
        <p>
Ratsuchende bzw. Interessierte möchte ich bitte, sich unter folgendem <a href="http://www.ax-solutions.de/kontaktformular.html">Link:</a> (http://www.ax-solutions.de/kontaktformular.html)
mit dem Stichwort „Dynamics AX – Sprechstunde“ anzumelden.
</p>
        <p>
Weitere Informationen können über die  <a href="http://www.ax-solutions.de/kostenlose-experten-sprechstunde-zu-microsoft-dynamics-ax-.html">Webseite
der AX Solutions GmbH</a> bezogen werden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=c0d1ce07-183b-4f76-9429-79fdab005cf2" />
        <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>Inside Microsoft Dynamics AX 2009 &amp;ndash; Rezension</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,35934578-3dff-4555-b3d3-8ca2338ca6ed.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,35934578-3dff-4555-b3d3-8ca2338ca6ed.aspx</id>
    <published>2009-07-30T14:28:50.109+02:00</published>
    <updated>2009-07-30T14:33:30.203125+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" />
    <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 schon die erste Auflage des Buches „Inside Dynamics AX“ ist dieses Buch eine sehr
gute Ergänzung zu den von Microsoft angebotenen Schulungsunterlagen (Development 1-4). 
<br /><br />
Angefangen bei der Architektur, der Entwicklungsumgebung und –Tools, bis hin zu Code
Upgrades beschreibt dieses Buch alle Themen die für einen AX Entwickler von Bedeutung
sind.<br /><br />
Nicht nur alle neuen Features von Dynamics AX 2009, z.B. Dynamics AX Reporting Services
oder Workflows, sondern auch ältere Features wie z.B. das Application Integration
Framework (AIF), werden wesentlich detaillierter beschrieben als an anderen Stellen.<br /><br />
Leider gibt es auch Bereiche, die nicht so detailliert besprochen werden bzw. wo einige
Fragen nicht gänzlich beantwortet werden.<br />
Ein Beispiel hierfür ist die .NET Integration. Zwar wird der Business Connector ausreichend
beschrieben, aber das Thema CLR-Interoperability wird leider nur sehr knapp behandelt. 
<br /><br />
Einige Kapitel wurden im Vergleich zu der ersten Auflage des Buches gänzlich überarbeitet.<br />
Beispielhaft sei das Kapitel über Form Customizations genannt, welches komplett neu
geschrieben wurde.<br /><br />
Leider hat dies auch zur Folge, dass einige sehr gut Beschriebene Themen, wie Beispielweise
das dynamische Anpassungen von Masken mit X++,<br />
jetzt nicht mehr behandelt werden.<br /><br />
Was dieses Buch aber nicht beschreibt oder behandelt, sind die Klassen, Tabellen,
API‘s, etc. des Microsoft Dynamics AX Standards.<br />
Dies würde allerdings auch den Rahmen des Buches mehr als sprengen.<br /><br />
In der Gesamtbetrachtung ist die neue Auflage von Inside Microsoft Dynamics AX eins
der besten technischen Bücher über Microsoft Dynamics AX.<br />
Kein Buch geht soweit in die Tiefe wie dieses. Egal ob Anfänger oder erfahrener Entwickler,
für jeden ist etwas dabei.<br /><br />
Auch wer schon die erste Auflage von Inside Microsoft Dynamics AX gelesen hat, wird
viele neue Themen finden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=35934578-3dff-4555-b3d3-8ca2338ca6ed" />
        <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>Tabellenfeldeigenschaft AllowEditOnCreate und das Application Integration Framework</title>
    <link rel="alternate" type="text/html" href="http://blog.ak-home.net/PermaLink,guid,77377305-e7da-4288-a90b-0e32ac3aad0d.aspx" />
    <id>http://blog.ak-home.net/PermaLink,guid,77377305-e7da-4288-a90b-0e32ac3aad0d.aspx</id>
    <published>2009-07-30T01:09:08.953+02:00</published>
    <updated>2009-07-30T01:10:46.15625+02:00</updated>
    <category term="Dynamics AX/AIF" label="Dynamics AX/AIF" scheme="http://blog.ak-home.net/CategoryView,category,Dynamics%2BAX%2cAIF.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" />
    <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>
Wird die Eigenschaft(Property) “AllowEditOnCreate” eines Tabellenfeldes auf den Wert
“No” gesetzt, ist es nicht möglich,<br />
Werte für dieses Tabellenfeld über das AIF (Application Integration Framework) zu
schreiben (Insert-Operation).
</p>
        <p>
Alle Tabellenfelder, welche diese Eigenschaft auf “No” gesetzt haben, werden durch
das AIF automatisch auf deren Default-Wert gesetzt und jegliche Wert der AIF Nachricht
werden ignoriert.<br />
Dies hat zur Folge, dass wenn das Tabellenfeld kein Enum ist, das Tabellenfeld immer
leer ist.
</p>
        <p>
Da dieser Automatismus schon vor Ausführung der AX&lt;Table&gt; Klasse greift, der
Wert also schon beim Ausführen der entsprechenden Parm-Methode “leer” ist,<br />
kann dieses Verhalten ohne Änderung der AIF-Basis Klassen nicht geändert werden.
</p>
        <img width="0" height="0" src="http://blog.ak-home.net/aggbug.ashx?id=77377305-e7da-4288-a90b-0e32ac3aad0d" />
        <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>
</feed>
