Dynamics AX Blog - Dynamics AX 2012 - Beiträge von 2008

RSS-Feed dieser Version
Dynamics AX: Die Aktualisierung muss im Rahmen einer Buchung ausgeführt werden
12.11.2008Microsoft Dynamics AX (Axapta)
...heisst nichts anderes, als daß man beim Entwickeln ttsbegin/ttscommit vergessen hat. Eine nicht ganz glücklich ins Deutsche übersetzte Fehlermeldung ;-) |
Dynamics AX: Illegal property valueWenn man in Dynamics AX versucht die Eigenschaft AllowDuplicates eines Tabellen-Indexes von No auf Yes zu ändern, kann folgende Fehlermeldung auftreten: Illegal property value In diesem Fall ist vermutlich der betroffene Index als PrimaryIndex oder ClusteredIndex der Tabelle eingetragen. Eigentlich auch logisch :-) |
Dynamics AX: Das RunBaseBatch-Framework
09.08.2008Microsoft Dynamics AX (Axapta)
Man braucht es immer wieder, und genau darum findet Ihr im folgenden eine kurze - und bestimmt auch nicht ganz vollständige - Übersicht, wie dieses RunBaseBatch-Framework benutzt werden kann. Erste Anlaufstelle sollte übrigens in jedem Fall die Klasse Tutorial_RunBaseBatch sein, dort werden die wichtigsten Methoden verwendet und man kann sich so zumindest einen groben Überblick verschaffen, was wie möglich ist. Um eine stapelverarbeitungsfähige Klasse zu schaffen, ist diese in erster Linie von RunBaseBatch abzuleiten. Dadurch stehen eine Reihe von Methoden zur Verfügung, von welchen ich einige versuche im Folgenden zu erklären. |
Dynamics AX: Container Quicktipp
24.07.2008Microsoft Dynamics AX (Axapta)
Container sind ja was feines, und aus diesem Grund verwende ich sie immer wieder gerne beim Programmieren unter Dynamics AX. Durch einen Blog-Beitrag bei SysDictCoder bin ich auf einen kleinen Trick gestossen, der mir in Zukunft etwas Tipp-Arbeit ersparen wird. Und zwar habe ich bisher Container immer ähnlich wie im folgenden befüllt: container fieldCon = conNull();
; fieldCon = conIns(fieldCon, conLen(fieldCon)+1, "accountNum"); fieldCon = conIns(fieldCon, conLen(fieldCon)+1, "name"); fieldCon = conIns(fieldCon, conLen(fieldCon)+1, "zipcode"); fieldCon = conIns(fieldCon, conLen(fieldCon)+1, "countryregionid"); fieldCon = conIns(fieldCon, conLen(fieldCon)+1, "county"); Wesentlich rascher ist die folgende Schreibweise: container fieldConFast = conNull();
; fieldConFast += "accountNum"; fieldConFast += "name"; fieldConFast += "zipcode"; fieldConFast += "countryregionid"; fieldConFast += "county"; SysDictCoder geht in seinem Artikel etwas mehr ins Detail, deshalb meine Empfehlung dort mal vorbeizuschauen. |
Dynamics AX: Methode des "Callers" aufrufen
17.06.2008Microsoft Dynamics AX (Axapta)
Immer wieder besteht die Notwendigkeit, ein Formular über ein anderes zu öffnen und aus diesem heraus Methoden des Aufrufers aufzurufen. Einfaches Beispiel: Ich öffne aus der Auftragsmaske (Salestable) irgendein anderes Formular (über einen MenuItemButton) und möchte nun beim Schliessen dieses Formulares eine Methode in der Salestable-Maske aufrufen. Achtung: IntelliSense funtioniert in diesem Fall nicht (außer ich möchte eine Methode aufrufen, die im FormRun-Objekt enthalten ist). if (element.args() && element.args().caller()) { if (element.args().caller().name() == formStr(Salestable)) { element.args().caller().myMethod(); } } |
Dynamics AX: FileIOPermission - Was ist das?
05.06.2008Microsoft Dynamics AX (Axapta)
Die CodeAccessPermission-Klasse ist ein Mechanismus aus dem .NET-Framework, um den Zugriff von server-seitig ausgeführtem Quellcode auf geschützte Bereiche (z.b. einer Dateistruktur) vor bösartigen Attacken zu schützen. Ob Code server- oder client-seitig ausgeführt wird, steuert bekanntermaßen das sogenannte RunOn-Property. Diese Eigenschaft ist z.b. beim Neuanlegen einer Klasse immer auf Called from eingestellt. D.h. wird diese Klasse über einen Menuitembutton aufgerufen läuft sie client-seitig, wird diese Klasse aber z.B. aus einem Stapellauf heraus aufgerufen, läuft sie am AOS.
Hat man also eine Klasse, die server-seitig laufen kann und bei der auf geschützte Bereiche zugegriffen wird, muß man eine der CodeAccessPermission-Klassen in seinen Programmcode einbinden. Die bekannteste Klasse, die von der CodeAccessPermission abgeleitet ist, ist die FileIOPermission-Klasse, die für den Zugriff auf Dateien (über AsciiIo, TextIo, …) verwendet wird. Diese Klasse wird wie folgt verwendet: FileIoPermission FileIoPermission; AsciiIo AsciiIo; ; FileIoPermission = new FileIoPermission("c:\\File.txt",'w'); FileIoPermission.assert(); AsciiIo = new AsciiIo("c:\\File.txt",'w'); // ... Muß man innerhalb einer Methode die assert-Methode mehrmals aufrufen, ist dies nur möglich wenn man zwischen den einzelnen Aufrufen CodeAccessPermission::revertAssert() einbindet. FileIoPermission FileIoPermission; AsciiIo AsciiIo; ; FileIoPermission = new FileIoPermission("c:\\File.txt",'w'); FileIoPermission.assert(); AsciiIo = new AsciiIo("c:\\File.txt",'w'); // ... CodeAccessPermission::revertAssert() FileIoPermission = new FileIoPermission("c:\\File_2.txt",'w'); FileIoPermission.assert(); AsciiIo = new AsciiIo("c:\\File_2.txt",'w'); // ... Näheres zu den CodeAccessPermission-Klassen bzw. derer Kinder sind in der MSDN zu finden. |
|
|
|
|
|
|
Mit der Debug-Klasse stellt Microsoft dem Dynamics AX-Entwickler eine Klasse zur Seite, mit deren Hilfe man während des Debuggen von Code sich Informationen anzeigen lassen kann, ohne die Infolog-Klasse missbrauchen zu müssen.