Geänderte Objekte innerhalb eines Layers ausgeben

Um den AOT nach bestimmten Objekten zu durchsuchen, kann man in AX die TreeNode-Klasse verwende. Einige Beispiele dazu habe ich hier ja auch schon in der Vergangenheit gepostet.

In Dynamics AX 2012 ist eine neue Möglichkeit hinzugekommen, und zwar gibt es in der Datenbank nun einige Tabelle die mit SysModel* beginnen. Diese Tabellen kann man ebenfalls dazu verwenden, den AOT nach Objekten/Eigenschaften zu durchsuchen.

Ein Beispiel für eine solche Abfrage ist der folgende Job, der einfach alle Objekte (unsortiert) ausgibt, die im aktuellen Layer angepasst wurden. Beim Aufruf des jobs kann zuvor der Query geändert werden, um die Abfrage weiter einzuschränken.

static void objectsInCurrentLayer(Args _args)
{
    SysModelElement sysModelElement;
    SysModelElement rootModelElement;
    SysModelElementData sysModelElementData;
    TreeNodePath path;
    UtilElements utilElements;
    TreeNode treeNode;
    Query query;
    QueryRun queryRun;
    QueryBuildDataSource qbds;
    QueryBuildDataSource qbds1;
    QueryBuildDataSource qbds2;
    QueryBuildDataSource qbds3;
    QueryBuildDataSource qbds4;
    QueryBuildDataSource qbds5;
    QueryBuildRange layerRange;
    Set set = new Set(Types::String);
    
    startLengthyOperation();

    setPrefix(strFmt("Modified objects in %1 layer", Global::currentAOLayer()));

    query = new Query();
    qbds = query.addDataSource(tableNum(SysModelElement));
    qbds2 = qbds.addDataSource(tableNum(SysModelElementData));
    qbds3 = qbds2.addDataSource(tableNum(SysModelLayer));
    qbds4 = qbds2.addDataSource(tableNum(SysModelManifest));
    qbds5 = qbds.addDataSource(tableNum(SysModelElementType));
    
    qbds2.fetchMode(QueryFetchMode::One2One);
    qbds2.addLink(fieldNum(SysModelElement, RecId), fieldNum(SysModelElementData, ModelElement));

    qbds3.fetchMode(QueryFetchMode::One2One);
    qbds3.addLink(fieldNum(SysModelElementData, Layer), fieldNum(SysModelLayer, RecId));

    qbds4.fetchMode(QueryFetchMode::One2One);
    qbds4.addLink(fieldNum(SysModelElementData, ModelId), fieldNum(SysModelManifest, RecId));

    qbds5.fetchMode(QueryFetchMode::One2One);
    qbds5.addLink(fieldNum(SysModelElement, ElementType), fieldNum(SysModelElementType, RecId));

    layerRange = SysQuery::findOrCreateRange(qbds3, fieldNum(SysModelLayer, Layer));
    layerRange.value(queryValue(Global::currentAOLayer()));
    layerRange.status(RangeStatus::Locked);

    queryRun = new QueryRun(query);
    if( !queryRun.prompt())
    {
        return;
    }

    while(queryRun.next())
    {
        sysModelElement = queryRun.get(tableNum(SysModelElement)) as SysModelElement;
        sysModelElementData = queryRun.get(tableNum(SysModelElementData)) as SysModelElementData;

        select rootModelElement
            where rootModelElement.RecId == sysModelElement.RootModelElement;

        utilElements = null;
        utilElements.Name = rootModelElement.Name;
        utilElements.ParentId = rootModelElement.ParentId;
        utilElements.RecordType = rootModelElement.ElementType;
        utilElements.setFieldValue(fieldStr(UtilElements, ModifiedBy), sysModelElementData.ModifiedBy);
        utilElements.setFieldValue(fieldStr(UtilElements, CreatedBy), sysModelElementData.CreatedBy);

        try
        {
            path = xUtilElements::getNodePath(utilElements);
        }
        catch(Exception::Warning)
        {
            // Continue if errors occur (for exmaple renamed objects, not written to database)
            continue;
        }

        if (set.in(path))
        {
            continue;
        }
        set.add(path);

        treeNode = xUtilElements::getNodeInTree(utilElements);
        
        info(path);
    }
    info("Done");

    endLengthyOperation();
}
Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012

 
 

 

 
 
 
Beiträge des aktuellen Monats
November 2024
MoDiMiDoFrSaSo
 123
45678910
11121314151617
18192021222324
252627282930 
 
© 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