Dynamics AX Blog - Dynamics AX 2012 - Seite 9

RSS-Feed dieser Version
Namen 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.
static void listDesignsOfSSRSReport(Args _args) { TreeNode treeNode; TreeNode treeNodeDesign; #aot treeNode = TreeNode::findNode(#SSRSReportsPath + #AOTRootPath); treeNode = treeNode.AOTfindChild("SalesPackingSlip"); treeNodeDesign = treeNode.AOTfindChild("Designs"); treeNodeDesign = treeNodeDesign.AOTfirstChild(); while(treeNodeDesign) { info(treeNodeDesign.AOTname()); treeNodeDesign = treeNodeDesign.AOTnextSibling(); } }