Dynamics AX Blog - Dynamics AX 4.0 - Beiträge von 2009

RSS-Feed dieser Version
PageFooter sind nicht immer dort, wo sie sein sollten
04.12.2009Microsoft Dynamics AX (Axapta)
Ich kenne kein einziges AX-Projekt, in dem nicht zumindest einer der Berichte Auftragsbestätigung, Ausgangslieferschein oder Ausgangsrechnung angepasst worden sind. Und deshalb stolpere ich auch immer wieder über das selbe Problem: Man erweitert einen Bericht (Report) um einen PageFooter, der aber nicht auf jeder Seite angedruckt werden soll. |
Alle Felder einer Tabelle auflisten
22.11.2009Microsoft Dynamics AX (Axapta)
Kurzes Codebeispiel, wie man alle Felder einer Tabelle auflistet: static void ListFieldOfTable(Args _args)
{ dictTable dictTable; int currFieldId = 0; counter c = 0; ; dictTable = new dictTable(tableNum(custtable)); do { currFieldId = dictTable.fieldNext(currFieldId); info(dictTable.fieldName(currFieldId)); c++; } while (c < dictTable.fieldCnt()); }
|
Arbeiten mit dem aufrufenden Objekt einer Form (Caller)Nachstehende Methode enthält einige Snippets, die in einem Formular verwendet werden können, um in Dynamics AX diverse Funktionen/Methoden des Aufrufenden Objektes aufzurufen. Ändert man element.args() auf z.b. _args und übergibt der Methode diese als Parameter, kann die selbe Logik auch aus einer Klasse heraus verwendet werden. void workWithCallingRecord() { common common; object object; formDataSource formDataSource; formRun formRun; inventDim inventDim; salesTable salesTable; int i; ; // Call method from calling record if( element.args() && element.args().record() ) { common = element.args().record(); if(common.isFormDataSource()) { info(tableId2Name(common.TableId)); if(formDataSourceHasMethod(common.dataSource(), identifierStr("someMethod"))) { object = common.dataSource(); object.someMethod(); } } } // Call method from calling form if(element.args() && element.args().caller() && element.args().caller().handle() == className2Id('formRun')) { formRun = element.args().caller(); if(sysFormRun::hasMethod(formRun, identifierStr("someFormMethod"))) { object = formRun; object.someFormMethod(); } } // Get value from calling record if( element.args() && element.args().record() ) { common = element.args().record(); if(common.TableId == tableNum(salesTable)) { info(common.(fieldNum(salesTable, salesId))); } } // Get value from calling datasource (form with multiple datasources) if(element.args() && element.args().caller() && element.args().caller().handle() == className2Id('formRun')) { formRun = element.args().caller(); for (i = 0; i <= formRun.dataSourceCount(); i++) { formDataSource = formRun.datasource(i); if (formDataSource && formDataSource.table() == tablenum(inventDim)) // Search for specific table { inventDim = formDataSource.cursor(); break; } } if(inventDim) { info(inventDim.InventLocationId); } } // Change data in calling datasource if(element.args() && element.args().caller() && element.args().caller().handle() == className2Id('formRun')) { formRun = element.args().caller(); for (i = 0; i <= formRun.dataSourceCount(); i++) { formDataSource = formRun.datasource(i); if (formDataSource && formDataSource.table() == tablenum(salesTable)) // Search for specific table { salesTable = formDataSource.cursor(); break; } } if(salesTable) { // Update data salesTable.PurchOrderFormNum = "Some value"; salesTable.update(); } } // Refresh calling datasource if( element.args() && element.args().record() ) { common = element.args().record(); if(common.isFormDataSource()) { formDataSource = common.dataSource(); formDataSource.research(true); } } } |
Datenquelle eines Formulares aus einer Klasse heraus aktualisieren
23.04.2009Microsoft Dynamics AX (Axapta)
Ich weiß nicht, wie es anderen Entwicklern geht, aber ich habe immer wieder das selbe Thema: In einem Formular soll eine Schaltfläche eingebunden werden, die einen oder mehrere der gerade angezeigten Datensätze über eine Klasse aktualisiert. So ein MenuItemButton ist schnell eingebunden, allerdings sorgt dieser in der Regel nicht dafür, daß die angezeigten Daten nach dem Betätigen dieses Buttons (und dem Ausführen der dahinterliegenden Programmlogik) auch aktualisiert werden. |
#PreFixField und #PreFixFieldValue
26.03.2009Microsoft Dynamics AX (Axapta)
Im Standard-Code werden in Verbindung mit dem Befehl setPrefix des öfteren die Makros PreFixField und PreFixFieldValue verwendet. Was die Verwendung dieser Makros für eine Auswirkung auf die Darstellung des Infologs hat, möchte ich im folgenden anhand einfacher Beispiele demonstrieren. Beispiel für PreFixField setPrefix('Beispiel fuer #PreFixField');
select firstonly salesTable; setPrefix(#PreFixField(salesTable, salesId)); info('Datensatz in Tabelle "Auftrag" gefunden.');
|
Dynamics AX: Datumslookup um Anzeige der Kalenderwoche erweitern
12.03.2009Microsoft Dynamics AX (Axapta)
Es muss lediglich die Eigenschaft ShowRowlabels des Table-Controls DaysTable auf YES geändert werden. Warum diese Eigenschaft nicht standardmässig auf YES gesetzt ist, wundert mich zwar, da ja die dahinterliegende Logik komplett vorhanden ist, aber das darf jemand anderer mit Microsoft diskutieren :-) Nachtrag vom 19.11.2009 |
|
|
|
|
|
|
Schon einmal einen Base Enum in Dynamics AX erstellt? Oder einen bestehenden erweitert?
Ja?! Dabei auch auf das folgende geachtet?
.) Das erste Element eines Base Enums sollte den Wert 0 aufweisen und dieser sollte "Undefiniert", "Kein", "Unbekannt" oder ähnlichem entsprechen. Vor allem wenn man den Base Enum später in Tabellen verwenden möchte, die bereits Daten enthalten.
Selbst wenn man davon ausgehen kann, daß man einen solchen undefinierten Zustand nicht benötigt, sollte man die 0 reserviert halten, sprich der erste "echte" Wert des Base Enums sollte 1 entsprechen.