Dynamics AX Blog - Microsoft Dynamics AX (Axapta) - Seite 9

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 KategorieNamen der Shared Projects nach einem String durchsuchenUm sich alle (Shared-)Projekte ausgeben zu lassen, die einen bestimmten Text im Namen tragen, kann man den folgenden Code verwenden. static void searchProjectName(Args _args) { ProjectNode projectNode; #AOTExport projectNode = infolog.projectRootNode(); projectNode = projectNode.AOTfindChild(#expProjectShared); projectNode = projectNode.AOTfirstChild(); while(projectNode) { setPrefix(projectNode.name()); if(strScan(projectNode.name(), "BR_", 0, 60)) { info(projectNode.name()); } projectNode = projectNode.AOTnextSibling(); } } |
Simultanplanungszeitraum aktualisieren für einen ProduktionsauftragMit Hilfe des folgenden Jobs kann man den Simultanplanungszeitraum eines Produktionsauftrages aktualisieren. Dieser muss zumindest im Status "Vorkalkuliert" sein. static void reqCalcExplode(Args _args) { ReqCalcExplodeProd reqCalcExplodeProd; ProdTable prodTable = ProdTable::find('P000272'); ; // Copied from ReqCalcExplodeProd::newProdTablePrompt() reqCalcExplodeProd = ReqCalcExplode::construct(ReqRefType::Production); reqCalcExplodeProd.parmRefType(ReqRefType::Production); reqCalcExplodeProd.parmRefId(prodTable.ProdId); reqCalcExplodeProd.parmInventTransOriginId( InventTransOriginProdTable::findInventTransOriginId(prodTable.DataAreaId, prodTable.ProdId)); reqCalcExplodeProd.parmReqPlanId(ReqPlanSched::defaultDynamicId()); reqCalcExplodeProd.parmReqCalcUpdate(ReqCalcUpdate::NetChangeMinimized); reqCalcExplodeProd.parmMarking(true); reqCalcExplodeProd.parmReqPlanData(null); reqCalcExplodeProd.run(); }
|
DIXF/DMF Entitäten neu aufbauenIch hatte vor kurzem das Problem, daß in einer Umgebung alle DIXF-Entitäten gelöscht wurden. Mit dem nachstehenden Job konnte ich diese wiederherstellen. // Based on Classes\DMFDataPopulation\createDefaultMapping static void RecreateDMFEntities(Args _args) { boolean isFound; DMFEntity dmfEntity; TmpDMFEntityList entityDescription; Counter c; entityDescription = DMFDataPopulation::getEntityList(); ttsbegin; while select entityDescription { dmfEntity.EntityName = entityDescription.EntityLabel; dmfEntity.EntityTypeName = entityDescription.EntityName; dmfEntity.Mdm = NoYes::No; isFound = dmfEntity.defaultModule(dmfEntity.EntityTypeName); if (isFound) { if (dmfEntity.validateWrite() && ! DMFEntity::find(dmfEntity.EntityName)) { dmfEntity.insert(); c++; } } } ttscommit; info(strFmt("%1 entities created.", c)); } |
Nur bestimmte Mitarbeiter in einem Mitarbeiter-Lookup anzeigenUnlängst hatte ich die Anforderung, in einer Tabelle ein neues Feld für einen Mitarbeiter zu integrieren. Flugs eine Tabellen-Realtion zur Tabelle HcmWorker erstellt, und das dadurch entstandene Feld in ins Formular integriert. Dadurch wird eine ReferenceGroup erstellt und Dynamics AX generiert aufgrund der Relation den folgenden Lookup. |
Favoriten in Entwicklungsumgebung auflistenMit Hilfe des hier gezeigten Jobs kann man die Favoriten eines Benutzers auslesen und sich ausgeben lassen. static void listFavoritesOfCurrentUser(Args _args) { TreeNode treeNode; TreeNodeIterator iterator; TreeNode newTreeNode; int level; #AOT void loopChilds(TreeNode _treeNode) { level++; while(_treeNode) { info(strRep(" ", level-1) + any2str(SysLabel::labelId2String2(_treeNode.AOTname(), Global::currentUserLanguage()))); loopChilds(_treeNode.AOTfirstChild()); level--; _treeNode = _treeNode.AOTnextSibling(); } } treeNode = infolog.userNode(); iterator = treeNode.AOTiterator(); treeNode = iterator.next(); if (treeNode) { treeNode = treeNode.AOTfirstChild(); if (treeNode) { setPrefix(treeNode.AOTname()); loopChilds(treeNode.AOTfirstChild()); } } } |
Registry auslesen/ändernFolgender Job zeigt, wie man die Registry auslesen/verändern kann. static void readWriteRegistry(Args _args) { int regKey; container cRegValue; str regKeyValue; #WinApi // Read regKey = WinAPI::regOpenKey(#HKEY_CURRENT_USER, @"Software\Microsoft\Dynamics\6.0\", #KEY_QUERY_VALUE); cRegValue = WinAPI::regGetValue(regKey, @"BuildVersion"); if(conLen(cRegValue) > 0) { regKeyValue = conPeek(cRegValue, 1); info(strFmt("%1", regKeyValue)); } WinAPI::regCloseKey(regKey); // Write regKey = WinAPI::regOpenKey(#HKEY_CURRENT_USER, @"Software\Microsoft\Dynamics\6.0\", #KEY_QUERY_VALUE); cRegValue = WinAPI::regGetValue(regKey, @"BuildVersion"); if(conLen(cRegValue) > 0) { regKey = WinAPI::regOpenKey(#HKEY_CURRENT_USER, @"Software\Microsoft\Dynamics\6.0\", #KEY_WRITE); WinAPI::regSetValueEx(regKey, @"BuildVersion", 1, "Build: 6.3.164.0"); } WinAPI::regCloseKey(regKey); } |
|
|
|
|
|
|
Wer einmal die Notwendigkeit hat, die verfügbaren Designs eines SSRS-Reports auslesen zu müssen, dem kann der nachstehende Job als Beispiel dienen.