Dynamics AX Blog - Dynamics AX 2012 - Seite 8
RSS-Feed dieser Version
Query nach Finanzdimension sortierenUm in einem Query nach einer Finanzdimension sortieren zu können, ist die Methode SysQuery::addOrderByDimensionAttribute() zu verwenden. Das folgende Beispiel soll dies veranschaulichen. In diesem Job werden alle Debitoren ausgegeben und dabei nach der Dimension CostCenter sortiert. static void sortByDimension(Args _args) { Query query; QueryRun queryRun; QueryBuildDataSource qbds; CustTable custTable; DimensionComponent dimensionComponent; DimensionValue dimensionValue; #define.CostCenterDimensionName("CostCenter"); query = new Query(); qbds = query.addDataSource(tableNum(CustTable)); SysQuery::addOrderByDimensionAttribute(query, qbds.name(), fieldId2name(tableNum(CustTable), fieldNum(CustTable, DefaultDimension)), DimensionComponent::DimensionAttribute, SortOrder::Ascending, #CostCenterDimensionName); queryRun = new QueryRun(query); while(queryRun.next()) { custTable = queryRun.get(tableNum(CustTable)); // Get dimension value dimensionValue = (select firstonly DisplayValue from defaultDimensionView where defaultDimensionView.Name == #CostCenterDimensionName && defaultDimensionView.DefaultDimension == custTable.DefaultDimension).DisplayValue; info(strFmt("%1 %2", custTable.AccountNum, dimensionValue)); } } |
Display-Methoden cachenDaß man in Forms eingebundene Display-Methoden cachen sollte, ist bekannt. Dafür wird schon seit jeher ein entsprechender Aufruf in der init()-Methode einer Form-Datasource eingebunden: public void init() { super(); this.cacheAddMethod(tableMethodStr(DirPartyPostalAddressView,locationRoles)); }
Daß man in Dynamics AX 2012 sich diesen Aufruf sparen kann, wenn man in der Display-Methode selbst ein entsprechendes Attribut setzt, war mir selbst neu: |
SysOperation-Klassen mit Hilfe von CodePermissions berechtigenUm für eine Funktion, die über das SysOperaton-Framework abgebildet wurde, die Berechtigungen über eine Code Permission abzubilden, sind folgende Schritte notwendig:
Abbildung: Darstellung von Schritt 4 Nachzulesen auf MSDN. |
Fehlende Labels in einer bestimmten Sprache findenVor kurzem musste ich bei einem Modul eruieren, ob Labels in einer bestimmten Sprache (im Beispiel de_at) vorhanden sind, oder nicht. Gut dafür geeignet scheint mir folgendes SQL-Statement. SELECT * FROM [AX2012R3_TEST_model].[dbo].[ModelElementLabel] as existing where existing.Module = 'myModule' and existing.Language = 'en_us' and not exists ( select * from [AX2012R3_TEST_model].[dbo].[ModelElementLabel] as missing where missing.labelid = existing.LabelId and missing.Module = existing.Module and missing.Language = 'de_at') |
Bearbeitungsmodus erkennen/auf Wechsel reagierenUm in einem Formular auf das Ändern des Bearbeitungsmodus zu reagieren, kann man die task()-Methode des Formulares wie folgt überschreiben: public int task(int _taskId) { int ret; #Task ret = super(_taskId); switch(_taskId) { case #taskEditRecord: …doSomething… break; } return ret; }
Wer den aktuellen Bearbeitungsmodus auslesen möchte, kann dies über die folgende Methode tun: element.inViewMode() |
Sonderzeichen im XML-Header einer Methode verwendenManchmal muss man im XML-Header einer Methode Sonderzeichen verwenden, um den Code gut dokumentieren zu können. Damit dieser Header trotzdem wohlgeformt ist und nicht als Best-Practice-Abweichung gekennzeichnet wird, kann man einen CDATA-Abschnitt einsetzen. /// <version> /// 1.0 /// </version> /// <summary> /// <![CDATA[ Replaces following special characters: &, % ]]> /// </summary> private void someMethod() { //...do something... } Ohne diesen CDATA-Abschnitt würde AX folgende BP-Abweichung ausgeben:
|
|
|
|
|
|
|
Unlängst hatte ich erstmalig die Anforderung, im Mobile Device Portal (MDP) eine einfache Feldvalidierung einzubauen. Nachdem ich mich etwas mit den WHSWorkExecute-Klassen auseinander gesetzt habe, habe ich die Klassenmethode WHSRFControlData.processData() als gut geeignet für solcherart Prüfungen gefunden.
Eine solche Prüfung könnte wie folgt aussehen: