Dynamics AX Blog - Dynamics AX 4.0 - Seite 2

RSS-Feed dieser Version
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. |
Beispiel für einen Datumsfilter einer FormDataSourceIm 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++ 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. |
Berichte lassen sich nicht über die Stapelverarbeitung ausführen
06.07.2011Microsoft Dynamics AX (Axapta)
Wenn bei einem Benutzer der Register Stapel beim Aufruf eines Berichtes nicht angezeigt wird, kann dies u.U. daran liegen, daß der Benutzer keine oder unzureichende Berechtigung für den Sicherheitsschlüssel Stapelverarbeitungsbericht (SecurityKey BatchReport) hat.
|
Berechtigung eines Benutzers für einen Sicherheitsschlüssel abfragen
24.06.2011Microsoft Dynamics AX (Axapta)
Mit diesem Stückchen Code kann man in Dynamics AX prüfen, welche Berechtigung ein Benutzer für einen bestimmten Sicherheitsschlüssel (Securitykey) hat. static void GetSecurityKeyAccess4User(Args _args) { Dictionary Dictionary = new Dictionary(); securityKeyId securityKeyId; SecurityKeySet securityKeySet = new SecurityKeySet(); UserId userId = 'user1'; SelectableDataArea dataArea = 'ceu'; AccessType accessType; ; securityKeyId = Dictionary.securityKeyName2Id("BatchReport"); securityKeySet.loadUserRights(userId, dataArea); AccessType = securityKeySet.access(securityKeyId); info(enum2str(AccessType)); } |
Tabellen mit doppelten RecIDs ermitteln
04.05.2011Microsoft Dynamics AX (Axapta)
Wenn man in Dynamics AX (4.0 bzw. 2009) einmal in die Verlegenheit kommen sollte, prüfen zu müssen, ob es Tabellen mit doppelten RecIDs gibt, kann folgendes SQL-Script dabei behilflich sein: use ax2009_standard_sp1
set nocount on declare @tableName char(100) declare db_cursor CURSOR FOR select name from dbo.sysobjects where xtype = 'U' and name <> 'ROWSTAT' and name <> 'ROWSTATUS' and name <> 'SQLSYSTEMVARIABLES' and name <> 'SYSTEMSEQUENCES' -- SYSTEMSEQUENCES enthält immer doppelte RecIDs order by name asc -- Temporäre Tabelle aufbauen IF OBJECT_ID(N'tempdb..#tmp_duplrecid', N'U') IS NOT NULL begin drop table #tmp_duplrecid end create table #tmp_duplrecid (tablename char(100), recordcounter bigint) OPEN db_cursor FETCH NEXT FROM db_cursor INTO @tableName WHILE @@FETCH_STATUS = 0 BEGIN -- Tabellen mit doppelten RecIds ermitteln exec('insert into #tmp_duplrecid select ''' + @tableName + ''', COUNT(*)' + ' from ' + @tableName + ' group by RECID ' + ' having COUNT(*) > 1') FETCH NEXT FROM db_cursor INTO @tableName END CLOSE db_cursor DEALLOCATE db_cursor set nocount off -- Tabellen mit doppelten RecIDs select 'Tabelle enthält doppelte RecIDs: ' + tablename from #tmp_duplrecid
|
|
|
|
|
|
|
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:
http://www.axaptapedia.com/index.php?title=Lookups