Dynamics AX Blog - Seite 27
Text-Datei per X++ druckenEin 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. |
AX 2012: LedgerDimension generieren II
07.07.2013Microsoft Dynamics AX (Axapta)
Update 11.05.2014: Da die unten stehende Code-Beispiele nicht in allen Applikationen zu funktionieren scheinen, habe ich unter folgendem Beitrag ein weiteres Code-Beispiel veröffentlicht. Im folgenden ein kurzes Code-Snippet, welches zeigt wie man beispielsweise Finanzdimensionen mit einem Haupt-/Sachkonto zu einer RecId verbindet, welche beispielsweise als LedgerDimension in einer Sachkontenjournal-Zeile (Allgemeine Erfassung; LedgerJournalTrans.LedgerDimension) verwendet werden kann. static void mergeDimensions(Args _args)
{ SalesLine salesLine; MainAccount mainAccount; LedgerDimensionAccount ledgerDimensionAccount; // Get source dimension values (for example from SalesLine-Record) select firstonly salesLine where salesLine.SalesId == "20001" && salesLine.DefaultDimension; // Get main account mainAccount = MainAccount::findByMainAccountId('0500'); // Merge main account and source dimension values and return RecId which can be used as ledgerDimension ledgerDimensionAccount = DimensionDefaultingService::serviceCreateLedgerDimension(mainAccount.RecId, salesLine.DefaultDimension); info(strFmt("DefaultDimension (Source RecId): %1 LedgerDimension (Merged RecId): %2", salesLine.DefaultDimension, ledgerDimensionAccount)); } Das zweite Snippet macht prinzipiell das selbe wie oben, allerdings wird hier statt einem Haupt-/Sachkonto ein Debitorenkonto verwendet. |
Markierte Datensätze eines Formulares verarbeiten/iterieren
03.07.2013Microsoft Dynamics AX (Axapta)
Um in Dynamics AX die markierten Datensätze einer Formular-Datenquelle (FormDataSource) zu verarbeiten/iterieren kann folgendes Code-Beispiel helfen: void markSelected()
{ inventTrans inventTransSelected; inventTrans inventTrans4Update; ttsbegin; inventTrans4Update.setTmpData(inventTrans); //DIES IST NUR BEI TEMPORÄREN TABELLEN NOTWEDNIG for (inventTransSelected = inventTrans_ds.getFirst(true) ? inventTrans_ds.getFirst(true) : inventTrans_ds.cursor(); inventTransSelected; inventTransSelected = inventTrans_ds.getnext()) { select firstonly forUpdate inventTrans4Update where inventTrans4Update.RecId == inventTransSelected.RecId; inventTrans4Update.Marked = NoYes::Yes; inventTrans4Update.update(); } ttscommit; inventTrans_ds.executeQuery(); } Im Beispiel werden die markierten Datensätze der Tabelle InventTrans durchlaufen und ein Feld Marked auf TRUE aktualisiert. In Dynamics AX 2012 kann übrigens statt dessen auch die Klasse MultiSelectionHelper dafür verwendet werden. |
Eine Tabelle um ein Passwort-Feld erweitern
29.06.2013Microsoft Dynamics AX (Axapta)
Im folgenden eine kurze Anleitung, wie man eine Tabelle um ein Feld erweitert, in welchem ein verschlüsseltes Passwort gespeichert werden kann.
static DEV_ServerPasswordStr password()
{ CryptoBlob cryptoBlob = connull(); ; cryptoBlob = DEV_Parameters::find().ServerPassword; if (cryptoBlob != connull()) return cryptoblob2str(WinapiServer::cryptUnProtectData(cryptoBlob)); else return ''; }
edit DEV_ServerPasswordStr setPassword(boolean _set = false, DEV_ServerPasswordStr _pwd = '')
{ CryptoBlob cryptoBlob = connull(); ; if (_set && _pwd != 'xxxxxxxx') { cryptoBlob = WinapiServer::cryptProtectData(str2cryptoblob(_pwd)); DEV_Parameters.ServerPassword = cryptoBlob; DEV_Parameters.update(); } if (DEV_Parameters.ServerPassword != connull()) { return 'xxxxxxxx'; } else { return ''; } }
|
AX 2012: SysOperation-Framework: Security-Hinweis
26.06.2013Microsoft Dynamics AX (Axapta)
Wenn man in einer Service-Klasse das Attribute SysEntryPointAttribute auf True gesetzt hat (wie ich dies beispielsweise in diesem Blog-Beitrag getan habe), darf man nicht vergessen, die jeweilige Methode in den Knoten Permissions > Server Methods eines Security-Privileges einzufügen. Nur das Hinzufügen des MenuItems der jeweiligen Controller-Klasse reicht nicht aus! Sonst kann der Benutzer unter Umständen zwar den Dialog der Funktion aufrufen, diese dann aber nicht starten. Weiters sollte man beachten, daß man Tabellen, die von dieser Klasse verwendet/befüllt werden gleichermassen über ein Privilege berechtigt. |
|
|
|
|
|
|
Man kann über die Druckverwaltungseinstellungen/Druckverwaltung von Dynamics AX Dokumente so einrichten, daß diese abhängig vom Dateninhalt auf einem anderen Drucker oder Druckmedium ausgegeben werden.
Dazu muss man einfach mit der rechten Maustaste beim jeweiligen Dokument den Menüpunkt Neu anwählen. Nun kann man in der Gruppe Bedingung Kriterien hinterlegen.
In nachstehendem Beispiel werden beispielweise Auftragsbestätigungen mit einem Gesamtbetrag von mehr als 100 EUR gesondert verarbeitet.