Projekte nach einem bestimmten Objekt durchsuchen

Nachstehender Job durchsucht alle Projekte nach einem bestimmten Element des AOT.

Dafür wird ein Dialog verwendet, wo man lediglich den Namen und den Typ des zu suchenden Elementes angeben muss. Außerdem kann man noch einstellen, ob auch die privaten Projektknoten durchsucht werden sollen.

static void findObjectWithinProjects(Args _args)
{
    UtilElementType utilElementType        = UtilElementType::Table;
    Name            objectName             = 'custTable';
    boolean         includePrivateProjects = false;
    Dialog          dialog;
    DialogField     df_objectName;
    DialogField     df_utilElementType;
    DialogField     df_privateProjects;
    container       conProjects;
    int             c;
    TreeNode                treeNodeRoot;
    SysOperationProgress    sysOperationProgress;
    UtilElementType         utilElementTypeSelection;    

    #Aot
    #TreeNodeSysNodeType
    #AviFiles
    #define.objectNameField("Name of object")
    #define.utilElementTypeField("Type of object")

    void findChildNodes(TreeNode _treeNodeParent, ProjectNode _projectNode, str _objectName)
    {
        TreeNode            treeNode;
        TreeNodeIterator    treeNodeIterator;

        ; 
        treeNodeIterator = _treeNodeParent.AOTiterator();
        treeNode = treeNodeIterator.next();
        while (treeNode)
        {
            if (treeNode.AOTgetNodeType() == #NT_PROJECT_GROUP)
            {
                findChildNodes(treeNode, _projectNode, _objectName);
            }
            else if (treeNode.AOTname() like _objectName)
            {
                utilElementTypeSelection = str2enum(utilElementTypeSelection, enum2str(utilElementType)); 
                if (!utilElementType || treeNode.applObjectType() == utilElementTypeSelection)
                {
                    if (!confind(conProjects, _projectNode.AOTname()))
                    {
                        conProjects = conins(conProjects, conlen(conProjects)+1, _projectNode.AOTname());
                    } 
                    return;
                }
            } 
            treeNode.treeNodeRelease();
            treeNode = treeNodeIterator.next();
        }
    }
    void loopProjectsNode(TreeNode _treeNode)
    {
        ProjectNode projectNode;
        TreeNode treeNodeProject; 

        if (_treeNode)
        {
            treeNodeProject = _treeNode.AOTfirstChild();
            while (treeNodeProject)
            {
                projectNode = treeNodeProject; 
                sysOperationProgress.setText(projectNode.name()); 
                findChildNodes(projectNode.loadForInspection(), treeNodeProject, objectName); 
                treeNodeProject = treeNodeProject.AOTnextSibling();
            }
        }
    }
    ; 
    dialog = new Dialog();
    dialog.caption("Find projects containing specific object");
    df_objectName      = dialog.addField(Types::String, #objectNameField);
    df_utilElementType = dialog.addField(typeid(UtilElementType), #utilElementTypeField);
    df_privateProjects = dialog.addField(typeid(NoYesId), "Include Private projects"); 
    df_objectName.value(objectName);
    df_utilElementType.value(utilElementType);
    df_privateProjects.value(includePrivateProjects); 
    if( !dialog.run())
    {
        return;
    } 
    objectName             = df_objectName.value();
    utilElementType        = df_utilElementType.value();
    includePrivateProjects = df_privateProjects.value(); 
    if (objectName == '*' || objectName == '')
    {
        throw error(strfmt("@SYS26332", #objectNameField));
    } 
    setprefix(strfmt("Projects containing %1 '%2'", utilElementType, objectName)); 

    startLengthyOperation(); 

    sysOperationProgress = new SysOperationProgress();
    sysOperationProgress.setCaption("Searching");
    sysOperationProgress.setAnimation(#AviSearch); 

    // Private projects
    if(includePrivateProjects)
    {
        loopProjectsNode(SysTreeNode::getPrivateProject());
    }
    // Shared projects
    loopProjectsNode(SysTreeNode::getSharedProject()); 
    sysOperationProgress.kill();
    endLengthyOperation(); 

    // List projects
    for(c=1;c<=conlen(conProjects);c++)
    {
        info(conpeek(conProjects, c));
    }
}

Wer eine etwas komfortablere Möglichkeit vorzieht, der kann sich bei Firma Loncar Technologies Inc. ein entsprechendes XPO herunterladen und ins AX einspielen. Auf Basis dieses XPOs ist auch obiger Job entstanden.

https://www.loncartechnologies.com/download.php


Kommentar hinzufügen
 
 

 

 
 
 
Beiträge des aktuellen Monats
Mai 2024
MoDiMiDoFrSaSo
 12345
6789101112
13141516171819
20212223242526
2728293031 
 
© 2006-2024 Heinz Schweda | Impressum | Kontakt | English version | Desktop 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