Dynamics AX Blog - Dynamics AX 2009 - Seite 3

RSS-Feed dieser Version
SQL-Fehler beim Öffnen/Synchronisieren einer TabelleTritt beim Öffnen oder Synchronisieren einer - meist neu erstellten - Tabelle der folgende Fehler auf
so kann die Ursache sein, daß die Tabelle ein Feld enthält, dessen Name ein "Reserved Word" der SQL-Datenbank ist. Beispielsweise darf ein Feld nicht Primary genannt werden. |
Makro innerhalb eines SELECT-Statements verwendenDas Beispiel listet beispielsweise nur aktive Stücklistenpositionen (Tabelle BOM) auf (aktiv über die Felder FromDate und ToDate). Lässt man den zweiten Parameter des Makros leer (dateNull()), so werden alle Stücklistenpositionen gelistet. static void useMacroInSelectStatement(Args _args) { bom bom; date emptyDate; // parameters: %1 = table instance, %2 date, %3 empty date value #localmacro.bomDateFilter && ( %2 == dateNull() || ( ((%1.FromDate <= %2) && (%1.ToDate >= %2)) || ((%1.FromDate == %3) && (%1.ToDate == %3)) || ((%1.FromDate <= %2) && (%1.ToDate == %3)) || ((%1.FromDate == %3) && (%1.ToDate >= %2)) )) #endMacro ; while select bom where bom.ItemId == '123' #bomDateFilter(bom, systemDateGet(), emptyDate) { info(bom.bomid); } } |
Welche Felder werden in einem automatisch generierten Lookup angezeigt?Mir wurde diese Frage vor kurzem selbst gestellt und konnte diese allerdings nur zum Teil beantworten. Ich wusste aber noch, daß ich schon einmal eine Seite gesehen hatte, wo dies genau erklärt wird. Aber ich wusste weder noch wo, noch konnte ich sie über diverse Suchmaschinen finden. Aber in alten Unterlagen fand ich die Quelle dann doch, der Trick um die Quelle auch mit Google und Konsorten zu finden ist, mit dem altem Namen von Microsoft Dynamics AX - Axapta danach zu suchen! Tut man dies, so findet man rasch folgende Seite: |
Verwenden einer Assembly/DLL in Dynamics AXUm eine DLL in Dynamics AX verwenden zu können, muss diese im References-Knoten des AOT hinzugefügt werden.
In beiden Fällen muss nun der Dialog mit OK bestätigt werden. |
Word-Dokument mit Tabelle per Code erstellen
static void CreateWordFileWithTable(Args _args) { COM wordApplication; COM wordTables; COM wordTable; COM wordSelection; COM wordTableRows; COM wordRange; COM wordTableCell; COM wordTableCellRange; COM wordDocuments; COM wordDocument; COM wordTableBorders; ; // Initialize Word object and document wordApplication = new COM("Word.Application"); wordDocuments = wordApplication.documents(); wordDocuments.add(); wordDocument = wordDocuments.item(1); wordSelection = wordApplication.selection(); wordRange = wordSelection.range(); // Get table collection wordTables = wordSelection.tables(); // Create table with 3 rows and 5 columns wordTable = wordTables.add(wordRange, 3, 5); // Fill cell: First line, second column wordTableCell = wordTable.Cell(1, 2); wordTableCellRange = wordTableCell.range(); wordTableCellRange.text("Hello"); // Fill cell: Second line, third column wordTableCell = wordTable.Cell(2, 3); wordTableCellRange = wordTableCell.range(); wordTableCellRange.text("World"); // Enable table borders wordTableBorders = wordTable.borders(); wordTableBorders.enable(true); // Add colored borders wordTableBorders.InsideLineStyle(3); wordTableBorders.OutsideLineStyle(5); wordTableBorders.OutsideColorIndex(2); // Get table row collection and add a new row wordTableRows = wordTable.rows(); wordTableRows.add(); // Open word wordApplication.visible(true); wordApplication.finalize(); } Das per obigem Code erstellte Word-Dokument sieht wie folgt aus: |
Erstellen einer AX<Table>-KlasseBenötigt man für eine Tabelle eine sog. AX<Table>-Klasse kann man sich diese mit Hilfe der Klasse AxGenerateAxBCClass generieren lassen. Dazu einfach diese Klasse im AOT per rechter Maustaste aufrufen und dem Assistenten folgen. Die auf diese Art & Weise generierte Klasse muss unter manchen Umständen noch etwas bearbeitet werden, dennoch geht der Vorgang rascher von der Hand, als die Klasse komplett selbst erstellen zu müssen. Und wenn sich die Tabelle ändert, beispielweise wenn neue Felder hinzukommen, kann man die AxGenerateAxBCClass einfach nochmals aufrufen und die AX<Table>-Klasse wird entsprechend erweitert. Wie man solche AX<Table>-Klassen verwendet, habe ich u.a. hier beschrieben. |
|
|
|
|
|
|