Dynamics AX Blog - Axapta 3.0 - Microsoft Dynamics AX (Axapta) - Seite 2

Momentan angezeigt werden nur Beiträge der Kategorie »Microsoft Dynamics AX (Axapta)« Filter entfernen

In den letzten Jahren, in denen ich mich fast hauptsächlich mit der Entwicklung im Umfeld von Microsoft Dynamics AX (vormals Axapta) beschäftigt habe, ist das eine oder andere Code-Fragment entstanden, von dem ich mir vorstellen könnte, daß es auch für andere AX-Entwickler ganz nützlich sein könnte. Aber auch Tips und Tricks zu dem mächtigen ERP-System werde ich in dieser Kategorie präsentieren.

RSS-Feed dieser Kategorie
Momentan angezeigt werden nur Beiträge, welche für die Dynamics AX-Version »Axapta 3.0« relevant sind. Filter entfernen

RSS-Feed dieser Version

Beispiel für einen Datumsfilter einer FormDataSource

Im folgenden ein Beispiel, wie man bei einer FormDataSource einen QueryBuildRange aufbaut, welcher nur tagesaktuelle Datensätze anzeigt.

Im Beispiel enthält unsere FormDataSource namens DataSourceName zwei Datumsfelder namens FromDate und ToDate und es sollen abhängig von einer Checkbox nur Datensätze angezeigt werden, die "heute" gültig sind.

public void applyFilter()
{
    queryBuildRange qbr;

    qbr = sysQuery::findOrCreateRange(DataSourceName_ds.queryBuildDataSource(), fieldNum(DataSourceName, recId));

    if( !ShowExpiredCheckBox.checked())
    {
        qbr.value(strfmt('('+
                         '((%5.%2 <= %1) && (%5.%3 >= %1)) || ' +
                         '((%5.%2 == %4) && (%5.%3 == %4)) || ' +
                         '((%5.%2 <= %1) && (%5.%3 == %4)) || ' +
                         '((%5.%3 >= %1) && (%5.%2 == %4)) ' +
                         ')',
                                Date2StrXpp(systemDateGet()),
                                fieldstr(DataSourceName, FromDate),
                                fieldstr(DataSourceName, ToDate),
                                Date2StrXpp(dateNull()),
                                tableId2name(tableNum(DataSourceName))));
    }
    else
    {
        qbr.value(SysQuery::valueUnlimited());
    }
}

Der Aufruf obiger Methode kann beispielsweise in der executeQuery() der Datasource erfolgen.


 
 

Text-Datei per X++ drucken

Ein kurzes Beispiel, wie man aus AX heraus via Notepad eine Text-Datei ausdrucken kann.

static void printTextFileFromAX(Args _args)
{
    WinAPI::shellExecute("c:\\windows\\system32\\NOTEPAD.EXE",  @'/pt "c:\temp\test.txt" "An OneNote 2010 senden"');
}

Hinweise: "An OneNote 2010 senden" ist dabei der Name des Druckers. Das Beispiel wurde in Dynamics AX 2012 verwendet, sollte allerdings auch in früheren Versionen verwendbar sein.


 
 

Fehler beim Aufrufen des ActiveX-Controls NETRONIC VARCHART XGantt in Dynamics AX

Ich habe mich schon seit längerem über zahlreiche Fehlermeldungen gewundert, die immer dann aufgetreten sind, wenn ich ein Formular geöffnet habe wo das ActiveX-Control NETRONIC VARCHART XGantt eingebettet war, z.B. das Formular Simultanplanungslauf.

Folgende Fehlermeldungen hatte ich da am Bildschirm:

ActXBaseControl::Open failure

D\Work\Projects\Ganft
4.O\NewGanttChart\NewGanttC ha rt_ActiveXsettings\GanttReqTransExplosioniFD

Loading the interface with identifier GanttReqTransExplosion failed

This is an unlicensed version of NETRONIC VARCHART XGantt. 1 Please contact NETRONIC for a Iicensed version.

Eigentlich ist die Lösung ganz einfach! Ich arbeite natürlich auf einer Entwickler-Maschine, wo unterschiedlichste Versionen von Dynamcs AX/Axapta parallel installiert sind. Und die zuerst installierte und somit älteste Version bestimmt die aktuell verwendete Version der ActiveX-Komponente.

Also ist folgendes zu tun: Deinstallieren der "veralteten" Version und installieren bzw. registrieren einer neueren Version z.B. über die Kommandozeile.

REM Uninstall old version
regsvr32.exe /u "C:\Program Files\Microsoft Business Solutions\Axapta\Client\Bin\vcgantt.ocx"

REM Install new version
regsvr32.exe "C:\Program Files\Microsoft Dynamics AX\Common\vcgantt.ocx"

 


 
 

Zugriff auf die Zwischenablage per X++

In Dynamics AX kann man selbstverständlich auch auf die Zwischenablage zugreifen, ein kurzes Codebeispiel dazu im folgenden. Funktioniert übrigens zumindest seit Axpata 2.5.

static void useClipboard(Args _args)
{
    textBuffer  textBuffer = new textBuffer();
    ;    
    // Write to clipboard

    textBuffer.appendText('Hello world!');
    textBuffer.toClipboard();

    // Read from clipboard
    textBuffer.fromClipboard();
    info(textBuffer.getText());
}

 
 

Notizen zur RecId

Die RecId ist die mehr oder weniger eindeutige Kennung eines Datensatzes in Dynamics AX. Mehr oder weniger deshalb, weil es auf die verwendete Version von Dynamics AX bzw. Axapta ankommt:

Version Bemerkung
3.0 RecId pro Mandant eindeutig (über alle Tabellen)
4.0 RecId pro Tabelle eindeutig (über alle Mandanten)
D.h. die selbe RecId kann in zwei oder mehreren Tabellen vorkommen, das ist auch der Grund, warum ein Feld einer Tabelle vom Typ RefRecId als EDT mit einer Relation abgebildet werden muss!
2009 Wie bei Version 4.0
2012 Wie bei Version 4.0

 
 

Eintrag "Einstellungen" im Kontextmenü freischalten

Kontextmenü von AX2009Jeder Entwickler kennt ihn und die meisten benutzen ihn auch regelmässig: Den Eintrag "Einstellungen" im Kontextmenü eines Formulares.

Wie man diesen Eintrag über die Berechtigungsverwaltung von Dynamics AX entfernt oder hinzufügt, wusste ich allerdings bis dato nicht. Erst ein Request beim Hersteller, den ein Kollege abgesetzt hat, hat mich auf die richtige Spur gebracht:

Unter Sicherheit / Verwaltung / Sonstiges / Fomular "Personalisierung" muss man die Berechtigung auf mindestens "Bearbeiten" setzen, damit der Eintrag im Kontextmenü aufscheint.

Und jetzt erklär mir mal einer, wie man das selbst finden soll...


 
 

Was man bei Base Enums beachten sollte

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.


 
 
Seiten « 1 2 3 4 5 6 » 

 

 
 
 
Beiträge des aktuellen Monats
März 2024
MoDiMiDoFrSaSo
 123
45678910
11121314151617
18192021222324
25262728293031
 
© 2006-2024 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.  Mehr dazu